前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >034.Kubernetes集群安全-Secret

034.Kubernetes集群安全-Secret

作者头像
木二
发布2020-03-23 10:59:40
3820
发布2020-03-23 10:59:40
举报
文章被收录于专栏:木二天空木二天空

一 secret概述

1.1 secret作用

Secret对象,主要作用是保管私密数据,比如密码、OAuth Tokens、SSH Keys等信息。将这些私密信息放在Secret对象中比直接放在Pod或Docker Image中更安全,也更便于使用和分发。

二 secret使用

2.1 secret创建

[root@k8smaster01 study]# kubectl create namespace myns

[root@k8smaster01 study]# echo -n "value-1" | base64

dmFsdWUtMQ==

[root@k8smaster01 study]# echo -n "value-2" | base64

dmFsdWUtMg==

[root@k8smaster01 study]# vi secrets.yaml

代码语言:javascript
复制
  1 apiVersion: v1
  2 kind: Secret
  3 metadata:
  4   name: mysecret
  5   namespace: myns
  6 type: Opaque
  7 data:
  8   password: dmFsdWUtMg0K
  9   username: dmFsdWUtMQ0K

[root@k8smaster01 study]# kubectl create -f secrets.yaml

注意:data域的各子域的值必须为BASE64编码值,如上password域和username域都为BASE64编码。

2.2 secret引用

创建完secret之后,可通过如下三种方式引用:

  • 在创建Pod时,通过为Pod指定Service Account来自动使用该Secret。
  • 通过挂载该Secret到Pod来使用它。
  • 在Docker镜像下载时使用, 通过指定Pod的spc.ImagePullSecrets来引用它。

示例1:挂载方式

[root@k8smaster01 study]# vi mysecretpod.yaml

代码语言:javascript
复制
  1 apiVersion: v1
  2 kind: Pod
  3 metadata:
  4   name: mypod
  5   namespace: myns
  6 spec:
  7   containers:
  8   - name: mycontainer
  9     image: redis
 10     volumeMounts:
 11     - name: foo
 12       mountPath: "/etc/foo"
 13       readOnly: true
 14   volumes:
 15   - name: foo
 16     secret:
 17       secretName: mysecret

[root@k8smaster01 study]# kubectl create -f mysecretpod.yaml

如上例创建的Secret,被挂载到一个叫作mycontainer的Container中,在该Container中可通过相应的查询命令查看所生成的文件和文件中的内容。

[root@k8smaster01 study]# kubectl exec -ti mypod -n myns ls /etc/foo #查看挂载后的secret

password username

[root@k8smaster01 study]# kubectl exec -ti mypod -n myns cat /etc/foo/username

value-1

[root@k8smaster01 study]# kubectl exec -ti mypod -n myns cat /etc/foo/password

value-2

示例2:镜像中引用,通常用于拉取需要验证账号密码的私有仓库的镜像。

[root@k8smaster01 ~]# docker login --username=x120952576@126.com registry.cn-hangzhou.aliyuncs.com

Password:【阿里云仓库密码】

[root@k8smaster01 ~]# cat ~/.docker/config.json #查看是否写入登录信息

[root@k8smaster01 ~]# base64 -w 0 ~/.docker/config.json #将登录信息文件转化为base64编码

[root@k8smaster01 ~]# vim mysecretaliyun.yaml #创建secret内容

代码语言:javascript
复制
  1 apiVersion: v1
  2 kind: Secret
  3 metadata:
  4   name: myregsecret
  5   namespace: default
  6 data:
  7     .dockerconfigjson: ewoJImF1dGhzIjogewoJCSJyZWdpc3RyeS5jbi1oYW5nemhvdS5hbGl5dW5jcy5jb20iOiB7CgkJCSJhdXRoIjogIm
  8 VERXlNRGsxTWpVM05rQXhNall1WTI5dE9uZzNNemMwTlRJeEtnPT0iCgkJfQoJfSwKCSJIdHRwSGVhZGVycyI6IHsKCQkiVXNlci1BZ2VudCI6ICJ
  9 Eb2NrZXItQ2xpZW50LzE4LjAxxxxxxxxxxxxxxx
 10 type: kubernetes.io/dockerconfigjson

[root@k8smaster01 ~]# kubectl create -f mysecretaliyun.yaml

[root@k8smaster01 ~]# vi mytestpod.yaml #创建Pod中使用imagePullSecrets引用

代码语言:javascript
复制
  1 apiVersion: v1
  2 kind: Pod
  3 metadata:
  4   name: mypodaliyun
  5 spec:
  6   containers:
  7   - name: mongo
  8     image: registry.cn-hangzhou.aliyuncs.com/xhypn/mongo:3.6
  9   imagePullSecrets:
 10     - name: myregsecret

[root@k8smaster01 ~]# kubectl create -f mytestpod.yaml

[root@k8smaster01 ~]# kubectl get pods

mypodaliyun 1/1 Running 0 48s

[root@k8smaster01 ~]# kubectl describe pods mypodaliyun

clipboard
clipboard

三 secret其他注意点

3.1 secret注意点

每个单独的Secret大小不能超过1MB,Kubernetes不鼓励创建大的Secret,因为如果使用大的Secret,则将大量占用API Server和kubelet的内存。当然,创建许多小的Secret也能耗尽API Server和kubelet的内存。

在使用Mount方式挂载Secret时,Container中Secret的data域的各个域的Key值作为目录中的文件,Value值被BASE64编码后存储在相应的文件中。secret使用场景之一就是通过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。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-03-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 secret概述
    • 1.1 secret作用
    • 二 secret使用
      • 2.1 secret创建
        • 2.2 secret引用
        • 三 secret其他注意点
          • 3.1 secret注意点
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档