使用密码进行密码时,无法连接到Kubernetes中的mysql pod(访问被拒绝)

我尝试在Kubernetes中设置一个mysql数据库。 我configuration了一个ConfigMap来存储数据库名称和一个包含用户的root密码,用户和密码的Secret。

当我尝试连接到数据库后(使用mysql cli的容器和IntelliJ数据库工具从外面)我得到一个“错误1045(28000):访问拒绝用户'testadm'@'localhost'(使用密码:是)“错误。

我的kubernetes.yaml文件:

apiVersion: v1 kind: ConfigMap metadata: name: db data: mysql-database: database --- apiVersion: v1 kind: Secret metadata: name: db-credentials type: Opaque data: mysql-root-password: VGVzdDEyMzQK # Test1234 mysql-user: dGVzdGFkbQo= # testadm mysql-password: VGVzdDEyMzQK # Test1234 --- apiVersion: apps/v1beta1 kind: Deployment metadata: name: mysql spec: replicas: 1 strategy: type: Recreate template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:5.7 ports: - containerPort: 3306 env: - name: MYSQL_DATABASE valueFrom: configMapKeyRef: name: db key: mysql-database - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: db-credentials key: mysql-root-password - name: MYSQL_USER valueFrom: secretKeyRef: name: db-credentials key: mysql-user - name: MYSQL_PASSWORD valueFrom: secretKeyRef: name: db-credentials key: mysql-password 

如果我像下面那样直接设置密码,则连接在容器内部和外部成功!

 env: - name: MYSQL_ROOT_PASSWORD value: Test1234 

如果我检查容器内的envvariables,我不能发现两种方法之间的差异。

使用存储在密码中的密码是否需要其他格式? 我也尝试将值放在数据字典中,如下所示:

 data: mysql-root-password: "VGVzdDEyMzQK" 

版本信息

 Docker 17.06.0-ce Minikube 0.21.0 Kubectl Server 1.7.0 Kubectl Client 1.7.3 

你可以使用这个yaml文件。

 apiVersion: v1 kind: Secret metadata: name: db-credentials type: Opaque data: mysql-password: VGVzdDEyMzQ= mysql-root-password: VGVzdDEyMzQ= mysql-user: dGVzdGFkbQ== 

你需要给客户端机器连接mysql数据库。

用你的桌面ipreplace<ip>地址,然后在mysql数据库上运行这个命令。 然后testing连接。

 GRANT ALL PRIVILEGES ON *.* TO 'root'@'<ip>' WITH GRANT OPTION; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; 

你创造秘密的方式是不正确的。 删除并像这样创build它。 我在我的群集testing它的工作。

 kubectl create secret generic db-credentials --from-literal=mysql-root-password=Test1234 --from-literal=mysql-user=testadm --from-literal=mysql-password=Test1234 

你确定你的秘密yaml中的数据是正确的base64编码? 使用https://www.base64encode.org/ ,你的data块应该是这样的:

 data: mysql-root-password: VGVzdDEyMzQ= # Test1234 mysql-user: dGVzdGFkbQ== # testadm mysql-password: VGVzdDEyMzQ= # Test1234