Kubernetes:不允许主机“ x.x.x.x”连接到该MySQL

时间:2019-05-14 04:27:09

标签: mysql docker kubernetes ansible

我正在K8s集群上启动一个MYSQL容器。部署yaml如下:

---
apiVersion: v1
kind: Pod
metadata:
  name: {{ ca.name }}-db-mysql
  labels:
    k8s-app: {{ ca.name }}-db-mysql
spec:
  containers:
    - name: {{ ca.name }}-db-mysql
      image: "mysql:5.7.23"
      env:
        - { name: "MYSQL_ROOT_PASSWORD", value: "password" }
        - { name: "MYSQL_ROOT_HOST", value: "%" }
      args: ["mysqld", --default-authentication-plugin=mysql_native_password", "--sql-mode="]
      ports:
        - containerPort: 3306
      volumeMounts:
        - { mountPath: "/var/lib/mysql", name: "{{ ca.name }}-mysql", subPath: "cas/db/rca/mysqldb" }
  restartPolicy: OnFailure
  volumes:
    - name: {{ ca.name }}-mysql
      persistentVolumeClaim:
        claimName: {{ ca.name }}-mysql-volume

尽管使用 MYSQL_ROOT_HOST 配置,但已配置的pod并未将其主机配置为root用户的

enter image description here

我必须手动更新主机设置才能访问群集外部的MYSQL容器。

kubectl exec -it ca1st-orgb-db-mysql /bin/bash
mysql -u root
SELECT host FROM mysql.user WHERE User = 'root';
CREATE USER 'root'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;

为什么没有使用环境变量中提供的默认设置来配置它?有人可以分享他们的想法。

1 个答案:

答案 0 :(得分:0)

我认为MYSQL 图像5.7.23 存在问题。我将MYSQL版本降级到5.6,并从pod配置中删除了args ,一切正常。

数据库查询:

  1. 启动MYSQL客户端:const __filename = import.meta.url.slice(7); const __dirname = import.meta.url.slice(7, import.meta.url.lastIndexOf("/"));
  2. 在用户kubectl run -it --rm --image=mysql:5.7.23 --restart=Never mysql-client -- mysql -h ca1st-orga-db-mysql -pyourpassword上运行SELECT查询

您会注意到SELECT host FROM mysql.user WHERE User = 'root';和本地主机。

希望这会有所帮助。

enter image description here