介绍
在本实验中,你将学习如何使用 Kubernetes Secrets 安全地管理敏感信息,例如密码、API 密钥和其他机密数据。你将创建一个 Secret,在应用程序中使用它,并验证应用程序是否正确配置。每个步骤都建立在前一个步骤的基础上,因此请确保仔细跟随。
在本实验中,你将学习如何使用 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。
创建一个名为 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 来获取数据库密码。
创建一个名为 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 值并将其输出到控制台。
创建一个名为 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 会话后,运行以下命令以打印 Secret 的值:
cat /etc/secret-volume/password
输出应为 Secret 的值。
在本实验中,我们学习了如何使用 Kubernetes Secrets 存储敏感信息,以及如何在 Pod 中使用它们。Secrets 提供了一种安全的方式来管理敏感信息,应尽可能使用它们,以避免以明文形式暴露机密信息。