登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
安全
›
k8s~secret资源的使用
k8s~secret资源的使用
[ 复制链接 ]
齐娅晶
5 小时前
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
Kubernetes Secret 资源使用详解
1. Secret 基本概念
Secret 是 Kubernetes 中用于存储敏感信息的资源对象,如密码、OAuth 令牌、SSH 密钥等。与 ConfigMap 类似,但 Secret 的数据是经过 base64 编码存储的。
2. Secret 类型
2.1 内置类型
Opaque
:默认类型,存储任意用户定义的数据
kubernetes.io/service-account-token
:服务账号令牌
kubernetes.io/dockerconfigjson
:Docker 镜像仓库的认证信息
kubernetes.io/tls
:TLS 证书和私钥
bootstrap.kubernetes.io/token
:启动引导令牌
3. 创建 Secret 的方法
3.1 通过 kubectl 命令行创建
# 从文件创建
kubectl create secret generic db-secret \
--from-literal=username=admin \
--from-literal=password=secret123
# 从文件内容创建
kubectl create secret generic ssh-key-secret \
--from-file=id_rsa=~/.ssh/id_rsa \
--from-file=id_rsa.pub=~/.ssh/id_rsa.pub
# 创建 Docker registry secret
kubectl create secret docker-registry regcred \
--docker-server=registry.example.com \
--docker-username=admin \
--docker-password=secret \
--docker-email=admin@example.com
复制代码
3.2 通过 YAML 文件创建
# secret-demo.yaml
apiVersion: v1
kind: Secret
metadata:
name: app-secret
type: Opaque
data:
username: YWRtaW4= # base64编码的 "admin"
password: c2VjcmV0MTIz
复制代码
# 应用YAML文件
kubectl apply -f secret-demo.yaml
复制代码
4. Secret 在 Pod 中的使用方式
4.1 作为环境变量
apiVersion: v1
kind: Pod
metadata:
name: secret-env-pod
spec:
containers:
- name: myapp
image: nginx
env:
- name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: app-secret
key: username
- name: SECRET_PASSWORD
valueFrom:
secretKeyRef:
name: app-secret
key: password
复制代码
4.2 挂载为文件(推荐方式)
apiVersion: v1
kind: Pod
metadata:
name: secret-volume-pod
spec:
containers:
- name: myapp
image: nginx
volumeMounts:
- name: secret-volume
mountPath: "/etc/secrets"
readOnly: true
volumes:
- name: secret-volume
secret:
secretName: app-secret
items: # 可选:选择性挂载特定key
- key: username
path: my-username
- key: password
path: my-password
复制代码
4.3 拉取私有镜像
apiVersion: v1
kind: Pod
metadata:
name: private-reg-pod
spec:
containers:
- name: private-app
image: registry.example.com/private-app:v1
imagePullSecrets:
- name: regcred
复制代码
5. 高级使用技巧
5.1 自动挂载为文件
apiVersion: v1
kind: Pod
metadata:
name: secret-automount
spec:
containers:
- name: myapp
image: nginx
volumeMounts:
- name: secret-volume
mountPath: "/etc/secrets"
volumes:
- name: secret-volume
secret:
secretName: app-secret
defaultMode: 0400 # 设置文件权限
复制代码
5.2 使用 stringData 字段(自动base64编码)
apiVersion: v1
kind: Secret
metadata:
name: stringdata-secret
type: Opaque
stringData: # 无需手动base64编码
username: admin
password: secret123
config.yaml: |
database:
host: localhost
port: 3306
复制代码
5.3 从多个 Secret 组合
apiVersion: v1
kind: Pod
metadata:
name: multiple-secrets
spec:
containers:
- name: myapp
image: nginx
env:
- name: DB_CONFIG
valueFrom:
configMapKeyRef:
name: db-config
key: connection-string
envFrom:
- secretRef:
name: credentials-secret
volumes:
- name: secrets-vol
secret:
secretName: tls-secret
复制代码
6. 管理操作
6.1 查看 Secret
# 列出所有 Secret
kubectl get secrets
# 查看详细信息
kubectl describe secret app-secret
# 解码查看内容
kubectl get secret app-secret -o jsonpath='{.data.username}' | base64 --decode
复制代码
6.2 更新 Secret
# 方法1:编辑现有 Secret
kubectl edit secret app-secret
# 方法2:通过文件更新
kubectl apply -f updated-secret.yaml
复制代码
6.3 删除 Secret
kubectl delete secret app-secret
复制代码
7. 最佳实践和安全建议
7.1 安全最佳实践
加密存储
:
# 启用 etcd 加密
kubectl create secret generic test-secret \
--from-literal=mykey=mydata \
--namespace default
复制代码
RBAC 权限控制
:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: secret-reader
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "watch", "list"]
复制代码
使用外部 Secret 管理
:
HashiCorp Vault
AWS Secrets Manager
Azure Key Vault
Google Cloud Secret Manager
7.2 使用建议
生命周期管理
:
# 为 Secret 添加标签便于管理
apiVersion: v1
kind: Secret
metadata:
name: app-secret
labels:
app: myapp
tier: backend
environment: production
type: Opaque
data:
password: c2VjcmV0
复制代码
定期轮换
:
# 自动轮换示例脚本
#!/bin/bash
NEW_PASSWORD=$(openssl rand -base64 32)
kubectl patch secret app-secret \
-p "{"data":{"password":"$(echo -n $NEW_PASSWORD | base64)"}}"
复制代码
8. 注意事项
Base64 不是加密
:Secret 仅提供 base64 编码,不是加密
etcd 安全性
:确保 etcd 集群的安全性
访问权限
:严格控制对 Secret 的 RBAC 权限
日志泄露
:避免在日志中输出 Secret 内容
Secret 大小限制
:单个 Secret 最大 1MB
9. 故障排查
# 检查 Secret 是否被挂载
kubectl exec pod-name -- ls /etc/secrets
# 检查环境变量
kubectl exec pod-name -- env | grep SECRET
# 查看 Pod 事件
kubectl describe pod pod-name
# 验证 Secret 存在
kubectl get secret secret-name
复制代码
通过合理使用 Secret 资源,可以有效管理 Kubernetes 集群中的敏感信息,提高应用程序的安全性。建议结合具体的业务场景选择合适的 Secret 类型和使用方式。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
k8s
secret
资源
使用
相关帖子
使用 C# 删除 PDF 中的数字签名
使用小龙虾来操作猿编程的遥控车
给Xcode使用完整版本的swiftformat
使用Alpine配置WSL ssh门户
使用Alpine配置WSL ssh门户
使用Alpine配置WSL ssh门户
使用Alpine配置WSL ssh门户
Dispose 不释放?C# 资源泄漏的 3 种隐蔽场景排查
还在古法编程?免费使用AI编程助手OpenCode 与完全本地化配置
还在古法编程?免费使用AI编程助手OpenCode 与完全本地化配置
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
使用 C# 删除 PDF 中的数字签名
0
833
祖娅曦
2026-03-26
业界
使用小龙虾来操作猿编程的遥控车
0
878
账暴
2026-03-26
业界
给Xcode使用完整版本的swiftformat
0
925
晚能
2026-03-27
业界
使用Alpine配置WSL ssh门户
0
1007
郁梓馨
2026-03-30
业界
使用Alpine配置WSL ssh门户
0
173
瞧厨
2026-03-30
业界
使用Alpine配置WSL ssh门户
0
349
任俊慧
2026-03-30
业界
使用Alpine配置WSL ssh门户
0
521
士沌
2026-03-30
业界
Dispose 不释放?C# 资源泄漏的 3 种隐蔽场景排查
0
778
命煦砌
2026-03-31
业界
还在古法编程?免费使用AI编程助手OpenCode 与完全本地化配置
0
104
损注
2026-03-31
业界
还在古法编程?免费使用AI编程助手OpenCode 与完全本地化配置
0
156
金娅鸣
2026-03-31
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
齐娅晶
5 小时前
关注
0
粉丝关注
25
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991125
anyue1937
9994892
kk14977
6845359
4
xiangqian
638210
5
神泱
9524
6
韶又彤
9916
7
宋子
9882
8
荪俗
9020
9
闰咄阅
9999
10
刎唇
9999
查看更多
今日好文热榜
613
Python 面向对象编程:从入门到实践
730
Python 面向对象编程:从入门到实践
398
我用 Codex 和 Gemini,做了一个本地桌面版
302
我用 Codex 和 Gemini,做了一个本地桌面版
323
我用 Codex 和 Gemini,做了一个本地桌面版
147
我用 Codex 和 Gemini,做了一个本地桌面版
853
我用 Codex 和 Gemini,做了一个本地桌面版
71
我用 Codex 和 Gemini,做了一个本地桌面版
829
我用 Codex 和 Gemini,做了一个本地桌面版
985
Python 面向对象编程:从入门到实践
973
Go + Vue 接入行为验证码完整指南
198
我用 Codex 和 Gemini,做了一个本地桌面版
621
我用 Codex 和 Gemini,做了一个本地桌面版
39
我用 Codex 和 Gemini,做了一个本地桌面版
652
我用 Codex 和 Gemini,做了一个本地桌面版
135
我用 Codex 和 Gemini,做了一个本地桌面版
87
我用 Codex 和 Gemini,做了一个本地桌面版
621
Python 面向对象编程:从入门到实践
763
Python 面向对象编程:从入门到实践
926
Python 面向对象编程:从入门到实践