企业应用部署时需管理数据库密码、API 密钥等敏感信息。若直接硬编码在代码中,将导致严重的安全风险和泄露隐患。保密字典(Secret)提供加密存储机制,实现敏感数据与应用代码的完全分离,避免因代码泄露引发安全事故。
选型参考
|
使用方式 |
特性 |
适用场景 |
|
数据卷挂载(推荐) |
通过文件权限隔离,避免进程间暴露。文件内容自动同步。 |
推荐用于生产环境,尤其适合数据库密码、API 密钥等高敏感信息,需要细粒度文件权限控制的场景。 |
|
环境变量注入 |
环境变量易被所有进程访问,存在日志泄露风险。配置更新需要重启Pod才能生效。 |
简单快速的配置注入,适用于日志级别、服务地址的配置,或已适配环境变量的旧应用。 |
创建保密字典(Secret)
控制台
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。
-
在保密字典页面,选择所属命名空间(default)后,单击右上角的创建,在弹出面板中配置新的保密字典。
-
名称:nginx-secret
-
类型:Opaque
-
Opaque:base64编码格式的Secret,用来存储密码、证书等敏感信息。
-
私有镜像仓库登录密钥,用于存储私有镜像仓库认证信息。
-
TLS证书,用于存储 TLS/SSL 证书与私钥。
-
-
添加/删除密钥数据:
-
username:admin
-
password:'MySecurePassword!'
-
api-key:'ak-1234567890abcdef'
若输入保密字典的明文数据,请选中对数据值进行 base64 编码。
-
-
kubectl
-
创建Secret。
kubectl create secret generic nginx-secret \ --from-literal=username=admin \ --from-literal=password='MySecurePassword!' \ --from-literal=api-key='ak-1234567890abcdef' \ -n default -
查看 Secret 相关信息。
kubectl get secret nginx-secret预期输出:
NAME TYPE DATA AGE nginx-secret Opaque 3 23h
使用保密字典(Secret)
使用保密字典时,Deployment 应用和保密字典必须位于同一命名空间内。
方式一:数据卷挂载
Secret通过文件挂载安全访问敏感数据(证书、私钥、配置文件),应用像访问本地文件一样读取。
控制台配置
-
创建Deployment应用。
若已有Deployment应用,选择,按照以下示例编辑应用修改容器配置的数据卷。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。
-
创建无状态工作负载Deployment。
-
在无状态页面,单击使用镜像创建。
-
在应用基本信息配置向导页面,设置应用的基本信息。然后单击下一步,进入容器配置向导页面。
-
应用名称:nginx-volume-demo
-
命名空间:default
-
副本数量:2
-
类型:无状态(Deployment)
-
-
容器配置。
-
在容器配置页签,配置镜像名称和端口。
-
镜像名:
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 -
容器端口:80,协议为TCP。
重要拉取此镜像前,集群需具备公网访问能力。若在创建集群时已勾选为专有网络配置 SNAT(默认开启),则无需额外配置。否则,请参见为集群开启访问公网的能力进行设置。
-
-
在容器配置页签,在数据卷区域,单击增加本地存储。
-
存储卷类型:保密字典
-
名称:secret-volume
-
挂载源:已创建的保密字典,如nginx-secret。
-
容器路径:指定挂载到容器内的这个路径,如/etc/nginx/secrets。
配置好相应信息后,单击下一步。
-
-
-
在高级配置页面,按需设置伸缩、调度和标签注解后,单击最下方的创建。
-
在创建完成页面,查看应用任务。
在创建应用任务已提交面板,单击查看应用详情,查看容器状态是否为
Running。
-
-
验证Secret文件是否挂载成功。
选择需要登录的容器(例如nginx-volume-demo-7xxxxxx****),单击操作列的终端,选择nginx登录容器。
-
验证Secret文件是否挂载成功。
ls -la /etc/nginx/secrets预期输出:
total 4 drwxrwxrwt 3 root root 140 Sep 15 02:31 . drwxr-xr-x 1 root root 4096 Sep 15 02:31 .. drwxr-xr-x 2 root root 100 Sep 15 02:31 ..2025_09_15_02_31_13.2599431463 lrwxrwxrwx 1 root root 32 Sep 15 02:31 ..data -> ..2025_09_15_02_31_13.2599431463 lrwxrwxrwx 1 root root 18 Sep 15 02:31 api-key.txt -> ..data/api-key.txt lrwxrwxrwx 1 root root 22 Sep 15 02:31 db-password.txt -> ..data/db-password.txt lrwxrwxrwx 1 root root 22 Sep 15 02:31 db-username.txt -> ..data/db-username.txt -
验证文件内容是否正确。
cat /etc/nginx/secrets/db-username.txt cat /etc/nginx/secrets/api-key.txt预期输出:
admin ak-1234567890abcdef
输出内容与保密字典配置一致,表明数据卷挂载方式已成功使应用访问到 Secret 数据。
-
kubectl配置
-
创建nginx-volume-demo.yaml。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-volume-demo namespace: default labels: app: nginx-volume spec: replicas: 2 selector: matchLabels: app: nginx-volume template: metadata: labels: app: nginx-volume spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 protocol: TCP # 挂载Secret卷 volumeMounts: - name: secret-volume mountPath: /etc/nginx/secrets readOnly: true volumes: - name: secret-volume secret: secretName: nginx-secret # 设置文件权限 defaultMode: 0644 # 可选:自定义文件名映射 items: - key: username path: db-username.txt - key: password path: db-password.txt - key: api-key path: api-key.txt -
创建Deployment应用,使用保密字典。
kubectl apply -f nginx-volume-demo.yaml -
查看Pod状态。
kubectl get pods -l app=nginx-volume -n default预期输出:
NAME READY STATUS RESTARTS AGE nginx-volume-demo-7db46895bc-c98b5 1/1 Running 0 4h20m nginx-volume-demo-7db46895bc-pc6qg 1/1 Running 0 4h20m -
验证Secret文件是否挂载成功。
kubectl exec deployment/nginx-volume-demo -n default -- ls -la /etc/nginx/secrets预期输出:
total 4 drwxrwxrwt 3 root root 140 Sep 15 02:31 . drwxr-xr-x 1 root root 4096 Sep 15 02:31 .. drwxr-xr-x 2 root root 100 Sep 15 02:31 ..2025_09_15_02_31_13.2599431463 lrwxrwxrwx 1 root root 32 Sep 15 02:31 ..data -> ..2025_09_15_02_31_13.2599431463 lrwxrwxrwx 1 root root 18 Sep 15 02:31 api-key.txt -> ..data/api-key.txt lrwxrwxrwx 1 root root 22 Sep 15 02:31 db-password.txt -> ..data/db-password.txt lrwxrwxrwx 1 root root 22 Sep 15 02:31 db-username.txt -> ..data/db-username.txt -
验证文件内容是否正确。
kubectl exec deployment/nginx-volume-demo -n default -- cat /etc/nginx/secrets/db-username.txt kubectl exec deployment/nginx-volume-demo -n default -- cat /etc/nginx/secrets/api-key.txt预期输出:
admin ak-1234567890abcdef输出内容与保密字典配置一致,表明数据卷挂载方式已成功使应用访问到 Secret 数据。
方式二:环境变量注入
Secret通过环境变量安全注入敏感数据(密码、API密钥、Token),实现配置与代码分离,提高应用安全性和可移植性。
控制台配置
-
创建Deployment应用。
若已有Deployment应用,选择,按照以下示例编辑应用修改容器配置的环境变量。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。
-
创建无状态工作负载Deployment。
-
在无状态页面,单击使用镜像创建。
-
在应用基本信息配置向导页面,设置应用的基本信息。然后单击下一步,进入容器配置向导页面。
-
应用名称:nginx-env-demo
-
命名空间:default
-
副本数量:2
-
类型:无状态(Deployment)
-
-
容器配置。
-
在容器配置页签,配置镜像名称和端口。
-
设置镜像名:
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 -
设置容器端口:80,协议为TCP
重要拉取此镜像前,集群需具备公网访问能力。若在创建集群时已勾选为专有网络配置 SNAT(默认开启),则无需额外配置。否则,请参见为集群开启访问公网的能力进行设置。
-
-
在容器配置页签,在环境变量区域,单击新增。
-
类型:保密字典
-
名称:
USERNAME。 -
变量/变量引用:选择来源,已创建的保密字典(如nginx-secret),然后为其每个 key 指定对应的环境变量名。
配置好相应信息后,单击下一步。
-
-
-
在高级配置页面,按需设置伸缩、调度和标签注解后,单击最下方的创建。
-
在创建完成页面,查看应用任务。
在创建应用任务已提交面板,单击查看应用详情,查看容器状态是否为
Running。
-
-
验证环境变量是否注入成功。
选择需要登录的容器(例如nginx-env-demo-7xxxxxx****),单击操作列的终端,选择nginx登录容器。
env | grep -E 'DB_|API_|NGINX_'预期输出:
API_KEY=ak-1234567890abcdef NGINX_api-key=ak-1234567890abcdef NGINX_password=MySecurePassword! NGINX_username=admin DB_USERNAME=admin DB_PASSWORD=MySecurePassword!输出内容与保密字典配置一致,表明环境变量注入方式已成功使应用访问到 Secret 数据。
kubectl配置
-
创建nginx-env-demo.yaml。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-env-demo namespace: default labels: app: nginx-env spec: replicas: 2 selector: matchLabels: app: nginx-env template: metadata: labels: app: nginx-env spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 protocol: TCP # 单个Secret键值注入 env: - name: DB_USERNAME valueFrom: secretKeyRef: name: nginx-secret key: username - name: DB_PASSWORD valueFrom: secretKeyRef: name: nginx-secret key: password - name: API_KEY valueFrom: secretKeyRef: name: nginx-secret key: api-key # 批量注入所有Secret键值(可选) envFrom: - prefix: NGINX_ secretRef: name: nginx-secret -
创建Deployment应用,使用保密字典。
kubectl apply -f nginx-env-demo.yaml -
查看Pod状态.
kubectl get pods -l app=nginx-env -n default预期输出:
NAME READY STATUS RESTARTS AGE nginx-env-demo-6dc7556d9-6pjhj 1/1 Running 0 3h33m nginx-env-demo-6dc7556d9-rcqsh 1/1 Running 0 3h33m -
验证环境变量是否注入成功。
kubectl exec deployment/nginx-env-demo -n default -- env | grep -E 'DB_|API_|NGINX_'预期输出:
API_KEY=ak-1234567890abcdef NGINX_api-key=ak-1234567890abcdef NGINX_password=MySecurePassword! NGINX_username=admin DB_USERNAME=admin DB_PASSWORD=MySecurePassword!输出内容与保密字典配置一致,表明环境变量注入方式已成功使应用访问到 Secret 数据。
管理保密字典(Secret)
保密字典创建完成后,可以在保密字典页面进行以下操作:
|
操作 |
说明 |
|
查看保密字典 |
单击目标保密字典名称,可查看该保密字典的基本信息和详细信息。 |
|
编辑保密字典 |
单击操作列的编辑,可修改该保密字典的信息。 重要
修改使用中的保密字典,可能导致应用服务中断。请谨慎操作。 |
|
删除保密字典 |
单击操作列的删除,可删除不需要的保密字典。 重要
集群创建时,在 |
相关文档
-
Pod异常问题排查,查看Pod异常的诊断流程、排查方法、常见问题及对应的解决方案。
-
创建无状态工作负载Deployment,查看如何在ACK集群中通过控制台及kubectl创建无状态应用。
-
Kubernetes 官方文档保密字典,查看更多关于保密字典的信息。