《K8s 配置管理》系列,共包含以下 2 篇文章:
😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点赞 🧡、关注 💛、收藏 💚)!!!您的支持 💖💖💖 将激励 🔥 博主输出更多优质内容!!!
配置管理(二):Secret
Secret 也是 Kubernetes 配置管理的一种方式,它采用 Base 64 编码机制保存配置信息。与 ConfigMap 不同的是,Secret 中包含敏感的信息,例如用户的登录密码、Token 等。这些敏感信息使用 Secret 来保存,可以更好地控制它们的用途,并降低意外暴露的风险。在成功创建 Secret 后,可以通过 环境变量 或 数据卷 的方式在 Pod 中使用它。
1.创建 Secret
1.1 使用账号密码文件命令创建 Secret
- 执行以下命令生成账号文件和密码文件。
echo 'collenzhao' > username.txt
echo 'password' > password.txt
- 使用
kubectl create secret
命令创建 Secret。
kubectl create secret generic demo-secret1 \
--from-file=username.txt --from-file=password.txt
- 获取创建的 Secret。
kubectl get secret
输出的信息如下:
NAME TYPE DATA AGE
default-token-gp47w kubernetes.io/service-account-token 3 3d13h
demo-secret1 Opaque 2 4s
🚀 Kubernetes 允许用户创建自己的 Secret,同时系统也创建了一些 Secret(例如
default-token-gp47w
)。
- 查看
demo-secret1
的详细信息。
kubectl describe secret demo-secret1
输出的信息如下:
Name: demo-secretl
Namespace: default
Labels: <none>
Annotations: <none>
Type: Оpaque
Data
====
password.txt: 9 bytes
username.txt: 11 bytes
1.2 使用 YAML 文件创建 Secret
由于 Secret 是采用 Base 64 编码机制来保存配置信息的,因此在创建 YAML 文件前,需要先得到配置信息的 Base 64 编码。
在以下例子中,先将账号和密码进行 Base 64 编码,然后通过 YAML 文件将编码结果保存到了 Secret 中。
- 得到账号
admin
和密码hello123
的 Base 64 编码。
echo 'admin' | base64
YWRtaW4K
echo 'hello123' | base64
aGVsbG8xMjMK
- 创建
demo-secret2.yaml
文件,并在其中输入以下内容。
apiVersion: v1
kind: Secret
metadata:
name: demo-secret2
type: Opaque
data:
username: YWRtaW4K
password: aGVsbG8xMjMK
- 执行
kubectl create
命令创建 Secret。
kubectl create -f demo-secret2.yaml
- 获取创建的 Secret。
kubectl get secret
输出的信息如下:
NAME TYPE DATA AGE
default-token-gp47w kubernetes.io/service-account-token 3 3d13h
demo-secret1 Opaque 2 9m37s
demo-secret2 Opaque 2 18s
2.使用 Secret
在成功创建 Secret 后,就可以在 Pod 中使用它来实现配置信息的管理了。Secret 的使用也有两种方式:环境变量 和 数据卷 volume。
2.1 通过环境变量直接将 Secret 的配置信息传递给 Pod
- 创建
secret-usage01.yaml
文件,并在其中输入以下内容。
apiVersion: v1
kind: Pod
metadata:
name: secret-usage01
spec:
containers:
- name: secret-usage01
image: nginx
imagePullPolicy: IfNotPresent
env:
- name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: demo-secret2
key: username
- name: SECRET_PASSWORD
valueFrom:
secretKeyRef:
name: demo-secret2
key: password
restartPolicy: Never
- 使用
kubectl apply
命令创建 Pod。
kubectl apply -f secret-usage0l.yaml
- 使用
kubectl exec
命令进入容器。
kubectl exec it secret-usage01 bash
- 查看 Secret 的配置信息。
echo $SECRET USERNAME
echo $SECRET PASSWORD
root@secret-usage01:/# echo $SECRET_USERNANE
admin
root@secret-usage01:/# echo $SECRET_PASSWORD
hello123
root@secret-usage01:/#
2.2 通过数据卷 volume 将 Secret 的配置信息挂载到 Pod 内
- 创建
secret-usage02.yaml
文件将创建的 Secretdemo-secret2
挂载到容器指定的目录下。目录下的文件以key
作为文件名,文件内容为key
的值。
apiVersion: v1
kind: Pod
metadata:
name: secret-usage02
spec:
containers:
- name: secret-usage02
image: redis
imagePullPolicy: IfNotPresent
volumeMounts:
- name: foo
mountPath: "/etc/foo"
readOnly: true
volumes:
- name: foo
secret:
secretName: demo-secret2
- 执行
kubectl apply
命令创建 Pod。
kubectl apply -f secret-usage02.yaml
- 使用
kubectl exec
命令进入容器。
kubectl exec -it secret-usage02 bash
- 切换到容器内的
/etc/foo/
目录下,查看挂载的 Secret 配置信息。
root@secret-usage02:/data# cd /etc/foo/
root@secret-usage02:/etc/foo# ls
password username
root@secret-usage02:/etc/foo# more username
admin
root@secret-usage02:/etc/foo# more password
hello123
root@secret-usage02:/etc/foo#