企业应用部署时需管理数据库密码、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 官方文档保密字典,查看更多关于保密字典的信息。