在 Kubernetes 集群中部署应用程序需要加密存储敏感信息,包括服务密码、证书和私钥等等。Kubernetes 提供了 ConfigMap 和 Secret 帮助我们有效管理这些敏感信息。
ConfigMap
ConfigMap 可以存储非敏感的配置信息,例如数据库 URL、端口号和应用程序的配置项。
在创建 ConfigMap 时,可以使用 kubectl 创建一个 YAML 文件,将需要存储的配置信息放在其中。
apiVersion: v1 kind: ConfigMap metadata: name: myconfigmap data: mysqlUrl: 127.0.0.1:3306 redisUrl: 127.0.0.1:6379
使用 kubectl create
命令可以创建 ConfigMap。
kubectl create -f configmap.yaml
通过 Kubernetes 的环境变量注入特性,可以将 ConfigMap 中的值注入到容器中。
-- -------------------- ---- ------- ----- ----------- - ----- ----------- ------ -------------- ---- - ----- --------- ---------- ---------------- ----- ----------- ---- -------- - ----- --------- ---------- ---------------- ----- ----------- ---- --------
在容器中,可以通过环境变量 $MYSQL_URL
和 $REDIS_URL
得到 ConfigMap 中存储的值。
echo $MYSQL_URL 127.0.0.1:3306 echo $REDIS_URL 127.0.0.1:6379
Secret
Secret 可以存储敏感信息,例如密钥、密码、证书和私钥等等。Secret 可以被编码为 base64 格式,但是这并不能真正地加密数据。因此,在编码 Secret 前,需要将数据加密。
在创建 Secret 时,可以使用 kubectl 创建一个 YAML 文件,将加密后的敏感信息放在其中。
apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque data: username: YWRtaW4= password: MWYyZDFlMmU2N2Rm
使用 kubectl create
命令可以创建 Secret。
kubectl create -f secret.yaml
在容器中,可以通过环境变量和 Volume 访问 Secret 中存储的值。
使用环境变量
-- -------------------- ---- ------- ----- ----------- - ----- ----------- ------ -------------- ---- - ----- -------- ---------- ------------- ----- -------- ---- -------- - ----- -------- ---------- ------------- ----- -------- ---- --------
在容器中,可以通过环境变量 $USERNAME
和 $PASSWORD
得到 Secret 中存储的值。
echo $USERNAME admin echo $PASSWORD 1f2d1e2e67df
使用 Volume
-- -------------------- ---- ------- ----- ----------- - ----- ----------- ------ -------------- ------------- - ----- -------- ---------- ------------- --------- ---- -------- - ----- -------- ------- ----------- --------
在容器中,可以通过挂载 Volume /etc/mysecret
访问 Secret 中存储的值。
cat /etc/mysecret/username admin cat /etc/mysecret/password 1f2d1e2e67df
总结
ConfigMap 和 Secret 是 Kubernetes 中管理敏感信息的有力工具,可以帮助我们加密存储密码、证书和私钥等等。在容器中,可以通过环境变量和 Volume 访问这些敏感信息。
参考
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6548bce57d4982a6eb2ffe31