【问题标题】:Connecting to MySQL 5.6 inside Docker For Desktop/Kubernetes: ERROR 1130 (HY000): Host 'xx.xx.xx.xx' is not allowed to connect to this MySQL server在 Docker For Desktop/Kubernetes 中连接到 MySQL 5.6:错误 1130 (HY000): Host 'xx.xx.xx.xx' is not allowed to connect to this MySQL server
【发布时间】:2021-02-04 21:49:42
【问题描述】:

我是following theses instructions(第 181 页)来创建持久卷和声明、mysql 副本集和服务。我在 yaml 文件中为副本集指定了 mysql v5.6。

查看 pod 的日志后,看起来是成功了。那么我

kubectl run -it --rm --image=mysql --restart=Never mysql-client -- bash
mysql -h mysql -p 3306 -u root

它提示我输入密码,然后我收到此错误:

ERROR 1130 (HY000): Host '10.1.0.17' is not allowed to connect to this MySQL server

显然 MySQL 有一个默认情况下不允许远程连接的功能,我必须更改配置文件,但我不知道如何在 yaml 文件中执行此操作。下面是我的 YAML。如何更改它以允许远程连接?

谢谢

齐格飞

cat <<END-OF-FILE | kubectl apply -f -
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: mysql
  # labels so that we can bind a Service to this Pod
  labels:
    app: mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: tododata
        image: mysql:5.6
        resources:
          requests:
            cpu: 1
            memory: 2Gi
        env:
        # Environment variables are not a best practice for security,
        # but we're using them here for brevity in the example.
        # See Chapter 11 for better options.
        - name: MYSQL_ROOT_PASSWORD
          value: some-password-here
        livenessProbe:
          tcpSocket:
            port: 3306
        ports:
        - containerPort: 3306
        volumeMounts:
          - name: tododata
            # /var/lib/mysql is where MySQL stores its databases
            mountPath: "/var/lib/mysql"
      volumes:
      - name: tododata
        persistentVolumeClaim:
          claimName: tododata
END-OF-FILE

美国东部夏令时间 2020 年 10 月 24 日星期六下午 3 点更新:试用 Bitnami MySQL

我喜欢 Ben 的 using bitnami mysql 想法,因为这样我就不必创建自己的自定义 docker 映像了。但是,当使用 bitnami 并尝试连接到他们的 mysql 服务器时,我得到了

ERROR 2003 (HY000): Can't connect to MySQL server on 'my-release-mysql.default.svc.cluster.local' (111)

这发生在我使用此命令成功获取 bash shell 后:

kubectl run my-release-mysql-client --rm --tty -i --restart='Never' --image  docker.io/bitnami/mysql:8.0.22-debian-10-r0 --namespace default --command -- bash

然后,按照说明,我这样做并得到上面的 HY000 错误。

mysql -h my-release-mysql.default.svc.cluster.local -uroot -p

2020 年 11 月 4 日星期三更新:

谢谢 Ben.. 是的 -- 我已经在 10 月 24 日(大约)尝试过,当我执行k describe pod 时,我得到了mysqladmin: connect to server at 'localhost' failed error: 'Can't connect to local MySQL server through socket '/opt/bitnami/mysql/tmp/mysql.sock' (2)' Check that mysqld is running and that the socket: '/opt/bitnami/mysql/tmp/mysql.sock' exists!

当然,当我按照很好生成的说明运行mysql客户端时,客户端无法连接,因为mysqld已经死了。

这是在删除 pvcs 和 stss 并在通过 helm 重新安装之前执行 helm delete my-release 之后。

不幸的是,当我第一次尝试时(几周前)我没有设置 root 密码并使用了默认生成的密码,我认为它仍在尝试使用它。

在创建新的 azure kubernetes 集群后,这确实适用于 azure kubernetes。如何在我的 docker for desktop windows 中重置我的 kubernetes 集群?我尝试了谷歌搜索,但到目前为止没有运气。

谢谢 齐格飞

【问题讨论】:

  • 任何人都可以将我指向现有的 github 或(更好的)绑定地址已设置为 0.0.0.0 的 dockerhub 映像,以便我可以从 kubernetes 集群外部登录吗?
  • 你在哪里运行那个 mysql 命令?运行kubectl get services 以查看服务在哪个端口上运行。然后运行mysql -h localhost -uroot -p &lt;port-number&gt;
  • 另一件事是使用 kubernetes 确保您正在运行连接到部署的服务
  • 请详细说明您的最后评论。最近我一直在使用helm install my-release bitnami/mysql 并且没有部署。这是一个问题吗?如果我回到之前遵循 Kubernetes Up And Running 2nd Ed 一书的策略,我将如何确认服务和部署之间的联系?

