Kubernetes 核心概念之4 Secret 配置管理

Secret

Secret 的主要作用就是加密数据,然后存在 etcd 里面,让 Pod 容器以挂载 Volume 方式进行访问。

场景:用户名 和 密码进行加密

一般情况下 secret 的加密是对某个字符串进行base64编码 进行加密

1
2
echo -n 'admin' | base64
# YWRtaW4=

Secret 的使用

Pod 可以用三种方式之一来使用 Secret:

  • 作为挂载到一个或多个容器上的卷中的文件。
  • 作为容器的环境变量。
  • 由 kubelet 在为 Pod 拉取镜像时使用。

通过文本文件创建用户密码

1、创建用户名密码文件

1
2
echo -n 'admin' > ./username.txt
echo -n '1f2d1e2e67df' > ./password.txt

2、通过文件创建用户名密码

1
kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt

3、查看创建用户名密码

1
2
3
4
# kubectl get secret

NAME TYPE DATA AGE
db-user-pass Opaque 2 37s

查看详情

1
2
3
4
5
6
7
8
9
10
11
12
13
# kubectl describe secret db-user-pass

Name: db-user-pass
Namespace: default
Labels: <none>
Annotations: <none>

Type: Opaque

Data
====
password.txt: 12 bytes
username.txt: 5 bytes

通过 yaml 文件创建用户名密码

1、编码用户名密码

1
2
echo -n 'admin' | base64
echo -n '1f2d1e2e67df' | base64

2、创建 secret 加密数据的yaml文件:secret.yaml

1
2
3
4
5
6
7
8
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: YWRtaW4=
password: MWYyZDFlMmU2N2Rm

3、创建用户名密码

1
kubectl create -f secret.yaml

4、查看创建用户

1
2
3
4
5
# kubectl get secret

NAME TYPE DATA AGE
db-user-pass Opaque 2 5m42s
mysecret Opaque 2 18s

通过环境变量导入到容器中

1、创建 pod 的 yaml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# vim secret-var.yaml

apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: nginx
image: nginx
env:
# 环境变量名称:用户
- name: SECRET_USERNAME
valueFrom:
# 选择输入secret用户
secretKeyRef:
name: mysecret
key: username
# 环境变量名称:密码
- name: SECRET_PASSWORD
valueFrom:
# 选择输入secret密码
secretKeyRef:
name: mysecret
key: password

2、创建容器

1
kubectl create -f secret-var.yaml

3、通过get命令查看容器

1
kubectl get pods

4、然后进入到的容器内部查看变量

1
2
3
4
5
root@mypod:/# kubectl exec -it mypod bash   # 进入容器内容部
root@mypod:/# echo $SECRET_USERNAME # 查看值
admin
root@mypod:/# echo $SECRET_PASSWORD
1f2d1e2e67df

5、如果我们要删除这个 Pod,就可以使用下面这个命令

1
kubectl delete -f secret-val.yaml

数据卷形式挂载

1、首先我们创建一个 secret-val.yaml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# vim secret-val.yaml

apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: foo
mountPath: "/etc/foo" # 挂载目录
readOnly: true
volumes:
- name: foo
secret:
# 创建的secret
secretName: mysecret # 名称

2、创建 Pod

1
2
# 根据配置创建容器
kubectl apply -f secret-val.yaml

3、查看容器

1
2
3
4
# kubectl get pod

NAME READY STATUS RESTARTS AGE
mypod 1/1 Running 0 46s

4、进入容器查看

1
2
3
4
5
6
root@mypod:/# kubectl exec -it mypod bash   # 进入容器查看
root@mypod:/# ls /etc/foo/ # 查看
password username
root@mypod:/# cat /etc/foo/password
1f2d1e2e67dfroot@mypod:/# cat /etc/foo/username
adminroot@mypod:/#

Kubernetes 核心概念之4 Secret 配置管理
https://flepeng.github.io/042-云原生-02-kubernetes-31-核心概念-Kubernetes-核心概念之4-Secret-配置管理/
作者
Lepeng
发布于
2023年3月1日
许可协议