敏感信息,直接保存在容器镜像中显然不妥,比如用户名、密码等。K8s提供的解决方案是Secret。
Secret会以密文的方式存储数据,避免了在配置文件中保存敏感信息。Secret会以Volume的形式被mount到Pod,容器可通过文件的方式使用Secret中的敏感数据;
此外,容器也可以环境变量的方式使用这些数据。
Secret可通过命令行或YAML创建。
10.1 创建Secret:
4种方法创建secret:
(1) --from-literal: --from-literal对应一个条目。
kubectl create secret generic mysecret --from-literal=username=admin --from-literal=password=123456
(2) --from-file: 每个文件对应一个条目
kubeusr@GalaxyKubernetesMaster:~$ echo -n 123456 >./pas # 往文件pas中写 kubeusr@GalaxyKubernetesMaster:~$ echo -n admin >./user
kubeusr@GalaxyKubernetesMaster:~$ kubectl create secret generic mysecret2 --from-file=./user --from-file=./pas
secret "mysecret2" created
(3) 通过--from-env-file: 文件中的Key=value对应一个条目
kubeusr@GalaxyKubernetesMaster:~$ cat << EOF > env.txt # cat <<EOF > env.txt 是覆盖模式; cat <<EOF >> env.txt是追加模式 > username=admin > password=123456 > EOF kubeusr@GalaxyKubernetesMaster:~$ cat env.txt username=admin password=123456
kubeusr@GalaxyKubernetesMaster:~$ kubectl create secret generic mysecret3 --from-env-file=env.txt
secret "mysecret3" created
(4)通过YAML配置文件:
Secret里面存储的数据必须是通过base64编码后的结果:
pkubeusr@GalaxyKubernetesMaster:~$ echo -n admin | base64 YWRtaW4= kubeusr@GalaxyKubernetesMaster:~$ echo -n 123456 | base64 MTIzNDU2 kubeusr@GalaxyKubernetesMaster:~$
apiVersion: v1 kind: Secret metadata: name: mysecret4 data: username: YWRtaW4= password: MTIzNDU2
kubeusr@GalaxyKubernetesMaster:~$ kubectl apply -f mysecrete.yml secret "mysecret4" created
10.2 查看Secret:
kubeusr@GalaxyKubernetesMaster:~$ kubectl get secret NAME TYPE DATA AGE default-token-qjj5t kubernetes.io/service-account-token 3 131d jenkins-credentials Opaque 1 85d mysecret Opaque 2 42m mysecret2 Opaque 2 37m mysecret3 Opaque 0 20m mysecret4 Opaque 2 9m
kubeusr@GalaxyKubernetesMaster:~$ kubectl describe secret mysecret2 Name: mysecret2 Namespace: default Labels: <none> Annotations: <none> Type: Opaque Data ==== pas: 0 bytes user: 0 bytes
kubeusr@GalaxyKubernetesMaster:~$ kubectl edit secret mysecret4 # 查看具体内容
# 然后用base64解码
kubeusr@GalaxyKubernetesMaster:~$ echo -n YWRtaW4=| base64 --decode
admin