标签: mysql kubernetes docker-desktop


【解决方案1】:

在获得了 bitnami 人员的大力帮助后,我了解到我使用 4 年的笔记本电脑上的旋转磁盘有点慢(现在为什么这是 Bitnami MySQL 而不是 Bitnami PostreSQL 的问题是个谜)。

这对我有用:

helm install my-mysql bitnami/mysql \
  --set image.debug=true \
  --set primary.persistence.enabled=false,secondary.persistence.enabled=false \
  --set primary.readinessProbe.enabled=false,primary.livenessProbe.enabled=false \
  --set secondary.readinessProbe.enabled=false,secondary.livenessProbe.enabled=false

这会关闭永久卷,因此当 pod 死亡时数据会丢失。

是的,这对我的开发目的很有用,无论如何,没有人应该将 Docker For Desktop/Kubernetes 用于生产......我只需要填充一个小型数据库并测试我的查询,如果我每次都需要重新填充数据库我重启了,嗯,这不是什么大问题。

所以也许我需要买一台新的笔记本电脑?在过去的几年里,带有 4TB 旋转磁盘空间的笔记本电脑的价格上涨了......而且我找不到任何这种大小的 SSD 驱动器,所以即使我购买了一个带有旋转磁盘的新替代品,我也可能拥有相同的问题?嗯……

感谢大家的帮助!

齐格飞

【讨论】:

    【解决方案2】:

    这对我来说似乎在 Windows 上工作得很好。完成以下步骤:

    helm repo add bitnami https://charts.bitnami.com/bitnami
    helm install my-release --set root.password=awesomePassword bitnami/mysql
    

    这就是运行 mysql 实例所需的全部内容。它不提供一些服务和有状态集。然后,要连接到它,您

    1. 要么必须在另一个 kubernetes 容器中。没有这个,你将找不到my-release-mysql.default.svc.cluster.local的dns记录

      run my-release-mysql-client --rm --tty -i  --image  docker.io/bitnami/mysql:8.0.22-debian-10-r0 --namespace default --command -- bash
      
      mysql -h my-release-mysql.default.svc.cluster.local -uroot -p my_database
      

      密码应该是'awesomePassword'

    2. 端口转发服务到您的本地机器。

      kubectl port-forward svc/my-release-mysql 3306:3306
      

    请注意,如果您将 bitnami 容器杀死并仅使用 helm 命令重新启动它并且未设置密码,则会出现问题。持久卷声明通常会保留 - 因此您需要将密码设置为旧密码。如果您不指定密码,您可以通过运行 bitnami 告诉您的命令来获取密码。

    名称:我的发布

    上次部署时间:2020 年 10 月 29 日星期四 20:39:23

    命名空间:默认

    状态:已部署

    修订:1

    测试套件:无

    注意:在部署图表时请耐心等待

    提示:

    使用以下命令查看部署状态:kubectl get pods -w --命名空间默认

    服务:

    echo Master: my-release-mysql.default.svc.cluster.local:3306 echo 从站:my-release-mysql-slave.default.svc.cluster.local:3306

    管理员凭据:

    echo 用户名:root echo 密码:$(kubectl get secret --namespace default my-release-mysql -o jsonpath="{.data.mysql-root-password}" | base64 --decode)

    要连接到您的数据库:

    1. 运行一个可以用作客户端的 pod:

      kubectl run my-release-mysql-client --rm --tty -i --restart='Never' --image docker.io/bitnami/mysql:8.0.22-debian-10-r0 --namespace默认 --command -- bash

    2. 连接主服务(读/写):

      mysql -h my-release-mysql.default.svc.cluster.local -uroot -p my_database

    3. 连接从服务(只读):

      mysql -h my-release-mysql-slave.default.svc.cluster.local -uroot -p my_database

    要升级此舵图:

    1. 按照“管理员凭据”部分所述获取密码并设置“root.password”参数,如图所示 下面:

      ROOT_PASSWORD=$(kubectl get secret --namespace default my-release-mysql -o jsonpath="{.data.mysql-root-password}" | base64 - 解码) helm upgrade my-release bitnami/mysql --set root.password=$ROOT_PASSWORD

    【讨论】:

    • 它不工作,它不能使用 root.password,需要 auth.password... 当你连接到 mysql pod 时,你无法连接,错误:无法连接到“mysql.default.svc.cluster.local:3306”上的 MySQL 服务器
    猜你喜欢
    • 2013-10-06
    • 2020-11-17
    • 1970-01-01
    • 2018-02-16
    • 2017-12-05
    • 2020-08-27
    • 2012-07-15
    • 2016-06-20
    • 2023-03-06
    相关资源
    最近更新 更多