一 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。

034.Kubernetes集群安全-Secret的更多相关文章

  1. Kubernetes集群安全概述

    API的访问安全性 API Server的端口和地址 在默认情况下,API Server通过本地端口和安全端口两个不同的HTTP端口,对外提供API服务,其中本地端口是基于HTTP协议的,用于在本机( ...

  2. 一键运行CIS安全扫描,集群安全无忧!

    CIS安全扫描是Rancher 2.4推出的其中一个重磅功能,旨在帮助用户快速.有效地加强集群的安全性.本文将详细介绍CIS安全扫描这一功能,包含详细的操作demo. 本文来自Rancher Labs ...

  3. Apache-Shiro+Zookeeper系统集群安全解决方案之缓存管理

    上篇[Apache-Shiro+Zookeeper系统集群安全解决方案之会话管理],解决了Shiro在系统集群开发时安全的会话共享问题,系统在使用过程中会有大量的权限检查和用户身份检验动作,为了不频繁 ...

  4. Kubernetes集群安全配置案例

    Kubernetes 系统提供了三种认证方式:CA 认证.Token 认证 和 Base 认证.安全功能是一把双刃剑,它保护系统不被攻击,但是也带来额外的性能损耗.集群内的各组件访问 API Serv ...

  5. kubernetes集群全栈监控报警方案kube-prometheus

    参考文档 http://www.servicemesher.com/blog/prometheus-operator-manual/ https://github.com/coreos/prometh ...

  6. kubernetes实战(八):k8s集群安全机制RBAC

    1.基本概念 RBAC(Role-Based Access Control,基于角色的访问控制)在k8s v1.5中引入,在v1.6版本时升级为Beta版本,并成为kubeadm安装方式下的默认选项, ...

  7. kubernetes(k8s)集群安全机制RBAC

    1.基本概念 RBAC(Role-Based Access Control,基于角色的访问控制)在k8s v1.5中引入,在v1.6版本时升级为Beta版本,并成为kubeadm安装方式下的默认选项, ...

  8. Apache-Shiro+Zookeeper系统集群安全解决方案之会话管理

    如今的系统多不是孤军奋战,在多结点会话共享管理方面有着各自的解决办法,比如Session粘连,基于Web容器的各种处理等或者类似本文说的完全接管Web容器的Session管理,只是做法不尽相同. 而本 ...

  9. mongodb副本集加分片集群安全认证使用账号密码登录

    mongodb副本集加分片集群搭建网上资料有很多.粘贴一个写的比较好的.副本集加分片搭建 对于搭建好的mongodb副本集加分片集群,为了安全,启动安全认证,使用账号密码登录. 默认的mongodb是 ...

随机推荐

  1. 当 RocketMQ 遇上 Serverless,会碰撞出怎样的火花?

    作者 | 元毅  阿里巴巴高级开发工程师 阿里巴巴云原生公众号后台回复 Knative,免费下载<Knative 云原生应用开发指南>电子书! 想必大家都比较了解 RocketMQ 消息服 ...

  2. PhpStorm2016.3激活

    选择License server,输入以下任意一个地址: http://idea.imsxm.com/http://114.215.133.70:41017/http://mcpmcc.com:101 ...

  3. 解决ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 这种问题需要强行重新修改密码,方法 ...

  4. Java IO(五)字节流 FileInputStream 和 FileOutputStream

    Java IO(五)字节流 FileInputStream 和 FileOutputStream 一.介绍 字节流 InputStream 和 OutputStream 是字节输入流和字节输出流的超类 ...

  5. 树莓派4B获取IP地址的几种简易方法

    首先声明一下,使用的是Paspbian系统,其实其他系统和本文说的获取IP地址关系也不大. 1.当你有路由器,有PC客户端的情况,你把你的树莓派用网线将其连接起来.你可以借助这个软件,advanced ...

  6. ffmpeg转码步骤源码实现的一点点浅析

    ffmpeg转码实现的一点点浅析 ffmpeg转码过程对解码的处理封装在process_input()中(process_input()->decode_video()->decode() ...

  7. Java 第十一届 蓝桥杯 省模拟赛 洁净数

    洁净数 小明非常不喜欢数字 2,包括那些数位上包含数字 2 的数.如果一个数的数位不包含数字 2,小明将它称为洁净数. 请问在整数 1 至 n 中,洁净数有多少个? 输入格式 输入的第一行包含一个整数 ...

  8. Java实现 LeetCode 641 设计循环双端队列(暴力)

    641. 设计循环双端队列 设计实现双端队列. 你的实现需要支持以下操作: MyCircularDeque(k):构造函数,双端队列的大小为k. insertFront():将一个元素添加到双端队列头 ...

  9. Java实现 LeetCode 629 K个逆序对数组(动态规划+数学)

    629. K个逆序对数组 给出两个整数 n 和 k,找出所有包含从 1 到 n 的数字,且恰好拥有 k 个逆序对的不同的数组的个数. 逆序对的定义如下:对于数组的第i个和第 j个元素,如果满i < ...

  10. Java实现 LeetCode 999 车的可用捕获量(简单搜索)

    999. 车的可用捕获量 在一个 8 x 8 的棋盘上,有一个白色车(rook).也可能有空方块,白色的象(bishop)和黑色的卒(pawn).它们分别以字符 "R"," ...