使用 Secrets 配置应用程序

KubernetesKubernetesBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本实验中,你将学习如何使用 Kubernetes Secrets 安全地管理敏感信息,例如密码、API 密钥和其他机密数据。你将创建一个 Secret,在应用程序中使用它,并验证应用程序是否正确配置。每个步骤都建立在前一个步骤的基础上,因此请确保仔细跟随。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("`Kubernetes`")) -.-> kubernetes/BasicsGroup(["`Basics`"]) kubernetes(("`Kubernetes`")) -.-> kubernetes/BasicCommandsGroup(["`Basic Commands`"]) kubernetes(("`Kubernetes`")) -.-> kubernetes/AdvancedCommandsGroup(["`Advanced Commands`"]) kubernetes(("`Kubernetes`")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["`Troubleshooting and Debugging Commands`"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("`Initialization`") kubernetes/BasicCommandsGroup -.-> kubernetes/get("`Get`") kubernetes/BasicCommandsGroup -.-> kubernetes/create("`Create`") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("`Apply`") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("`Describe`") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/exec("`Exec`") subgraph Lab Skills kubernetes/initialization -.-> lab-8448{{"`使用 Secrets 配置应用程序`"}} kubernetes/get -.-> lab-8448{{"`使用 Secrets 配置应用程序`"}} kubernetes/create -.-> lab-8448{{"`使用 Secrets 配置应用程序`"}} kubernetes/apply -.-> lab-8448{{"`使用 Secrets 配置应用程序`"}} kubernetes/describe -.-> lab-8448{{"`使用 Secrets 配置应用程序`"}} kubernetes/exec -.-> lab-8448{{"`使用 Secrets 配置应用程序`"}} end

启动 Minikube 集群

在创建资源之前,你需要一个正在运行的 Kubernetes 集群。Minikube 是一个轻量级的 Kubernetes 环境,可以在你的本地机器上运行。

  1. 导航到工作目录

    打开终端并导航到默认的项目文件夹:

    cd /home/labex/project
  2. 启动 Minikube

    启动 Minikube 以初始化一个 Kubernetes 集群:

    minikube start
    • 此命令将在你的本地机器上设置一个单节点的 Kubernetes 集群。
    • 根据系统性能,Minikube 可能需要几分钟才能启动。
  3. 验证 Minikube 是否正在运行

    检查 Minikube 集群的状态:

    minikube status
    • 查找 kubeletapiserver 等组件是否显示为 Running
    • 如果集群未运行,请重新运行 minikube start

如果启动 Minikube 时遇到问题,可以使用 minikube delete 重置环境(如有需要)。

创建 Secret

在这一步骤中,你将创建一个包含数据库密码的 Kubernetes Secret。

创建一个名为 my-secret.yaml 的文件,内容如下:

apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  password: dXNlcm5hbWU6cGFzc3dvcmQ=

在此文件中,我们指定了 Secret 的名称(my-secret)、包含的数据类型(Opaque)以及以 Base64 编码格式存储的实际数据。

通过运行以下命令将 Secret 应用到你的集群中:

kubectl apply -f my-secret.yaml

通过运行以下命令验证 Secret 是否已创建:

kubectl get secrets

你应该会看到列出的 my-secret Secret。

Kubernetes Secret 创建示例

在应用程序中使用 Secret

在这一步骤中,你将修改应用程序以使用 my-secret Secret 来获取数据库密码。

创建一个名为 my-app.yaml 的文件,内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app
          image: nginx:latest
          env:
            - name: DATABASE_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: my-secret
                  key: password

在此文件中,我们指定了 Deployment 的名称(my-app)、使用的镜像(my-image)以及要设置的环境变量(DATABASE_PASSWORD)。我们还使用了 secretKeyRefmy-secret Secret 中获取 password 键的值。

通过运行以下命令将 Deployment 应用到你的集群中:

kubectl apply -f my-app.yaml

通过运行以下命令验证 Deployment 是否已创建:

kubectl get deployments

你应该会看到列出的 my-app Deployment。

Deployment 验证输出

验证配置

在这一步骤中,你将验证你的应用程序是否正确配置了从 my-secret Secret 中获取的数据库密码。

通过运行以下命令查找运行你的应用程序的 Pod 名称:

kubectl get pods -l app=my-app

你应该会看到一个运行你的应用程序的 Pod。记下该 Pod 的名称。

接下来,运行以下命令以在运行你的应用程序的容器中打开一个 shell 会话:

kubectl exec -it pod-name -- /bin/sh

<pod-name> 替换为你之前记下的 Pod 名称。

进入 shell 会话后,运行以下命令以打印 DATABASE_PASSWORD 环境变量的值:

echo $DATABASE_PASSWORD

你应该会看到从 my-secret Secret 中获取的数据库密码。

数据库密码验证结果

将 Secret 挂载为 Pod 中的卷

现在我们已经创建了 Secret,可以将其挂载为 Pod 中的卷。我们将创建一个简单的 Pod,从挂载的卷中读取 Secret 值并将其输出到控制台。

创建一个名为 pod.yaml 的文件,内容如下:

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

应用 Pod 配置:

kubectl apply -f pod.yaml

验证 Pod 中挂载的 Secret

在这一步骤中,你将验证你的应用程序是否正确配置了从 my-secret Secret 中获取的数据库密码。

首先,运行以下命令以在运行你的应用程序的容器中打开一个 shell 会话:

kubectl exec -it secret-pod -- sh

进入 shell 会话后,运行以下命令以打印 Secret 的值:

cat /etc/secret-volume/password

输出应为 Secret 的值。

Secret 验证命令输出

总结

在本实验中,我们学习了如何使用 Kubernetes Secrets 存储敏感信息,以及如何在 Pod 中使用它们。Secrets 提供了一种安全的方式来管理敏感信息,应尽可能使用它们,以避免以明文形式暴露机密信息。

您可能感兴趣的其他 Kubernetes 教程