一、启动应用安全信息的保护:

Secret介绍:

应用启动过程中可能需要一些敏感信息,比如访问数据库的用户名密码或者秘钥。将这些信息直接保存在容器镜像中显然不妥,Kubernetes 提供的解决方案是 Secret。
Secret 会以密文的方式存储数据,避免了直接在配置文件中保存敏感信息。Secret 会以 Volume 的形式被 mount 到 Pod,容器可通过文件的方式使用 Secret 中的敏感数据;此外,容器也可以环境变量的方式使用这些数据。
Secret 可通过命令行或 YAML 创建。比如希望 Secret 中包含如下信息:
  1. 用户名 admin
  2. 密码 123456

创建 Secret

有四种方法创建 Secret:

1. 通过 --from-literal

kubectl create secret generic mysecret --from-literal=username=admin --from-literal=password=123
kubectl get secret
kubectl get secret mysecret
每个 --from-literal 对应一个信息条目。
[root@cicd ~]# kubectl create secret generic mysecret --from-literal=username=admin --from-literal=password=
secret "mysecret" created
[root@cicd ~]# kubectl get secret
NAME TYPE DATA AGE
default-token-cnv2n kubernetes.io/service-account-token 4d
mysecret Opaque 28s
[root@cicd ~]# kubectl get secret mysecret
NAME TYPE DATA AGE
mysecret Opaque 38s

2. 通过 --from-file

echo -n admin > ./username
echo -n 123456 > ./password
kubectl create secret generic mysecret --from-file=./username --from-file=./password
每个文件内容对应一个信息条目。

3. 通过 --from-env-file

cat << EOF > env.txt
username=admin
password=123456
EOF
kubectl create secret generic mysecret --from-env-file=env.txt
文件 env.txt 中每行 Key=Value 对应一个信息条目。

4. 通过 YAML 配置文件:

文件中的敏感数据必须是通过 base64 编码后的结果。
执行 kubectl apply 创建 Secret:
显示有两个数据条目,kubectl describe secret 查看条目的 Key:
如果还想查看 Value,可以用 kubectl edit secret mysecret
然后通过 base64 将 Value 反编码:

二、secret在pod中的应用:

volume 方式使用 Secret

Pod 可以通过 Volume 或者环境变量的方式使用 Secret。

1.先学习 Volume 方式。

(1)Pod 的配置文件如下所示:
 
① 定义 volume foo,来源为 secret mysecret
② 将 foo mount 到容器路径 /etc/foo,可指定读写权限为 readOnly
 
创建 Pod 并在容器中读取 Secret:
可以看到,Kubernetes 会在指定的路径 /etc/foo 下为每条敏感数据创建一个文件,文件名就是数据条目的 Key,这里是 /etc/foo/username 和 /etc/foo/password,Value 则以明文存放在文件中。
 
(2)我们也可以自定义存放数据的文件名,比如将配置文件改为:
这时数据将分别存放在 /etc/foo/my-group/my-username 和 /etc/foo/my-group/my-password 中。
 
以 Volume 方式使用的 Secret 支持动态更新:Secret 更新后,容器中的数据也会更新。
 
将 password 更新为 abcdef,base64 编码为 YWJjZGVm
 
更新 Secret。
 
 
几秒钟或,新的 password 会同步到容器。
 

2.环境变量方式使用 Secret

通过 Volume 使用 Secret,容器必须从文件读取数据,会稍显麻烦,Kubernetes 还支持通过环境变量使用 Secret。
 
Pod 配置文件示例如下:
 
创建 Pod 并读取 Secret。
 
通过环境变量 SECRET_USERNAME 和 SECRET_PASSWORD 成功读取到 Secret 的数据。
需要注意的是,环境变量读取 Secret 很方便,但无法支撑 Secret 动态更新。
Secret 可以为 Pod 提供密码、Token、私钥等敏感数据。

