secret和configmap
secret
Secret 类似于 ConfigMap 但专门用于保存机密数据。每个 Secret 的尺寸最多为 1MiB,不可以在静态 Pod 中使用 ConfigMap 或 Secret。
类型
Kubernetes 提供若干种内置的类型,用于一些常见的使用场景。 针对这些类型,Kubernetes 所执行的合法性检查操作以及对其所实施的限制各不相同。
内置类型 | 用法 |
---|---|
Opaque |
用户定义的任意数据 |
kubernetes.io/service-account-token |
服务账号令牌 |
kubernetes.io/dockercfg |
~/.dockercfg 文件的序列化形式 |
kubernetes.io/dockerconfigjson |
~/.docker/config.json 文件的序列化形式 |
kubernetes.io/basic-auth |
用于基本身份认证的凭据 |
kubernetes.io/ssh-auth |
用于 SSH 身份认证的凭据 |
kubernetes.io/tls |
用于 TLS 客户端或者服务器端的数据 |
bootstrap.kubernetes.io/token |
启动引导令牌数据 |
dockerconfigjson
创建方式一:
kubectl create secret docker-registry my-secret --from-file=.dockerconfigjson=/root/.docker/config.json --dry-run=client -oyaml
创建方式二:
kubectl create secret docker-registry mydocker-registry --docker-server=http://192.168.122.100:5000 --docker-username=admin --docker-password=123 --dry-run=client -oyaml
Opaque
创建方式一:
#从目录生成 kubectl create secret generic mysecret --from-file=./dir1 --dry-run=client -oyaml
创建方式二:
#从文件生成 kubectl create secret generic mysecret --from-file=./dir1/1.sh --from-file=./dir1/2.sh --dry-run=client -oyaml
创建方式三:
#从文件生成,指定key名称 kubectl create secret generic mysecret --from-file=k1=./dir1/1.sh --from-file=k2=./dir1/2.sh --dry-run=client -oyaml
创建方式四:
#从字面输入生成 kubectl create secret generic mysecret --from-literal=user=admin --from-literal=pass='!@#$' --dry-run=client -oyaml
创建方式五:
echo k1=1 >env echo k2=2 >>env echo k3=3 >>env
#从k==>v文件中生成 kubectl create secret generic mysecret --from-env-file=./env --dry-run=client -oyaml
tls
创建方式一:
kubectl create secret tls tls-secret --cert=path/to/tls.cert --key=path/to/tls.key
service-account-token
说明:
k8s v1.22版本之前都会自动为
serviceAccount
创建secret在最近版本中,包括k8s v1.25中,不在自动创建secret。被 TokenRequest取代, 你可以使用
kubectl create token
命令调用 API 获得令牌。
应该先创建 ServiceAccount 对象。kubernetes.io/service-account-name
apiVersion: v1 kind: Secret metadata: name: secret-sa-sample annotations: kubernetes.io/service-account.name: "sa-name" type: kubernetes.io/service-account-token data: # 你可以像 Opaque Secret 一样在这里添加额外的键/值偶对 extra: YmFyCg==
使用secret
-
作为容器变量
- name: SECRET_USERNAME valueFrom: secretKeyRef: name: mysecret #configMap的名字 key: username -
存储卷方式挂载
volumes: - name: cert secret: name: mysecret items: - key: ca.crt path: ca.crt mode: 600 defaultMode: 644 - name: cert1 secret: name: mysecret1 defaultMode: 644 -
imagePullSecret
kind: Pod ... spec: imagePullSecrets: name: mydocker-registry
configMap
ConfigMap 中保存的数据不可超过 1 MiB
data
字段设计用来保存 UTF-8 字符串,而binaryData
则被设计用来保存二进制数据作为 base64 编码的字串。
从 v1.19 开始,添加一个immutable
字段到 ConfigMap 定义中。定义configmap是否可以修改.系统会关闭对已标记为不可变更的 ConfigMap 的监视操作。
静态pod不能引用configMap
当卷中使用的 ConfigMap 被更新时,所投射的键最终也会被更新
以环境变量方式使用的 ConfigMap 数据不会被自动更新
创建方法
1. 从目录生成
#从目录生成 kubectl create configmap myconfigmap --from-file=./dir1 --dry-run=client -oyaml
2. 从文件生成
#从文件生成 kubectl create configmap myconfigmap --from-file=./dir1/1.sh --from-file=./dir1/2.sh --dry-run=client -oyaml
3. 从文件生成指定key
#从文件生成指定key kubectl create configmap myconfigmap --from-file=k1=./dir1/1.sh --from-file=k2=./dir1/2.sh --dry-run=client -oyaml
4. 字面生成
#字面生成 kubectl create configmap myconfigmap --from-literal=k1=v1 --from-literal=k2=v2 --dry-run=client -oyaml
5. 从变量文件生成
echo k1=1 >env echo k2=2 >>env echo k3=3 >>env
#从k==>v文件中生成 kubectl create configmap myconfigmap --from-env-file=./env --dry-run=client -oyaml
使用configMap
- 作为容器变量
pod.spec.containers[0].env
env: - name: user value: root - name: myconf valueFrom: configMapKeyRef: name: myconfigmap #configMap的名字 key: myconf #configMap.data中的key optional: false #必须存在configmap或configmap.data中的key
- 存储卷方式挂载
volumes: - name: myconf configMap: name: myconfigmap items: - key: myconf path: my.conf mode: 600 defaultMode: 644 optional: false #必须存在configmap或configmap.data中的key
volumes: - name: myconf configMap: name: myconfigmap defaultMode: 644 optional: false #必须存在configmap或configmap.data中的key
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
2021-11-10 Ingress