034.Kubernetes集群安全-Secret
程序员文章站
2022-06-18 18:25:47
一 secret概述1.1 secret作用Secret对象,主要作用是保管私密数据,比如密码、OAuth Tokens、SSH Keys等信息。将这些私密信息放在Secret对象中比直接放在Pod或Docker Image中更安全,也更便于使用和分发。二 secret使用2.1 secret创建[ ......
一 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
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
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内容
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引用
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
三 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。
上一篇: mysql 5.7.18安装教程
下一篇: Linux简介[学习笔记]
推荐阅读
-
redis的安装与使用,发布订阅与集群,安全介绍
-
驱动程序无法使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误: RSA premaster secret error
-
在百度云服务器上搭建集群时的安全设置
-
033.Kubernetes集群安全-API Server认证及授权
-
mongo 3.4分片集群系列之三:搭建分片集群--哈希分片 + 安全
-
035.集群安全-Pod安全
-
034.Kubernetes集群安全-Secret
-
PHP、Java、C#实现URI参数签名算法,保准应用与REST服务器之间的安全通信,防止Secret Key盗用、数据篡改等恶意攻击行为
-
MPush开源消息推送系统:简洁、安全、支持集群
-
redis的安装与使用,发布订阅与集群,安全介绍