ConfigMaps和Secrets配置应用

在Kubernetes中,ConfigMapsSecrets 是用于配置应用程序的两种资源。它们允许你将配置信息和敏感数据(如密码、API 密钥等)从应用程序代码中分离出来,以便更灵活、安全地管理和更新这些配置。

ConfigMaps

ConfigMaps 用于存储非敏感的配置数据,例如环境变量、配置文件等。以下是使用 ConfigMap 的基本步骤:

创建 ConfigMap

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

这个例子创建了一个名为 my-configmap 的 ConfigMap,其中包含两个键值对。

将 ConfigMap 注入到 Pod 中

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mycontainer
    image: myimage
    envFrom:
    - configMapRef:
        name: my-configmap

在这个例子中,envFrom 字段指定了要从 ConfigMap 中注入环境变量到 Pod 中的容器。

创建 Deployment 并注入 ConfigMap

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: my-image
        env:
        - name: KEY1
          valueFrom:
            configMapKeyRef:
              name: my-configmap
              key: key1
        - name: KEY2
          valueFrom:
            configMapKeyRef:
              name: my-configmap
              key: key2

在这个例子中,env 字段指定了将 ConfigMap 中的键值对注入到 Pod 中的容器中。

Secrets

Secrets 用于存储敏感的配置数据,例如密码、API 密钥等。以下是使用 Secrets 的基本步骤:

创建 Secret

apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  username: YWRtaW4=  # Base64 编码的用户名
  password: cGFzc3dvcmQ=  # Base64 编码的密码

将 Secret 注入到 Pod 中

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mycontainer
    image: myimage
    envFrom:
    - secretRef:
        name: my-secret

在这个例子中,envFrom 字段指定了要从 Secret 中注入环境变量到 Pod 中的容器。

创建 Deployment 并注入 Secret

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: my-image
        env:
        - name: USERNAME
          valueFrom:
            secretKeyRef:
              name: my-secret
              key: username
        - name: PASSWORD
          valueFrom:
            secretKeyRef:
              name: my-secret
              key: password

请注意,尽管 Secrets 存储的数据是经过 Base64 编码的,但这并不是安全加密。因此,对于更高级的安全需求,你可能需要考虑使用 Kubernetes Secrets Store CSI Driveropen in new window 等工具。
使用 ConfigMapsSecrets可以提高应用程序配置的可维护性和安全性,而不必硬编码这些配置信息到应用程序代码中。

Last Updated:
Contributors: jobcher