Kubernetes资源对象--Secret

2022-04-23  本文已影响0人  张氏小毛驴

Secret是为了解决密码,token或秘钥等比较敏感的数据的配置问题,避免了直接将这些数据暴露在镜像或者Pod Spec中。

1.Secret的类型

Secret有三种类型:


2.创建Secret

有四种方式可以创建Secret

echo -n admin > ./username
echo -n 123456 > ./password
kubectl create secret generic mysecret1 --from-file=./username --from-file=./password

一个文件对应一个条目

cat << EOF > env.txt
username=admin
password=123456
EOF

kubectl create secret generic mysecret2 --from-env-file=env.txt

env.txt中每一行key=value对应一个条目

apiVersion: v1
kind: Secret
metadata:
  name: mysecret3
data:
  username: YWRtaW4=
  password: MTIzNDU2

其中data中的敏感数据必须是base64编码后的结果。


3.使用Secret

有两种方式使用Secret,分别为Volume和环境变量

3.1 Pod中Volume挂载使用Secret

创建yaml配置文件volume_secret.yaml

apiVersion: v1
kind: Pod
metadata:
  name: volume_secret
spec:
  containers:
  - name: volume_secret
    image: busybox
    args:
      - /bin/sh
      - -c
      - sleep 10; touch /tmp/test; sleep 30000
    volumeMounts:
    - name: secrets
      mountPath: "/etc/secrets"
      readOnly: true
  volumes:
  - name: secrets
    secret:
      secretName: mysecret3

执行创建应用,然后进入busybox中:
kubectl exec -it volume_secret sh
查看/etc/secrets/username,/etc/secrets/password可得到Secret

可以看出,kubernetes会再指定的路径/etc/secrets为Secret中每一个条目数据创建一个文件,文件名就是条目的key,文件内容就是条目的value。

也可以指定存放数据的文件名,比如将上面的yaml文件修改为:
在最后添加:

      secretName: mysecret3
      items:
      - key: username
        path: /etc/test/my_username
      - key: password
        path: /etc/test/my_password

Volume方式使用的Secret支持动态更新,当Secret更新后,容器中的数据也会相应的更新。

3.2 环境变量方式使用Secret

创建env_secret.yaml文件:

apiVersion: v1
kind: Pod
metadata:
  name: env-secret
spec:
  containers:
  - name: env-secret
    image: busybox
    args:
      - /bin/sh
      - -c
      - sleep 10; touch /tmp/test; sleep 30000
    env:
      - name: SECRET_USERNAME
        valueFrom:
          secretKeyRef:
            name: mysecret3
            key: username
      - name: SECRET_PASSWORD
        valueFrom:
          secretKeyRef:
            name: mysecret3
            key: password

执行应用进入容器中查看,通过环境变量SECRET_USERNAME和SECRET_PASSWORD可以读取到Secret的数据。

与volume不同的是,环境变量的方式读取Secret很方便,但是不能动态更新

上一篇下一篇

猜你喜欢

热点阅读