Kubernetes 是目前最流行的容器编排平台之一,它提供了一种便捷的方式来管理 Docker 容器。在使用 Kubernetes 进行应用部署时,我们经常需要使用一些敏感的信息,例如数据库密码、API 密钥等等。为了保证这些敏感信息的安全性,Kubernetes 提供了 Secrets 和 ConfigMaps 两种资源对象来管理这些信息。
Secrets
Secrets 是 Kubernetes 中用于存储敏感信息的一种资源对象。它可以用来存储密码、密钥、证书等敏感信息,而且这些信息都是以 base64 编码的形式存储在 Kubernetes 中的。Secrets 可以被挂载到容器中,从而让容器访问这些敏感信息。
创建 Secrets
我们可以使用 kubectl 命令行工具来创建 Secrets,例如:
$ kubectl create secret generic my-secret --from-literal=password=123456
这个命令会创建一个名为 my-secret 的 Secrets,其中包含一个名为 password 的键值对,其值为 123456。如果我们想要将一个文件中的内容作为 Secrets,可以使用 --from-file 标志,例如:
$ kubectl create secret generic my-secret --from-file=api-key=./api-key.txt
这个命令会创建一个名为 my-secret 的 Secrets,其中包含一个名为 api-key 的键值对,其值为 api-key.txt 文件中的内容。
挂载 Secrets
我们可以通过在 Pod 中指定 volume 和 volumeMounts 来将 Secrets 挂载到容器中。例如:
// javascriptcn.com 代码示例 apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: my-container image: my-image volumeMounts: - name: my-secret mountPath: /etc/my-secret readOnly: true volumes: - name: my-secret secret: secretName: my-secret
这个 Pod 中包含一个名为 my-secret 的 volume,它的类型是 Secrets。在容器中,我们将这个 volumeMounts 挂载到了 /etc/my-secret 目录下,以只读方式访问这个 Secrets。
使用 Secrets
在容器中,我们可以通过读取 /etc/my-secret 目录下的文件来获取 Secrets 的值。例如,在 Bash 脚本中可以这样使用:
#!/bin/bash echo "My password is $(cat /etc/my-secret/password)"
这个脚本会读取 /etc/my-secret/password 文件的内容,并将其输出到控制台上。
ConfigMaps
ConfigMaps 是 Kubernetes 中用于存储配置信息的一种资源对象。它可以用来存储应用配置、环境变量等信息。ConfigMaps 可以被挂载到容器中,从而让容器访问这些配置信息。
创建 ConfigMaps
我们可以使用 kubectl 命令行工具来创建 ConfigMaps,例如:
$ kubectl create configmap my-config --from-literal=database_url=jdbc:mysql://localhost:3306/mydb
这个命令会创建一个名为 my-config 的 ConfigMaps,其中包含一个名为 database_url 的键值对,其值为 jdbc:mysql://localhost:3306/mydb。
挂载 ConfigMaps
我们可以通过在 Pod 中指定 volume 和 volumeMounts 来将 ConfigMaps 挂载到容器中。例如:
// javascriptcn.com 代码示例 apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: my-container image: my-image volumeMounts: - name: my-config mountPath: /etc/my-config readOnly: true volumes: - name: my-config configMap: name: my-config
这个 Pod 中包含一个名为 my-config 的 volume,它的类型是 ConfigMaps。在容器中,我们将这个 volumeMounts 挂载到了 /etc/my-config 目录下,以只读方式访问这个 ConfigMaps。
使用 ConfigMaps
在容器中,我们可以通过读取 /etc/my-config 目录下的文件来获取 ConfigMaps 的值。例如,在 Bash 脚本中可以这样使用:
#!/bin/bash echo "My database URL is $(cat /etc/my-config/database_url)"
这个脚本会读取 /etc/my-config/database_url 文件的内容,并将其输出到控制台上。
总结
Kubernetes 中的 Secrets 和 ConfigMaps 提供了一种方便的方式来管理敏感信息和配置信息。我们可以通过 kubectl 命令行工具来创建这些资源对象,并将它们挂载到容器中以供使用。在容器中,我们可以通过读取挂载目录下的文件来获取这些信息。这种方式不仅方便,而且也更加安全,因为这些敏感信息和配置信息都是以加密的方式存储在 Kubernetes 中的。
参考资料
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65737611d2f5e1655dc922f9