介绍
在这个实验(Lab)中,你将学习如何使用 Kubernetes Secrets 来安全地管理敏感信息,例如密码、API 密钥和其他机密数据。你将创建一个 secret,在你的应用程序中使用它,并验证应用程序是否已正确配置。每个步骤都建立在之前的步骤之上,所以请务必仔细按照说明操作。
在这个实验(Lab)中,你将学习如何使用 Kubernetes Secrets 来安全地管理敏感信息,例如密码、API 密钥和其他机密数据。你将创建一个 secret,在你的应用程序中使用它,并验证应用程序是否已正确配置。每个步骤都建立在之前的步骤之上,所以请务必仔细按照说明操作。
在创建资源之前,你需要一个正在运行的 Kubernetes 集群。Minikube 是一个轻量级的 Kubernetes 环境,在你的本地机器上运行。
导航到你的工作目录:
打开终端并导航到默认的项目文件夹:
cd /home/labex/project
启动 Minikube:
启动 Minikube 以初始化一个 Kubernetes 集群:
minikube start
验证 Minikube 正在运行:
检查 Minikube 集群的状态:
minikube status
kubelet
和 apiserver
之类的组件,它们被列为 Running
。minikube start
。如果你在启动 Minikube 时遇到问题,请使用 minikube delete
重置环境(如果需要)。
在这一步,你将创建一个 Kubernetes Secret,其中包含一个数据库密码。
在 /home/labex/project
目录中创建一个名为 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。
在这一步,你将修改你的应用程序,以使用 my-secret
Secret 来检索数据库密码。
在 /home/labex/project
目录中创建一个名为 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
)。我们还使用 secretKeyRef
从 my-secret
Secret 中检索 password
键。
通过运行以下命令将 Deployment 应用到你的集群:
kubectl apply -f my-app.yaml
通过运行以下命令验证 Deployment 是否已创建:
kubectl get deployments
你应该看到列出了 my-app
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 中的卷。我们将创建一个简单的 Pod,它从挂载的卷中读取 Secret 值并将其输出到控制台。
在 /home/labex/project
目录中创建一个名为 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
在这一步,你将验证你的应用程序是否已使用来自 my-secret
Secret 的数据库密码正确配置。
首先,运行以下命令以在运行你的应用程序的容器中打开一个 shell 会话:
kubectl exec -it secret-pod -- sh
进入 shell 会话后,运行以下命令以打印该值:
cat /etc/secret-volume/password
输出结果应该是 Secret 的值。
在这个实验中,我们学习了如何使用 Kubernetes Secret 来存储敏感信息,以及如何在 Pod 中使用它们。Secret 提供了一种安全的方式来管理敏感信息,并且应该尽可能地使用它们,以避免以明文形式暴露 Secret。