我尝试在Kubernetes中设置一个mysql数据库。我配置了一个ConfigMap来存储数据库名称和一个Secret,其中包含根密码,用户和用户密码。
之后,当我尝试连接到数据库时(在mysql cli的容器内部以及IntelliJ Database工具的外部),我得到一个“错误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
如果检查容器内的env变量,则无法发现这两种方法之间的差异。
使用秘密中存储的密码是否需要其他格式?我还尝试将值放在数据字典中,如下所示:
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==