千家信息网

K8S中如何创建Secret对象

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,今天就跟大家聊聊有关K8S中如何创建Secret对象,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前言Secret 可以用来保存密码、密钥等敏
千家信息网最后更新 2026年10月31日K8S中如何创建Secret对象

今天就跟大家聊聊有关K8S中如何创建Secret对象,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

前言

Secret 可以用来保存密码、密钥等敏感信息,避免密钥直接放在 Pod 的YAML定义文件或容器镜像中导致的泄露问题。

密钥使用 Base64 编码形式存储于 Secret 对象中,Pod 挂载后自动解码为明文。

通过 kubectl 创建 Secret

创建用户名/密码文件

echo -n 'username' > ./username.txtecho -n 'password' > ./password.txt

写入 Secret 对象中

# kubectl create secret generic db-info --from-file=./username.txt --from-file=./password.txtsecret/db-info created

检查 Secret

# kubectl get secretNAME                  TYPE                                  DATA   AGEdb-info               Opaque                                2      106s

查看刚写入的 db-info 的详细信息

# kubectl describe secret db-infoName:         db-infoNamespace:    defaultLabels:       Annotations:  Type:  OpaqueData====username.txt:  8 bytespassword.txt:  8 bytes

查看密钥的值

# kubectl get secret db-info -o yaml

通过 YAML 创建 Secret

先将要保存的值进行 Base64 编码

# echo -n 'username' | base64 dXNlcm5hbWU=# echo -n 'password' | base64cGFzc3dvcmQ=

#cat secret.yaml

apiVersion: v1kind: Secretmetadata:  name: mysecrettype: Opaquedata:  username: base64编码  password: base64编码

创建 secret

# kubectl apply -f secret.yaml secret/mysecret created

查看

# kubectl get secretNAME                  TYPE                                  DATA   AGEmysecret              Opaque                                2      2m5s

查看密钥的值

# kubectl get secret mysecret -o yaml

编辑 secret

kubectl edit secrets mysecret

在 Pod 中使用 Secret

  1. 将 Secret 以卷的形式挂载到 Pod 中

  2. 卷中每一个文件名对应 Secret 中的一个 key 名称

  3. Secret 的值以 base64 解码后明文形式存储于卷文件中

  4. 支持实时动态更新

apiVersion: v1kind: Podmetadata:  name: mypodspec:  containers:  - name: mypod    image: redis    volumeMounts:    - name: foo      mountPath: "/etc/foo"      readOnly: true  volumes:  - name: foo    secret:      secretName: mysecret

以上示例中,

将名为 mysecret 的 secret 对象映射为卷,卷名为 foo,

将名为 foo 的卷挂载到 Pod 中的路径 /etc/foo 下面,

mysecret 中username/password两个key,分别映射为文件。

多个 Pod 可以共享一个卷。

可以进入 Pod 中查看这两个文件内容

# kubectl exec -it mypod -- ls /etc/foo/password  username# kubectl exec -it mypod -- cat /etc/foo/usernameadmin# kubectl exec -it mypod -- cat /etc/foo/passwordpassword

Secret 对象将重要性高的秘钥和 Pod 进行了解耦处理。

它有如下特点:

  1. Secret 对象需先于引用它的 Pod 创建。

  2. Secret 对象和引用它的 Pod 必须位于同一命名空间。

  3. Secret 对象单个大小限制为 1M。

  4. Secret 对象中数据以纯文本的方式存储在 etcd 中。

  5. 除了以卷形式挂载外,还可以环境变量形式用于 Pod 中。

  6. 使用环境变量形式的问题是,secret无法动态实时更新。

官方安全建议:

  1. 管理员应该为集群数据开启静态加密(v1.13 以上版本)。

  2. 管理员应该限制只有 admin 用户能访问 etcd。

  3. API 服务器中的 Secret 数据位于 etcd 使用的磁盘上;应该在不再使用时擦除/粉碎 etcd 使用的磁盘。

  4. 如果 etcd 运行在集群内,管理员应该确保 etcd 之间的通信使用 SSL/TLS 进行加密。

  5. secret 的YAML中包含的 base64 编码为可逆编码,不要将其加入代码库或公开。

  6. 防止应用程序读取 secret 中数据后写入日志导致泄露。

  7. 所有可以运行该 Pod 的用户均可读取到挂载卷中的 secret 值。

  8. 任何节点的 root 用户都可以通过模拟 kubelet 来读取 API 服务器中的任何 Secret。 仅向实际需要 Secret 的节点发送 Secret 数据才能限制节点的 root 账号漏洞的影响, 该功能还在计划中。

看完上述内容,你们对K8S中如何创建Secret对象有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

对象 形式 文件 编码 密钥 数据 内容 用户 管理员 节点 存储 管理 限制 两个 信息 动态 变量 实时 密码 明文 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 疫情对互联网科技公司影响 北京互联网科技公司 科技服务与互联网 互联网 的科技创新 以房互联网科技 远信互联网科技 汇久创客互联网科技 国外互联网科技网站 深圳卡尔迅互联网科技有限公司怎么样 恒生科技互联网指数分析 互联网校园科技培训 米聚互联网科技南京有限公司排面 高科技互联网发展前景如何 长沙互联网科技 广州富喜互联网络科技 互联网营销推广黑科技 云鲸互联网络科技有限公司 银川新华互联网科技学校是国营吗 长沙渺峰互联网科技有限公司 互联网时代高科技布局 手冲咖啡和咖啡机区别 上海互联网科技有限公司 新浪科技互联网 四个字互联网科技公司取名 金融科技与互联网金融相同和不同 世界互联网科技公司市值排名 云南省自由互联网科技有限公司 中国互联网公司的科技投入 三亚科技创新互联网基地 六子台科技互联网展会
0