k8s管理机密信息(9)的更多相关文章

  1. 用 k8s 管理机密信息 - 每天5分钟玩转 Docker 容器技术(155)

    应用启动过程中可能需要一些敏感信息,比如访问数据库的用户名密码或者秘钥.将这些信息直接保存在容器镜像中显然不妥,Kubernetes 提供的解决方案是 Secret. Secret 会以密文的方式存储 ...

  2. K8s管理机密信息

    1. 启动应用安全信息的保护 Secret介绍 应用启动过程中可能需要一些敏感信息,比如访问数据库的用户名密码或者秘钥.将这些信息直接保存在容器镜像中显然不妥,Kubernetes 提供的解决方案是 ...

  3. k8s 管理机密信息

    一.启动应用安全信息的保护: Secret介绍: 应用启动过程中可能需要一些敏感信息,比如访问数据库的用户名密码或者秘钥.将这些信息直接保存在容器镜像中显然不妥,Kubernetes 提供的解决方案是 ...

  4. 用 k8s 管理机密信息【转】

    应用启动过程中可能需要一些敏感信息,比如访问数据库的用户名密码或者秘钥.将这些信息直接保存在容器镜像中显然不妥,Kubernetes 提供的解决方案是 Secret. Secret 会以密文的方式存储 ...

  5. k8s管理机密信息(12)

    一.启动应用安全信息的保护 1.Secret介绍 应用启动过程中可能需要一些敏感信息,比如访问数据库的用户名密码或者秘钥.将这些信息直接保存在容器镜像中显然不妥,Kubernetes 提供的解决方案是 ...

  6. k8s管理存储资源

    1. Kubernetes 如何管理存储资源 理解volume 首先我们学习 Volume,以及 Kubernetes 如何通过 Volume 为集群中的容器提供存储:然后我们会实践几种常用的 Vol ...

  7. k8s管理pod资源对象(下)

    一.标签与标签选择器 1.标签是k8s极具特色的功能之一,它能够附加于k8s的任何资源对象之上.简单来说,标签就是键值类型的数据,它们可于资源创建时直接指定,也可随时按需添加于活动对象中,而后即可由标 ...

  8. k8s管理pod资源对象(上)

    一.容器于pod资源对象 现代的容器技术被设计用来运行单个进程时,该进程在容器中pid名称空间中的进程号为1,可直接接收并处理信号,于是,在此进程终止时,容器即终止退出.若要在一个容器中运行多个进程, ...

  9. k8s 管理存储资源(10)

    一.Kubernetes 如何管理存储资源 理解Volume 我们经常会说:容器和 Pod 是短暂的. 其含义是它们的生命周期可能很短,会被频繁地销毁和创建.容器销毁时,保存在容器内部文件系统中的数据 ...

随机推荐

  1. 面对runc逃逸漏洞,华为云容器为您保驾护航

    背景信息 基于runc运行时的容器存在安全漏洞,攻击者可以通过恶意容器镜像等方式获取宿主机root执行权限.漏洞CVE-2019-5736的详细信息,请参见 https://cve.mitre.org ...

  2. ubuntu---解决pip安装tf很慢的问题

    ubuntu---解决pip安装tf很慢的问题 [问题] 执行 u@u160406:~$ sudo pip3 install tensorflow-gpu==1.15.0rc2 下载速度真的很慢 Lo ...

  3. 阿里云服务器搭建gitlab

    参考这位大神的博客 https://blog.csdn.net/zhaoyanjun6/article/details/79144175 安装邮件通知服务系统时,报了如下错误:send-mail: f ...

  4. ubuntu下后台服务的管理

    注册后台服务后都有脚本存在/lib/systemd/system路径下 如mysql为mysql.service 被service管理的进程被杀掉还是会重启的 应使用service XXX stop停 ...

  5. 解决CentOS虚拟机开机黑屏卡死问题

    默认配置 导致的错误 1.直接就是黑屏,连杠杠都没有 2.centos系统关不掉 3.关闭vmware提示:虚拟机XXX繁忙 解决方式 一(我的失败,依旧不行)1.强制关闭vmware,重启计算机(不 ...

  6. virtualBox+centOS的一些报错

    step1: 安装系统后进入命令行模式 安装virtualBox:https://www.virtualbox.org/wiki/Downloads 下载centOS7镜像:https://www.c ...

  7. 2.session 简介

    2.session 简介 hibernate的执行流程, 创建一个配置对象Configuration,这个配置对象的作用就是用来读取配置文档Hibernate.cfg.xml 获得配置对象的目的是可以 ...

  8. Docker 退出不关闭容器以及保存日志到本地

    Docker保存日志到本地 docker logs +你需要添加的额外参数 + 容器id > 文件名称 然后查看这个文件就可以了,也可以通过ftp协议下载到本地 Docker退出容器不关闭容器的 ...

  9. python_网络编程hmac模块验证客户端的合法性

    hmac模块: 比较两个函数的密钥是否一致: import hmac import os msg = os.urandom(32) #生成32位随机字节码 def wdc(): key = b'wdc ...

  10. javascript逻辑或(||)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...