kubernetes 的 Secret 对象可以存储和管理敏感信息,比如访问数据库的用户名,密码或者秘钥等等,Secret 会以密文的方式存储数据,避免直接在配置文件中保存敏感信息

Secret有三种类型:

  • Service Account :用来访问Kubernetes API,由Kubernetes自动创建,并且会自动挂载到Pod的/run/secrets/kubernetes.io/serviceaccount目录中;
  • Opaque :base64编码格式的Secret,用来存储密码、密钥等;
  • kubernetes.io/dockerconfigjson :用来存储私有docker registry的认证信息。

    创建方式

    from-literal

    每个—from-literal对应一个数据信息
    1. kubectl create secret generic mysecret --from-literal=usernarne=root --from-literal=password=123456
    2. secret/mysecret created

from-file

  1. $ echo -n root > ./username
  2. $ echo -n 123456 > ./password
  3. $ kubectl create secret generic mysecretfile --from-file=./username --from-file=./password
  4. secret/mysecretfile created

from-env-file

文件中每行Key=Value 对应一个信息数据

  1. $ cat << EOF > env.txt
  2. > username=root
  3. > password=123456
  4. > EOF
  5. $ kubectl create secret generic mysecretenv --from-env-file=env.txt
  6. secret/mysecretenv created

YMAL配置

文件中敏感数据必须通过base64进行编码

  1. $ echo -n root | base64
  2. cm9vdA==
  3. $ echo -n 123456 | base64
  4. MTIzNDU2

创建yaml 文件

  1. apiVersion: v1
  2. kind: Secret
  3. metadata:
  4. name: admin
  5. data:
  6. username: cm9vdA==
  7. password: MTIzNDU2

执行

  1. $ kubectl apply -f admin.yaml
  2. secret/admin created

查看

通过kubectl get secret 查看存在的secret

  1. $ kubectl get secrets
  2. NAME TYPE DATA AGE
  3. admin Opaque 2 74s
  4. default-token-zn6nr kubernetes.io/service-account-token 3 10d
  5. mysecret Opaque 2 12h
  6. mysecretenv Opaque 2 12h
  7. mysecretfile Opaque 2 12h

查看详细信息

  1. $ kubectl describe secret admin
  2. Name: admin
  3. Namespace: default
  4. Labels: <none>
  5. Annotations:
  6. Type: Opaque
  7. Data
  8. ====
  9. password: 6 bytes
  10. username: 4 bytes

查看具体值

image.png

通过base64 解析出原始值

  1. $ echo -n MTIzNDU2 |base64 -D

kubernetes.io/dockerconfigjson

可以直接用kubectl命令来创建用于docker registry认证的secret:

  1. kubectl create secret docker-registry regcred \
  2. --docker-server=<你的镜像仓库服务器> \
  3. --docker-username=<你的用户名> \
  4. --docker-password=<你的密码> \
  5. --docker-email=<你的邮箱地址>

查看创建结果

  1. kubectl get secret -o wide
  2. NAME TYPE DATA AGE
  3. regcred kubernetes.io/dockerconfigjson 1 26m

创建my-private-reg-pod.yaml,要从私有仓库拉取镜像,Kubernetes 需要凭证。 配置文件中的 imagePullSecrets 字段表明 Kubernetes 应该通过名为 regcred 的 Secret 获取凭证。

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: private-reg
  5. spec:
  6. containers:
  7. - name: private-reg-container
  8. image: baxiang/liveness:1.0
  9. imagePullSecrets:
  10. - name: regcred

执行

  1. kubectl apply -f my-private-reg-pod.yaml
  2. kubectl get pod private-reg

参考

https://kubernetes.io/zh/docs/tasks/configure-pod-container/pull-image-private-registry/#registry-secret-existing-credentials