9

k8s实践(7)- k8s Secrets

 3 years ago
source link: https://guisu.blog.csdn.net/article/details/93049307
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Secrets是Kubernetes中一种对象类型,用来保存密码、私钥、口令等敏感信息。与直接将敏感信息嵌入image、pod相比,Secrets更安全、更灵活,用户对敏感信息的控制力更强。同Docker对敏感信息的管理类似,首先用户创建Secrets将敏感信息加密后保存在集群中,创建pod时通过volume、环境变量引用Secrets。

1. Secret类型


Secret有三种类型:

  • Opaque:使用base64编码存储信息,可以通过base64 --decode解码获得原始数据,因此安全性弱。
  • kubernetes.io/dockerconfigjson:用于存储docker registry的认证信息。作用于Docker registry(nexus),用户下载docker镜像认证使用。
  • kubernetes.io/service-account-token:用于被 serviceaccount 引用。serviceaccout 创建时 Kubernetes 会默认创建对应的 secret。Pod 如果使用了 serviceaccount,对应的 secret 会自动挂载到 Pod 的 /run/secrets/kubernetes.io/serviceaccount 目录中。

2. Opaque Secret


Opaque类型的Secret,其value为base64编码后的值。

2.1 从文件中创建Secret

分别创建两个名为username.txt和password.txt的文件:

使用kubectl create secret命令创建secret:

2.2 使用描述文件创建Secret

首先使用base64对数据进行编码:

创建一个类型为Secret的描述文件:

查看此Secret:

2.3 Secret的使用

创建好Secret之后,可以通过两种方式使用:

  • 以Volume方式
  • 以环境变量方式

2.3.1 将Secret挂载到Volume中

进入Pod查看挂载的Secret:

也可以只挂载Secret中特定的key:

在这种情况下:

  • username 存储在/etc/foo/my-group/my-username中
  • password未被挂载

2.3.2 将Secret设置为环境变量

3. kubernetes.io/dockerconfigjson


kubernetes.io/dockerconfigjson用于存储docker registry的认证信息,可以直接使用kubectl create secret命令创建:

查看secret的内容:

.dockercfg: eyJjY3IuY2NzLnRlbmNlbnR5dW4uY29tL3RlbmNlbnR5dW4iOnsidXNlcm5hbWUiOiIzMzIxMzM3OTk0IiwicGFzc3dvcmQiOiIxMjM0NTYuY29tIiwiZW1haWwiOiIzMzIxMzM3OTk0QHFxLmNvbSIsImF1dGgiOiJNek15TVRNek56azVORG94TWpNME5UWXVZMjl0In19

通过 base64 对 secret 中的内容解码:

$ echo "eyJjY3IuY2NzLnRlbmNlbnR5dW4uY29tL3RlbmNlbnR5dW4iOnsidXNlcm5hbWUiOiIzMzIxMzM3OTk0IiwicGFzc3dvcmQiOiIxMjM0NTYuY29tIiwiZW1haWwiOiIzMzIxMzM3OTk0QHFxLmNvbSIsImF1dGgiOiJNek15TVRNek56azVORG94TWpNME5UWXVZMjl0XXXX" | base64 --decode

也可以直接读取 ~/.dockercfg 的内容来创建:

在创建 Pod 的时候,通过 imagePullSecrets 来引用刚创建的 myregistrykey:

4. kubernetes.io/service-account-token


用于被 serviceaccount 引用。serviceaccout 创建时 Kubernetes 会默认创建对应的 secret。Pod 如果使用了 serviceaccount,对应的 secret 会自动挂载到 Pod 的 /run/secrets/kubernetes.io/serviceaccount 目录中。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK