Kubernetes中修改MySQL用户密码的最佳方案(已用initdb.d ConfigMap部署)
最佳MySQL用户密码修改方案(K8s环境下)
方案一:Secret存密码 + 手动执行SQL(最直接)
- 先更新存储新密码的Secret:
kubectl create secret generic mysql-user-passwords --from-literal=user1-new-pwd='newStrongPass123' --dry-run=client -o yaml | kubectl apply -f - - 进入MySQL Pod执行密码更新:
在MySQL命令行里跑:kubectl exec -it <你的mysql-pod名称> -- mysql -u root -pALTER USER 'user1'@'%' IDENTIFIED BY 'newStrongPass123'; FLUSH PRIVILEGES; - 多用户的话,可以把SQL写成脚本挂载到Pod里执行,不用手动敲。
方案二:用K8s Job自动完成密码更新
- 写个Job配置,用MySQL客户端镜像连接Pod执行更新:
apiVersion: batch/v1 kind: Job metadata: name: update-mysql-password spec: template: spec: containers: - name: mysql-client image: mysql:8.0 command: ["mysql", "-h", "<你的mysql-service名称>", "-u", "root", "-p$(ROOT_PWD)", "-e", "ALTER USER 'user1'@'%' IDENTIFIED BY '$(USER_NEW_PWD)'; FLUSH PRIVILEGES;"] env: - name: ROOT_PWD valueFrom: secretKeyRef: name: mysql-root-password key: password - name: USER_NEW_PWD valueFrom: secretKeyRef: name: mysql-user-passwords key: user1-new-pwd restartPolicy: OnFailure - 执行Job:
kubectl apply -f update-password-job.yaml - 好处:不用手动进Pod,适合批量或定时修改场景。
方案三:Sidecar容器自动同步密码变更
- 部署一个Sidecar监听Secret变化,自动触发密码更新:
- 先做个存更新脚本的ConfigMap:
apiVersion: v1 kind: ConfigMap metadata: name: mysql-pwd-update-script data: update-pwd.sh: | #!/bin/bash LAST_PWD="" while true; do NEW_PWD=$(cat /secrets/user1-new-pwd) if [ "$NEW_PWD" != "$LAST_PWD" ]; then mysql -h localhost -u root -p$ROOT_PWD -e "ALTER USER 'user1'@'%' IDENTIFIED BY '$NEW_PWD'; FLUSH PRIVILEGES;" LAST_PWD=$NEW_PWD fi sleep 30 done- 修改MySQL的Deployment,加上这个Sidecar:
containers: - name: mysql # 原MySQL容器配置保留... volumeMounts: - name: secret-volume mountPath: /secrets - name: pwd-updater image: mysql:8.0 command: ["/bin/bash", "/scripts/update-pwd.sh"] env: - name: ROOT_PWD valueFrom: secretKeyRef: name: mysql-root-password key: password volumeMounts: - name: script-volume mountPath: /scripts - name: secret-volume mountPath: /secrets volumes: - name: script-volume configMap: name: mysql-pwd-update-script - name: secret-volume secret: secretName: mysql-user-passwords - 好处:Secret一更新,密码自动同步,完全不用人工操作。
必看注意事项
- 所有密码必须用Secret存储,绝对不能明文写在配置或初始化脚本里。
- 改完密码后,一定要同步更新依赖该用户的应用配置(比如应用的数据库连接Secret),不然应用会连不上数据库。
- 生产环境优先用方案三实现自动化;测试环境用方案一快速搞定就行。
内容的提问来源于stack exchange,提问作者sanjeeth
相关产品推荐
相关产品推荐

