如何将密钥用作环境变量

KubernetesBeginner
立即练习

简介

Kubernetes 密钥(Secrets)提供了一种安全的方式,用于在基于 Kubernetes 的应用程序中存储和管理敏感数据。本教程将指导你了解 Kubernetes 密钥,创建和配置它们,并将它们作为环境变量注入到 Kubernetes 工作负载中。

理解 Kubernetes 密钥(Secrets)

Kubernetes 密钥(Secrets)是 Kubernetes 生态系统中的一种内置资源,它提供了一种安全的方式来存储和管理敏感数据,例如密码、API 密钥以及其他机密信息。密钥(Secrets)旨在保护敏感数据,防止其在 Kubernetes 清单或部署过程中暴露。

在 Kubernetes 中,密钥(Secrets)以 Base64 编码的字符串形式存储,并且只有经过授权的 Pod 或用户才能访问。这确保了敏感数据不会以明文形式存储,从而避免了潜在的安全漏洞。

Kubernetes 密钥(Secrets)可用于多种场景,例如:

  1. 数据库凭证:安全地存储数据库连接字符串、用户名和密码。
  2. API 密钥:存储用于外部服务(如云提供商或第三方 API)的 API 密钥。
  3. SSL/TLS 证书:存储用于安全通信的 SSL/TLS 证书和私钥。
  4. 其他敏感数据:存储任何不应在 Kubernetes 清单中暴露的其他敏感数据。

以下是一个使用 kubectl 命令行工具创建 Kubernetes 密钥(Secret)的示例:

kubectl create secret generic my-secret \
  --from-literal=username=myuser \
  --from-literal=password=mypassword

在这个示例中,我们创建了一个名为 my-secret 的密钥(Secret),其中包含两个键值对:usernamepassword

要验证密钥(Secret)是否已创建,可以使用以下命令:

kubectl get secrets

这将列出 Kubernetes 集群中的所有密钥(Secrets),包括你刚刚创建的那个。

通过了解 Kubernetes 密钥(Secrets)的基础知识,你可以有效地管理和保护基于 Kubernetes 的应用程序中的敏感数据。

创建和配置 Kubernetes 密钥(Secrets)

创建和配置 Kubernetes 密钥(Secrets)涉及多个步骤,以确保敏感数据在你的 Kubernetes 集群中得到妥善的保护和管理。

创建 Kubernetes 密钥(Secrets)

创建 Kubernetes 密钥(Secrets)有多种方法,包括使用 kubectl 命令行工具、Kubernetes 清单文件,以及诸如 HashiCorp Vault 或 AWS Secrets Manager 等外部工具。

使用 kubectl,你可以通过运行以下命令来创建一个密钥(Secret):

kubectl create secret generic my-secret \
  --from-literal=username=myuser \
  --from-literal=password=mypassword

这将创建一个名为 my-secret 的密钥(Secret),其中包含两个键值对:usernamepassword

或者,你可以使用 Kubernetes 清单文件来创建一个密钥(Secret)。以下是一个示例:

apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  username: bXl1c2Vy
  password: bXlwYXNzd29yZA==

在这个示例中,data 字段包含了 usernamepassword 键的 Base64 编码值。

配置 Kubernetes 密钥(Secrets)

Kubernetes 密钥(Secrets)支持不同的类型,每种类型都有其特定的用例。一些常见的密钥(Secret)类型包括:

  • Opaque:用于存储任意用户定义的数据。
  • kubernetes.io/dockerconfigjson:用于存储 Docker 镜像仓库凭证。
  • kubernetes.io/service-account-token:用于存储服务账户令牌。

你可以在使用清单文件创建密钥(Secret)时,通过 type 字段指定密钥(Secret)的类型。

此外,你可以将 Kubernetes 密钥(Secrets)配置为在你的 Pod 中作为文件或环境变量挂载,从而使你的应用程序能够安全地访问敏感数据。

通过了解创建和配置 Kubernetes 密钥(Secrets)的过程,你可以有效地管理和保护基于 Kubernetes 的应用程序中的敏感数据。

将密钥(Secrets)注入到 Kubernetes 工作负载中

一旦你创建并配置了 Kubernetes 密钥(Secrets),下一步就是将它们注入到你的 Kubernetes 工作负载中,例如 Pod、Deployment 或 StatefulSet。Kubernetes 提供了两种主要的方式将密钥(Secrets)注入到你的应用程序中:环境变量和卷挂载。

将密钥(Secrets)作为环境变量注入

你可以在 Pod 中将密钥(Secrets)作为环境变量注入。这是一种让敏感数据对应用程序可用的便捷方式。以下是一个示例:

apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
    - name: my-container
      image: my-app:v1
      env:
        - name: USERNAME
          valueFrom:
            secretKeyRef:
              name: my-secret
              key: username
        - name: PASSWORD
          valueFrom:
            secretKeyRef:
              name: my-secret
              key: password

在这个示例中,USERNAMEPASSWORD 环境变量使用 my-secret 密钥(Secret)中的值进行填充。

将密钥(Secrets)作为卷挂载注入

或者,你可以在 Pod 中将密钥(Secrets)作为文件挂载。这种方法允许你的应用程序从文件系统读取敏感数据。以下是一个示例:

apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
    - name: my-container
      image: my-app:v1
      volumeMounts:
        - name: secret-volume
          mountPath: /etc/secrets
  volumes:
    - name: secret-volume
      secret:
        secretName: my-secret

在这个示例中,my-secret 密钥(Secret)作为一个卷挂载到容器内的 /etc/secrets 路径。

通过了解如何将密钥(Secrets)注入到你的 Kubernetes 工作负载中,你可以确保你的应用程序能够安全地访问敏感数据,从而降低未经授权访问或暴露的风险。

总结

在本教程中,你学习了如何使用 Kubernetes 密钥(Secrets)来安全地存储和管理敏感数据,例如数据库凭证、API 密钥以及 SSL/TLS 证书。你还学习了如何创建和配置密钥(Secrets),以及如何将它们作为环境变量注入到 Kubernetes 工作负载中。通过理解并正确使用 Kubernetes 密钥(Secrets),你可以提高基于 Kubernetes 的应用程序的安全性,并保护敏感数据不被暴露。