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

  1. 作为容器变量

    - name: SECRET_USERNAME
      valueFrom:
        secretKeyRef:
          name: mysecret		#configMap的名字
          key: username	
    
  2. 存储卷方式挂载

    volumes:
    - name: cert
      secret:
        name: mysecret
        items:
        - key: ca.crt
          path: ca.crt
          mode: 600	
        defaultMode: 644
    - name: cert1
      secret:
        name: mysecret1
        defaultMode: 644
    
  3. 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

  1. 作为容器变量

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
  1. 存储卷方式挂载
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
posted @ 2022-11-10 23:05  mingtian是吧  阅读(93)  评论(0编辑  收藏  举报