mysql - 使用 Secrets 作为密码时无法连接到 Kubernetes 中的 mysql pod(访问被拒绝)

标签 mysql docker kubernetes

我尝试在 Kubernetes 中设置一个 mysql 数据库。我配置了一个 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

如果我检查容器内的环境变量,我无法发现这两种方法之间的区别。

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

data:
  mysql-root-password: "VGVzdDEyMzQK"

版本信息

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

最佳答案

你确定你的 secret yaml 中的数据是正确的 base64 编码的吗?使用https://www.base64encode.org/ ,您的 data block 应该如下所示:

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

关于mysql - 使用 Secrets 作为密码时无法连接到 Kubernetes 中的 mysql pod(访问被拒绝),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45650044/

相关文章:

mysql - MySQL 一天内多个项目的单独计数

java - 如何获取格式化日期?

未安装/加载/启用 PHP 扩展,使用官方 PHP docker 镜像

spring-boot - 无法从Kubernetes中的其他服务访问Spring Boot后端服务

docker - Minikube 外部注册表无法拉取镜像 redis-ha

php - 登录脚本中的 "Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given"

mysql - 指定数据类型的长度

Kubernetes 中的 dockerhub 给出未经授权的 : incorrect username or password with right credentials

azure - Azure Docker Web 应用程序中 docker-compose 中的变量替换

kubernetes - 如何通过 initContainer 使用私有(private)存储库