1. Secret

1.1 Secret 概念

Secret 概念:

  • Secret 是一种包含少量敏感信息例如密码、令牌或密钥的对象.

  • Secret 可以被用户创建在不同的 namespace 下

  • Secret 可以作为 volume 挂载到一个或多个容器上

  • Secret 还可以作为容器的环境变量使用

  • Secret 创建的内容都是经过 base64 编码后得到的

Secret 类型:

  1. Opaque : base64 编码格式的 Secret ,用来存储密码、密钥等。都是通过 base64 编码和解码得到,加密行很弱

  2. kubernetes.io/dockerconfigjson : 用来存储私有 docker registry 的认证信息

  3. kubernetes.io/service-account-token : 用于被 serviceaccount 引用。serviceaccount 创建时 kubernetes 会默认创建对应的 secret 。pod 如果使用了serviceaccount,对应的 secret 会自动挂载到 Pod 的目录:/run/secret/kubernetes.io/serviceaccount

1.2 使用命令行创建 secret

1. 查看创建 Secret 的命令帮助

Copy to Clipboard

2. 通过变量的形式创建

  • --from-literal 选项

  • kubectl create secret generic mysecret1 --from-literal=name1=gsh1 --from-literal=name2=gsh2

  • 通过命令行的形式,将 Secret 以 key=value 的形式,传入

Copy to Clipboard

3. 通过文件的形式创建

  • --from-file 选项

  • kubectl create secret generic mysecret2 --from-file=./username.txt --from-file=./password.txt

  • 这里创建的 key-value 值,key 为 文件名,value 为 文件内容的 base64 编码结果

Copy to Clipboard

4. 通过变量文件形式创建

  • --from-file 选项

  • kubectl create secret generic mysecret3 --from-env-file=./env.txt

  • 变量文件 格式 需要为 key=value

Copy to Clipboard

1.3 使用 yaml 文件创建 Secret

模板为

Copy to Clipboard

注意:

  • data 下 的 value 值 需要经过 base64 编码

  • stringData 下的 value 值 可以直接自定义字符串

1.4 Pod 中使用 Secret

Pod 中使用 Secret 有两种方式:

  1. 以卷的方式来挂载

    • 主要用于传递配置文件

  2. 以变量的方式来挂载

    • 主要用于给 Pod 传递环境变量

1. 以卷的方式挂载

将生成的 Secret 以 volume 挂载到 Pod 中,模板为

Copy to Clipboard

说明:

  • 就是将 mysecret1 的 value 映射到 /etc/foo/ 目录 中

  • 目录下会有 secret 中定义的 key 作为文件名,value 作为文件内容

  • 这种方式可以作为配置文件,直接传入到 pod 中

  • readOnly = true, 表示为只读

  • 也可以只挂载 secret 中的一个 key-value,方法:

    • mountPath: "/etc/foo" 这里指定具体的key名称:mountPath: "/etc/foo/username"

将 Secret 键名映射到特定路径,模板为

Copy to Clipboard

说明:

  • username Secret 存储在 /etc/foo/my-group/my-username 文件中而不是 /etc/foo/username 中。

  • password Secret 存储在 /etc/foo/my-group/my-password 文件中而不是 /etc/foo/password 中。

  • items 只定义了两个 key-value,因此只挂载这两个,其余不挂载

2. 以环境变量的方式挂载

通过环境变量的方式挂载,模板为:

Copy to Clipboard

说明:

  • 修改 Pod 定义,为每个要使用 Secret 的容器添加对应 Secret 键的环境变量。 使用 Secret 键的环境变量应在 env[x].valueFrom.secretKeyRef 中指定 要包含的 Secret 名称和键名。

2. configMap

用来将非机密性的数据保存到健值对中,使用时可以用作环境变量、命令行参数或者存储卷中的配置文件。

configMap 的使用方法与 Secret 一致,但是 configMap不会经过 base64 的编码和解码

2.1 使用命令行创建 configMap

  1. 查看创建 configMap 的命令帮助 : kubectl create configmap --help

  1. 使用选项,与 secret 一样,这里不在赘述

    • --from-file 通过文件

    • --from-env-file 通过配置文件

    • --from-literal 通过 变量

  2. 例子:

Copy to Clipboard

2.2 Pod 使用 configMap

configMap 在 Pod 中的使用,与 Secret 的相似,有两种方法:

  1. volume

  2. env 环境变量

模板为:

Copy to Clipboard