前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >k8s之Secret

k8s之Secret

作者头像
Liusy
发布2020-12-02 11:19:39
2080
发布2020-12-02 11:19:39
举报
文章被收录于专栏:Liusy01Liusy01

导读

上一篇说了ServiceAccount,这一篇就来看一下Secret。

Secret

Secret的主要作用是保管私密数据,比如密码、OAuth Tokens、SSH Keys等信息。

上一篇说到,默认的Secret主要包含三个东西,分别是token、ca.crt、namespace

当然,也可以包含其他信息,

例如:创建一个Secret

代码语言:javascript
复制
apiVersion: v1
kind: Secret
metadata:
  name: secret
type: Opaque
data:
  password: base64
  username: base64

在data域中的各子域的值必须是BASE64编码值。

Secret被创建之后,可以通过下列三种方式使用它:(1)为Pod指定Service Account来自动使用该Secret

代码语言:javascript
复制
apiVersion: v1
kind: Pod
metadata:
  name: pod
spec:
  containers:
  - name: pod
    image: image
  serviceAccountName: serviceaccount

(2)通过挂载该Secret到Pod来使用它

代码语言:javascript
复制
apiVersion: v1
kind: Pod
metadata:
  name: pod
spec:
  containers:
  - name: pod
    image: image
    volumeMounts:
    - name: foo
      mountPath: "/data"
      readOnly: true
  volumes:
  - name: foo
    secret:
      secretName: secretname

(3)在Docker镜像下载时使用,通过设置spec.imagePullSecrets来引用

1、docker登陆私有仓库

代码语言:javascript
复制
docker login localhost:5000

输入用户名和密码,如果是第一次登陆,则会创建用户,相关信息会被写入~/.docker/config.json文件中

2、用BASE64编码~/.docker/config.json的内容

代码语言:javascript
复制
cat ~/.docker/config.json | base64

3、将第二步的输出结果作为secret的data.dockercfg域的内容,由此创建一个Secret

代码语言:javascript
复制
apiVersion: v1
kind: Secret
metadata:
  name: base64secret
data:
  .dockercfg: ewoJImF1dGhzIjogewoJCSJsb2NhbGhvc3Q6NTAwMCI6IHsKCQkJImF1dGgiOiAiYkdsMWMzazZNVEl6TkRVMiIKCQl9Cgl9LAoJIkh0dHBIZWFkZXJzIjogewoJCSJVc2VyLUFnZW50IjogIkRvY2tlci1DbGllbnQvMTkuMDMuMTIgKGxpbnV4KSIKCX0KfQ==
type: kubernetes.io/dockercfg

4、在创建Pod时引用该Secret

代码语言:javascript
复制
apiVersion: v1
kind: Pod
metadata:
  name: k8sdemo
spec:
  containers:
  - name: k8sdemo
    image: cnode-1:5000/k8sdemo:v1.3
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 8080
  imagePullSecrets:
  - name: base64secret

在使用Mount方式挂载Secret时,Container中Secret的data域的各个域的key值作为目录的文件,Value值被BASE64编码后存在相应的文件中

该Container中可通过相应的查询命令查看所生成的文件和文件中的内容,如下所示:

可以通过Secret保管敏感信息,并以Mount方式将Secret挂载到Container中,然后通过访问目录中文件的方式获取信息。

当Pod被API Server创建时,API Server不会检验该Pod引用的Secret是否存在,一旦这个Pod被调度,则kubelet将试着去获取Secret的值,如果Secret不存在或暂时无法连接到API Server,则kubelet将按时间间隔定期重试获取该Secret,并发送一个Event来解释Pod没有启动的原因,一旦Secret被Pod获取,则kubelet将创建并挂载包含Secret的Volume。只有所有Volume都挂载成功,Pod中的Container才会被启动,在kubelet启动Pod中的Container后,Container中和Secret相关的Volume将不会被改变,即使Secret本身被修改。为了使用更新后的Secret,必须删除旧Pod,并重新创建一个新Pod

结尾

秋风吹落叶,天气微凉,注意保暖!

往期推荐

下期见

Liusy01

一个分享Java后端学习日志的公众号

欢迎大家点个在看

分享至朋友圈

好文!点个在看!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Liusy01 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导读
  • Secret
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档