mysql - Kubernetes:不允许主机“xxxx”连接到这个 MySQL
问题描述
我正在 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 用户的% 。
我必须手动更新主机设置才能访问集群外的 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;
为什么它没有使用环境变量中提供的默认设置进行配置?有人可以分享他们对此的想法。
解决方案
我认为 MYSQL image 5.7.23存在问题。我将 MYSQL 版本降级到 5.6,并从 pod 配置中删除了 args,一切都按预期工作。
数据库查询:
- 启动一个 MYSQL 客户端:
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';
您可以注意到%
localhost。
希望这可以帮助。
推荐阅读
- java - 如何将 TBase 列表转换为 TChild 列表,其中 TChild : TBase using KClass
? - azure - Azure Synapse Pipeline 中的动态 REST 调用
- android - 从内部存储Android读取数据的权限
- ssl-certificate - 旋转 tls 秘密 - Ingress - kubernetes
- python - 有没有一种快速的方法来按索引对 Pandas 数据帧进行切片,以便用 NaN 填充缺失的行?
- maximo - Maximo - 通过 OSLC API 执行 sigoption 条件
- sql - 什么时候可以将聚合函数嵌套在标准 SQL 中?
- react-native - 在文本输入中反应本机句柄重置按钮
- css - 如何使 vue.js 在按钮单击时向上滚动?
- python - eventlet 在 docker 中导入时抛出错误