赞
踩
data
与/或stringData
字段。data
和stringData
字段都是可选的。data
字段中国所有键值都必须是base54编码的字符串。如果不希望指定这种base64字符串的转换操作,你可以选择设置stringData
字段,其中可以使用任何字符串作为其取值。data
和srtingData
中的键名只能包含字母、数据、-
、_
或.
字符。stringData
字段中的所有键值对都会在内部被合并到data
字段中。如果某个主键同时出现在data
和stringData
字段中,stringData
所指定的键值具有高优先级。apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: mypod image: redis volumeMounts: - name: foo mountPath: "/etc/foo" readOnly: true volumes: - name: foo secret: secretName: mysecret # optional字段设置为true表示这是一个可选的Secret。 optional: true
my-app
和密码39528$vdg7Jb
。首先使用base64编码将用户名和密码转换为base-64形式。下面是一个使用常用的base程序的示例:bXktYXBw
,base-64形式的密码为Mzk1MjgkdmRnN0pi
。# 用户名base64
[root@master ~]# echo -n 'my-app' | base64
bXktYXBw
# 密码base64
[root@master ~]# echo -n '39528$vdg7Jb' | base64
Mzk1MjgkdmRnN0pi
[root@master ~]# vim secret.yaml
apiVersion: "v1"
kind: Secret
metadata:
name: test-secret
type: Opaque
data:
# 此处的键的值是单行内容
username: bXktYXBw
password: Mzk1MjgkdmRnN0pi
# 创建Secret
[root@master ~]# kubectl apply -f secret.yaml
# 查看Secret相关信息
[root@master ~]# kubectl get secrets test-secret
NAME TYPE DATA AGE
test-secret Opaque 2 39s
# 回显字段解释
NAME:Secret存储的名称
TYPE:Secret的类型
DATA:描述Secret存储中有几个数据,一个键表示一个数据
AGE:表示Secret被创建的时间
# 查看Secret相关的更多详细信息
# 仔细观察可以发现,我们定义的值被加密了
[root@master ~]# kubectl describe secrets test-secret
Name: test-secret
Namespace: default
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
password: 12 bytes
username: 6 bytes
kubectl create secret
的命令直接创建Secret,例如:[root@master ~]# kubectl create secret generic secret --from-literal='username=my-app' --from-literal='password=password=39528$vdg7Jb'
[root@master ~]# vim secret-pod.yaml apiVersion: "v1" kind: Pod metadata: name: secret-test-pod spec: restartPolicy: Always containers: - name: test-container image: nginx:latest imagePullPolicy: IfNotPresent volumeMounts: # name 必须与下面的卷名匹配 - name: secret-volume mountPath: "/etc/secret-volume" readOnly: true # Secret 数据通过一个卷暴露给该Pod中的容器 volumes: - name: secret-volume # 这个卷将会从下面的test-secret中取值 secret: secretName: test-secret
# 创建Pod
[root@master ~]# kubectl apply -f secret-pod.yaml
# 确定Pod正在运行
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
secret-test-pod 1/1 Running 0 34s
# Secret数据卷通过挂载在/etc/secret-volume目录下的卷暴露在容器中
# 在shell中,列举/etc/secret-volume目录下的文件
# 使用以下命令可以看到两个文件,每个对应一个Secret数据条目
[root@master ~]# kubectl exec -it secret-test-pod -- ls /etc/secret-volume
password username
# Secret data映射中的每个键都成为被挂载目录下的文件名
# 显示username和password文件的内容
[root@master ~]# kubectl exec -it secret-test-pod -- cat /etc/secret-volume/username
my-app
[root@master ~]# kubectl exec -it secret-test-pod -- cat /etc/secret-volume/password
39528$vdg7Jb
.spec.volumes[].secret.items
字段来改变每个键的目标路径# 如果你使用.spec.volumes[].secret.items明确地列出键,请考虑以下事情 # 只有在items字段中指定的键才会被映射到挂载目录下 # 要使用Secret中全部的键,那么全部的键都必须列在items字段中 # 所有列出的键必须存在于相应的Secret中,否则该卷不会被创建 [root@master ~]# vim secret-mypod.yaml apiVersion: "v1" kind: Pod metadata: name: mypod spec: containers: - name: mypod image: nginx imagePullPolicy: IfNotPresent volumeMounts: - name: foo mountPath: "/etc/foo" readOnly: true volumes: - name: foo secret: secretName: test-secret items: # 来自test-secret的键username可以在路径为/etc/foo/my-group/my-username下供容器使用,而不是路径/etc/foo/username - key: username path: "my-group/my-username" - key: password path: "1/2/3/4/password.conf"
# 创建Pod
[root@master ~]# kubectl apply -f secret-mypod.yaml
# 确定Pod正在运行
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
mypod 1/1 Running 0 107s
# 如果以下命令验证效果
# 可以很明显的看出,我们在使用Secret的时候是可以选择我们的配置文件放在什么目录下,但是需要注意的是父目录永远是挂载Pod中的目录
[root@master ~]# kubectl exec -it mypod -- ls /etc/foo/my-group/
my-username
[root@master ~]# kubectl exec -it mypod -- ls /etc/foo/1/2/3/4/
password.conf
[root@master ~]# vim secret-env.yaml apiVersion: "v1" kind: Pod metadata: name: env-single-secret spec: containers: - name: envars-test-container image: nginx:latest imagePullPolicy: IfNotPresent env: # 定义一个变量名为 SECRET_USERNAME - name: SECRET_USERNAME valueFrom: # 新变量的值将会从test-secret存储中的username键取值 secretKeyRef: name: test-secret key: username
# 创建Pod
[root@master ~]# kubectl apply -f secret-env.yaml
# 确定Pod正在运行
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
env-single-secret 1/1 Running 0 22s
# 在Shell中,显示容器环境变量SECRET_USERNAME的内容
[root@master ~]# kubectl exec -it env-single-secret -- /bin/sh -c 'echo $SECRET_USERNAME'
my-app
[root@master ~]# kubectl create secret generic backend-user --from-literal=backend-username='backend-admin'
[root@master ~]# kubectl create secret generic db-user --from-literal=db-username='db-admin'
[root@master ~]# vim envars-secret.yaml apiVersion: "v1" kind: Pod metadata: name: envvars-multiple-secrets spec: containers: - name: envars-test-container image: nginx:latest imagePullPolicy: IfNotPresent env: - name: BACKEND_USERNAME valueFrom: secretKeyRef: name: backend-user key: backend-username - name: DB_USERNAME valueFrom: secretKeyRef: name: db-user key: db-username
# 创建Pod
[root@master ~]# kubectl apply -f envars-secret.yaml
# 确定Pod正在运行
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
envvars-multiple-secrets 1/1 Running 0 15s
# 在shell中,显示容器环境变量的内容
[root@master ~]# kubectl exec -i -t envvars-multiple-secrets -- /bin/sh -c 'env | grep _USERNAME'
DB_USERNAME=db-admin
BACKEND_USERNAME=backend-admin
# 使用envFrom来将Secret中的所有数据定义为环境变量。Secret中的键名成为容器中的环境变量名
[root@master ~]# vim suoyou-env.yaml
apiVersion: "v1"
kind: Pod
metadata:
name: envfrom-secret
spec:
containers:
- name: envars-test-container
image: nginx:latest
imagePullPolicy: IfNotPresent
envFrom:
- secretRef:
name: test-secret
# 创建Pod
[root@master ~]# kubectl apply -f suoyou-env.yaml
# 确定Pod正在运行
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
envfrom-secret 1/1 Running 0 25s
# 在Shell中,显示环境变量username和password的内容
[root@master ~]# kubectl exec -i -t envfrom-secret -- /bin/sh -c 'echo "username: $username\npassword: $password\n"'
username: my-app
password: 39528$vdg7Jb
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。