Secret 是 Kubernetes 提供的一种用于存储敏感信息的机制。在应用程序中,我们常常需要存储一些敏感信息,例如数据库的用户名和密码、API 密钥等。使用 Secret 可以将这些敏感信息存储在 Kubernetes 集群中,并在需要的时候安全地将它们传递给应用程序。


在 Kubernetes 中,Secret 是一种 API 对象,可以使用 YAML 文件或命令行工具在集群中创建和管理。每个 Secret 对象都有一个唯一的名称,并且可以包含多个键值对。每个键值对都代表着一个敏感信息,例如用户名和密码。


创建一个 Secret 对象时,可以选择将敏感信息以明文或 Base64 编码的形式存储在其中。如果以明文的形式存储,那么在创建和更新 Secret 对象时都需要使用加密的连接。而如果以 Base64 编码的形式存储,那么在创建和更新 Secret 对象时只需要使用普通的连接。


Secret 对象可以通过环境变量、挂载卷、Pod 注入等方式将敏感信息传递给应用程序。在应用程序中使用这些敏感信息时,可以直接使用相应的环境变量或文件路径。


除了存储敏感信息,Secret 对象还可以用于存储 TLS 证书和私钥。在使用 TLS 加密通信时,可以将证书和私钥存储在 Secret 对象中,并在 Pod 中使用。


总结一下,Secret 是 Kubernetes 中用于存储敏感信息的一种机制。它以 Secret 对象的形式存在于集群中,并可以通过各种方式传递给应用程序使用。

配置管理-Secret

在Kubernetes中用于存储敏感信息,例如密码、API密钥等。以下是配置管理-Secret的步骤:

  1. 创建Secret:首先,使用kubectl create secret命令创建一个Secret对象。可以选择将敏感信息直接指定为命令行参数,也可以将其存储在文件中并使用--from-file选项引用。
$ kubectl create secret <secret_type> <secret_name> --from-literal=<key>=<value>
或者
$ kubectl create secret <secret_type> <secret_name> --from-file=<path/to/file>

这里的<secret_type>可以是generic(默认值,用于存储键值对)、docker-registry(用于存储Docker注册表凭据)等。<secret_name>是要创建的Secret的名称,<key>=<value><path/to/file>是敏感信息的键值对或文件路径。

  1. 使用Secret:一旦Secret被创建,可以将其引用到Kubernetes资源配置文件中的其他对象中。例如,可以将Secret用作Pod中的环境变量、挂载到Pod的卷上或作为Docker注册表凭据。
# 示例:将Secret用作环境变量
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: my-container
      image: my-image
      env:
        - name: DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: my-secret
              key: password

这里的name: my-secret是要引用的Secret的名称,key: password是要使用的敏感信息的键。

  1. 访问Secret:在Pod中使用引用了Secret的对象时,Kubernetes会自动解析Secret并在容器内部创建相应的文件或环境变量。可以在容器内部的文件系统或环境变量中访问这些敏感信息。
    例如,如果将Secret挂载到Pod的卷上,可以在容器内部的挂载路径中找到相应的文件。如果将Secret用作环境变量,可以在容器内部的环境变量中找到相应的值。

以上是配置管理-Secret k8s的步骤。通过创建Secret对象并将其引用到其他Kubernetes资源中,可以安全地管理敏感信息。

配置管理-ConfigMap

ConfigMap是Kubernetes提供的一种用于存储配置数据的机制,可以将配置数据以键值对的形式保存,并在Pod中使用。

  1. 创建ConfigMap: 可以通过kubectl命令行工具或者YAML文件创建ConfigMap。使用kubectl创建ConfigMap的命令如下:
kubectl create configmap <configmap_name> --from-literal=<key>=<value> --from-literal=<key>=<value> ...

使用YAML文件创建ConfigMap,示例如下:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-configmap
data:
  key1: value1
  key2: value2

通过kubectl命令行工具创建ConfigMap后,可以使用以下命令查看已创建的ConfigMap:

kubectl get configmaps
  1. 使用ConfigMap: 在Deployment或Pod的配置文件中,可以通过环境变量或者挂载Volume的方式使用ConfigMap中的配置数据。
    2.1. 使用环境变量: 在Deployment或Pod的配置文件中添加以下部分,将ConfigMap中的配置数据映射为容器的环境变量:
...
spec:
  containers:
  - name: my-container
    ...
    env:
    - name: KEY1
      valueFrom:
        configMapKeyRef:
          name: my-configmap
          key: key1
    - name: KEY2
      valueFrom:
        configMapKeyRef:
          name: my-configmap
          key: key2

在上述例子中,KEY1和KEY2是容器的环境变量,它们的值分别是ConfigMap中key1和key2的值。

2.2. 使用Volume: 在Deployment或Pod的配置文件中添加以下部分,将ConfigMap中的配置数据挂载为容器的一个Volume:

...
spec:
  containers:
  - name: my-container
    ...
    volumeMounts:
    - name: config-volume
      mountPath: /etc/config
  volumes:
  - name: config-volume
    configMap:
      name: my-configmap

在上述例子中,将my-configmap挂载为一个名为config-volume的Volume,然后将这个Volume挂载到容器的/etc/config路径下。

  1. 更新ConfigMap: 可以通过kubectl命令行工具或者YAML文件更新ConfigMap中的配置数据。使用kubectl命令行工具更新ConfigMap的命令如下:
kubectl create configmap <configmap_name> --from-literal=<key>=<value> --from-literal=<key>=<value> ... --dry-run=client -o yaml | kubectl apply -f -

使用YAML文件更新ConfigMap,示例如下:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-configmap
data:
  key1: new_value1
  key2: new_value2

通过kubectl命令行工具更新ConfigMap后,Pod中使用该ConfigMap的容器会自动重新加载新的配置数据。

  1. 删除ConfigMap: 可以通过kubectl命令行工具删除ConfigMap。使用kubectl删除ConfigMap的命令如下:
kubectl delete configmap <configmap_name>

ConfigMap是Kubernetes中非常重要的一种配置管理机制,可以方便地管理和使用配置数据,提高了应用和环境之间的解耦度。在实际的Kubernetes集群中,可以根据实际需求合理使用ConfigMap来管理配置数据。