第十章 Secret & Configmap (上)

时间:2021-12-08 17:03:50

  敏感信息,直接保存在容器镜像中显然不妥,比如用户名、密码等。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  >./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=
> EOF
kubeusr@GalaxyKubernetesMaster:~$ cat env.txt
username=admin
password=

 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 | 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 131d
jenkins-credentials Opaque 85d
mysecret Opaque 42m
mysecret2 Opaque 37m
mysecret3 Opaque 20m
mysecret4 Opaque 9m
kubeusr@GalaxyKubernetesMaster:~$ kubectl describe secret mysecret2
Name: mysecret2
Namespace: default
Labels: <none>
Annotations: <none> Type: Opaque Data
====
pas: bytes
user: bytes
kubeusr@GalaxyKubernetesMaster:~$ kubectl edit secret mysecret4        # 查看具体内容

# 然后用base64解码

  kubeusr@GalaxyKubernetesMaster:~$ echo -n YWRtaW4=| base64 --decode
  admin