软件开发架构师

第十章 Secret & Configmap (中)

架构 30 2019-03-22 23:12

10.3 在Pod中使用Secret

  10.3.1 Volume方式  

apiVersion: v1
kind: Pod
metaata:
  name: mypod
spec:
  containers:
  - name: mypod
    image: busybox
    args:
      - /bin/sh
      - -c
      - sleep 10; touch /tmp/healthy; sleep 30000
    volumeMounts:
    - name: foo
      mountPath: "/etc/foo"    # 在容器内部的该路径下
      readOnly: true
  volumes:
  - name: foo
    secret:
      secretName: mysecret     # 指定有前面创建的mysecret

 

 kubectl apply -f mypod.yml
 pod "mypod" created

kubeusr@GalaxyKubernetesMaster:~$ kubectl get pods
NAME                READY     STATUS              RESTARTS   AGE
mypod               0/1       ContainerCreating   0          7s
producer-consumer   2/2       Running             4          18h
kubeusr@GalaxyKubernetesMaster:~$ kubectl get pods
NAME                READY     STATUS    RESTARTS   AGE
mypod               1/1       Running   0          14s
producer-consumer   2/2       Running   4          18h
kubeusr@GalaxyKubernetesMaster:~$ kubectl exec -it mypod  sh     # 进入容器 / # cd /etc/foo              # 进入 /etc/foo # ls
password  username
/etc/foo #

cat /etc/foo/password # 可以直接查看内容,是名文。
123456

 

K8s会在指定的路径下为每条敏感数据创建一个文件,文件名是数据条目的Key, /etc/foo/username和 etc/foo/password, value是以明文的形式存放在文件中。

我们也可以自定义存放数据的文件名,配置文件如下改动:这时,数据将存放在/etc/foo/my-group/myt-username中。

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mypod
    image: busybox
    args:
      - /bin/sh
      - -c
      - sleep 10; touch /tmp/healthy; sleep 30
    volumeMounts:
    - name: foo
      mountPath: "/etc/foo"
      readOnly: true
  volumes:
  - name: foo
    secret:
      secretName: mysecret
      items:
      - key: username
        path: my-group/my-username
      - key: password
        path: my-group/my-password

     以Voluime方式使用secret支持动态更新:Secret更新后,容器中的数据也会更新。

 10.3.2 环境变量方式

   通过volume方式使用secret,容器必须从文件读取数据,稍显麻烦。

   K8s支持通过环境变量使用secret。

   

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mypod
    image: busybox
    args:
      - /bin/sh
      - -c
      - sleep 10; touch /tmp/healthy; sleep 30000
    env:
      - name: SECRET_USERNAME        # 环境变量名字
        valueFrom:                   
          secretKeyRef:
            name: mysecret           # 从哪个secret来
            key: username            # key - name: SECRET_PASSWORD
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: password

 

通过环境变量SECRET_USERNAME 和 SECRET_PASSWORD就可以读取到secret的数据,但是注意: 环境变量的方式不支持Secret动态更新。

-su: kubeusr@GalaxyKubernetesMaster:~$: command not found
kubeusr@GalaxyKubernetesMaster:~$ pod "mypod" created

 

文章评论