软件开发架构师

第十章 Secret & Configmap (上)

架构 42 2019-03-22 23:12

  敏感信息,直接保存在容器镜像中显然不妥,比如用户名、密码等。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

 

文章评论