使用密码进行密码时,无法连接到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