Secret介绍
k8s secrets用于存储和管理一些敏感数据,比如密码,token,密钥等敏感信息。它把 Pod 想要访问的加密数据存放到 Etcd 中。然后用户就可以通过在 Pod 的容器里挂载 Volume 的方式或者环境变量的方式访问到这些 Secret 里保存的信息了。
Secret有三种类型
Opaque
1 | base64 编码格式的 Secret,用来存储密码、密钥等;但数据也可以通过base64 –decode解码得到原始数据,所有加密性很弱。 |
Service Account(暂时没用过)
1 | 用来访问Kubernetes API,由Kubernetes自动创建,并且会自动挂载到Pod的 /run/secrets/kubernetes.io/serviceaccount 目录中。 |
kubernetes.io/dockerconfigjson
1 | 用来拉取私有库镜像的认证信息(比如nexus或者habor等) |
Opaque类型
- base64加密(
--wrap=0表示不换行输出)echo -n 'xiaowu' | base64 --wrap=0 - base64解密
echo 'eGlhb3d1' | base64 --decode
- 在yaml中使用
1 | # 声明一个secret |
Service Account类型
1 | Service Account 对象的作用,就是 Kubernetes 系统内置的一种“服务账户”,它是 Kubernetes 进行权限分配的对象。比如,Service Account A,可以只被允许对 Kubernetes API 进行 GET 操作,而 Service Account B,则可以有 Kubernetes API 的所有操作权限。 |
kubernetes.io/dockerconfigjson类型
- 直接使用kubectl create命令创建即可,如果是多个
namespace,可以拼接多个-n参数
1 | kubectl create secret docker-registry <secret_name> --docker-server=<docker.io> --docker-username=<username> --docker-password=<password> --docker-email=<email> -n <namespace1> -n <namespace2> |
- 需要拉取私有仓库中的docker镜像的话就需要使用到上面的
这个Secret
1 | apiVersion: v1 |
创建/更新
格式
1 | kubectl create secret <type> <name> <data> <options> |
其中,指定secret对象的类型,可以是generic、docker-registry、tls等。指定secret对象的名称,是secret对象的数据,是secret对象的其他选项。
常见指令
generic类型的secret,用于存储任意类型的数据:
1 | kubectl create secret generic <name> --from-literal=<key>=<value> |
其中,是secret对象的名称,是数据的键名,是数据的值。
docker-registry类型的secret,用于存储Docker镜像仓库的认证信息:
1 | kubectl create secret docker-registry <name> --docker-username=<username> --docker-password=<password> --docker-email=<email> --docker-server=<server> |
其中,是secret对象的名称,和是Docker镜像仓库的认证信息。
tls类型的secret,用于存储TLS证书和私钥:
1 | kubectl create secret tls <name> --cert=<cert_file> --key=<key_file> |
其中,是secret对象的名称,
更新Secret
1 | eg: |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 小五的个人杂货铺!
