news 2026/6/25 15:08:09

k8s中的服务通过secret访问数据库的实际案例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
k8s中的服务通过secret访问数据库的实际案例

文章目录

  • 概述
  • 一、完整实现步骤(含 Python Demo)
    • Step 1️⃣:创建 Kubernetes Secret
    • Step 2️⃣:编写 Python 应用(Flask 示例)
    • Step 3️⃣:构建 Docker 镜像(Dockerfile)
    • Step 4️⃣:部署到 Kubernetes(Deployment + Service)
    • Step 5:测试
    • 二、如何“随时变更”数据库密码?

概述

在 Kubernetes 中,将数据库账号密码等敏感配置与代码解耦,并支持动态更新,是标准的安全和运维实践。我将通过(Python 应用 + 阿里云 RDS + 账号 jialh / 密码 Cfeur123)来设计一个完整可运行的 Python Demo。

✅ 推荐方案:使用 Kubernetes Secret + 环境变量注入
这是最简单、安全、且满足“随时变更配置”的方式:

  • 敏感信息存入 Secret
  • Pod 通过环境变量读取
  • 更新 Secret 后,滚动重启 Pod 即可生效(或配合 ConfigMap Reloader 实现热更新,但对 DB 密码通常不需要)

💡 注意:Kubernetes 的 Secret 不会自动热更新到已运行的 Pod 环境变量中(这是设计行为)。但你可以通过 滚动更新
Deployment 实现“配置变更生效”,这在生产中是标准做法。


一、完整实现步骤(含 Python Demo)

Step 1️⃣:创建 Kubernetes Secret

# rds-secret.yamlapiVersion:v1kind:Secretmetadata:name:rds-secrettype:Opaquedata:# 注意:必须是 base64 编码username:amlhbGg=# echo -n "jialh" | base64password:Q2ZldXIxMjM=# echo -n "Cfeur123" | base64
kubectl apply -f rds-secret.yaml

Step 2️⃣:编写 Python 应用(Flask 示例)

# app.pyimportosimportpymysqlfromflaskimportFlask,jsonify app=Flask(__name__)defget_db_connection():host=os.getenv("DB_HOST","localhost")port=int(os.getenv("DB_PORT","3306"))user=os.getenv("DB_USER")password=os.getenv("DB_PASSWORD")database=os.getenv("DB_NAME","test")ifnotuserornotpassword:raiseValueError("DB_USER or DB_PASSWORD not set!")returnpymysql.connect(host=host,port=port,user=user,password=password,database=database,charset='utf8mb4')@app.route('/health')defhealth():try:conn=get_db_connection()conn.close()returnjsonify({"status":"ok","db":"connected"})exceptExceptionase:returnjsonify({"status":"error","message":str(e)}),500if__name__=='__main__':app.run(host='0.0.0.0',port=8080)

Step 3️⃣:构建 Docker 镜像(Dockerfile)

# DockerfileFROM python:3.9-slim WORKDIR /app COPY requirements.txt.RUN pipinstall--no-cache-dir -r requirements.txt COPY app.py.CMD["python","app.py"]
# requirements.txtFlask==2.3.3PyMySQL==1.1.0

构建并推送(假设镜像名为 my-registry/my-app:v1):

docker build -t my-registry/my-app:v1.docker push my-registry/my-app:v1

Step 4️⃣:部署到 Kubernetes(Deployment + Service)

# app-deployment.yamlapiVersion:apps/v1kind:Deploymentmetadata:name:my-appspec:replicas:2selector:matchLabels:app:my-apptemplate:metadata:labels:app:my-appspec:containers:-name:appimage:my-registry/my-app:v1ports:-containerPort:8080env:-name:DB_HOSTvalue:"rm-xxxx.mysql.rds.aliyuncs.com"# 替换为你的 RDS 内网地址-name:DB_PORTvalue:"3306"-name:DB_NAMEvalue:"mydb"-name:DB_USERvalueFrom:secretKeyRef:name:rds-secretkey:username-name:DB_PASSWORDvalueFrom:secretKeyRef:name:rds-secretkey:password---apiVersion:v1kind:Servicemetadata:name:my-app-svcspec:selector:app:my-appports:-protocol:TCPport:80targetPort:8080
kubectl apply -f app-deployment.yaml

Step 5:测试

将 Service 端口映射到本地,直接调用 /health 接口:

kubectl port-forward svc/my-app-svc8080:80

然后在另一个终端执行:

curlhttp://localhost:8080/health

✅ 成功响应示例:

{"status":"ok","db":"connected"}

❌ 失败可能返回:

{"status":"error","message":"(1045,\"Access denied for user 'jialh'@'192.168.x.x' (using password: YES)\")"}

二、如何“随时变更”数据库密码?

场景:RDS 密码从 Cfeur123 改为 NewPass456!
步骤:

  • 更新 Secret
kubectl create secret generic rds-secret\--from-literal=username=jialh\--from-literal=password=NewPass456!\--dry-run=client -o yaml|kubectl apply -f -
  • 触发 Pod 重启(使新环境变量生效)
# 方法1:滚动重启(推荐)kubectl rollout restart deployment/my-app# 方法2:修改 Deployment 注解(也会触发滚动更新)kubectl patch deployment my-app -p"{\"spec\":{\"template\":{\"metadata\":{\"annotations\":{\"restartedAt\":\"$(date+%Y-%m-%dT%H:%M:%S%z)\"}}}}}"
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/25 1:05:43

50、Linux系统问题排查与性能监控指南

Linux系统问题排查与性能监控指南 1. Linux系统常见问题及解决办法 1.1 串口配置问题 在Linux系统中,串口配置不当是常见问题。调制解调器设备被系统识别为串口设备,但很多调制解调器与连接到计算机主板的串口使用相同的IRQ和I/O地址设置,从而导致参数冲突。此外,一些串…

作者头像 李华
网站建设 2026/6/25 12:42:20

Windows系统文件Search.ProtocolHandler.MAPI2.dll丢失 下载修复

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/6/25 1:56:36

星火研创队

序号日期工作内容完成情况工作饱和度12025.12.8聚焦互动行为信息管理模块,完成后台对用户评论、点赞数据的查看页面搭建,能在后台列表展示基础数据,调整了页面字段显示样式。较好522025.12.9完善互动行为管理操作功能,实现后台对违…

作者头像 李华
网站建设 2026/6/25 10:37:48

如何高效配置MPLS?企业网络优化的痛点

有时候,你可能觉得自己的公司网络就像是一条繁忙的高速公路,在高峰期总是堵得水泄不通。这时候,MPLS(多协议标签交换)就成了解决拥堵的一剂良药。但问题是,如何才能让它发挥最大效用呢?很多企业在初次接触MPLS时,往往…

作者头像 李华
网站建设 2026/6/24 19:44:53

技术并购视角:AIGC领域的 Web 生态整合与资源重组

一、AIGC——当“内容”开始自己生长在过去的十年,AIGC (AI Generated Content) 从学术论文里的冷僻缩写,华丽转身为市场的宠儿。 如今,AI 不仅能写(比如我👋),还能画、能唱、能推理、能陪你聊人…

作者头像 李华
网站建设 2026/6/24 21:11:59

DuiLib_Ultimate:Windows桌面应用开发的终极解决方案

DuiLib_Ultimate:Windows桌面应用开发的终极解决方案 【免费下载链接】DuiLib_Ultimate DuiLib_Ultimate 是深耕 Windows 软件UI开发的利器, 以轻量化、高性能、易扩展 为核心,专为 Windows 平台打造极致桌面应用体验而生。 项目地址: http…

作者头像 李华