Secret
Secret 的主要作用就是加密数据,然后存在 etcd 里面,让 Pod 容器以挂载 Volume 方式进行访问。
场景:用户名 和 密码进行加密
一般情况下 secret 的加密是对某个字符串进行base64编码 进行加密
1 2
| echo -n 'admin' | base64
|
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
|
NAME TYPE DATA AGE db-user-pass Opaque 2 37s
|
查看详情
1 2 3 4 5 6 7 8 9 10 11 12 13
|
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
|
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
|
apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: nginx image: nginx env: - name: SECRET_USERNAME valueFrom: secretKeyRef: name: mysecret key: username - name: SECRET_PASSWORD valueFrom: secretKeyRef: name: mysecret key: password
|
2、创建容器
1
| kubectl create -f secret-var.yaml
|
3、通过get命令查看容器
4、然后进入到的容器内部查看变量
1 2 3 4 5
| root@mypod:/ root@mypod:/ admin root@mypod:/ 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
|
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: 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:/#
|