我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。
我们上两个小节介绍了configmap,cm适合哪些明文的配置,而在实际运维中,有些信息是需要密文进行传输的,而k8s给我们我们提供了一个资源叫secret,就是用于存储密文信息。由于这个单词比较简单,所以他没有简称。
Secret(密码)是 Kubernetes 中用于存储敏感数据的一种机制。它可以用于存储包括密码、令牌、密钥等敏感信息,并确保这些信息在 Kubernetes 集群中的存储和传输过程中得到保护。
Secret 提供了一种安全地存储和管理敏感数据的方式,并且可以以不同的方式在容器中使用这些数据。以下是一些 Secret 的基本特点:
使用 Secret 可以有效地管理和保护敏感信息,例如数据库密码、API 密钥、证书等。它还使得将这些敏感数据与应用程序的配置分离,从而提高了应用程序的可移植性和安全性。
范例
1.命令创建secret
kubectl create secret generic my-secret \
--from-literal=username=admin \
--from-literal=password=secretpassword
2.文件创建secret
apiVersion: v1
kind: Secret
metadata:
name: my-secret-new
type: Opaque
data:
username: YWRtaW4= # base64 编码后的敏感数据
password: c2VjcmV0cGFzc3dvcmQ= # base64 编码后的敏感数据
上面的账号和密码已经是密文,所以我们首先就需要把明文信息转换成密文信息,然后才能写入到k8s集群里面。
加密
#下面的信息和上面的信息是可用对上的。
#下面的 -n参数也是最容易出现问题的地方。
#有兴趣的可用去对比下他们之间的区别。
[root@master01 ~]# echo -n admin |base64
YWRtaW4=
[root@master01 ~]# echo -n secretpassword |base64
c2VjcmV0cGFzc3dvcmQ=
解密
有的时候,我们需要把查询到的密文进行解密,所以我们还需要掌握解密的方法。
#其实-d就是解密,不加则是加密
[root@master01 ~]# echo c2VjcmV0cGFzc3dvcmQ= |base64 -d
secretpassword
[root@master01 ~]# echo YWRtaW4= |base64 -d
admin
[root@master01 ~]#
这里无论是加密还是解密,其实都是对称加密(当然加密解密还有很多,这里不展开)。也就是只需要有base64这个命令就可以同时完成加密和解密,所以虽然k8s用这个方式完成加密和解密,但是这个加密只是聊胜于无吧。