目录
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 ./1 --dry-run=client -oyaml
创建方式二:
#从文件生成
kubectl create secret generic mysecret --from-file=./1.sh --from-file=./2.sh --dry-run=client -oyaml
创建方式三:
#从文件生成,指定key名称
kubectl create secret generic mysecret --from-file=k1=./1.sh --from-file=k2=./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
挂载在secret中的所有资源
volumes: - name: cert secret: name: mysecret defaultMode: 644
-
imagePullSecret
kind: Pod ... spec: imagePullSecrets: name: mydocker-registry