一 . Secret

Secret的主要作用就是加密数据,然后存在etcd里面,让Pod容器以挂载Volume方式进行访问
场景:用户名 和 密码进行加密
一般场景的是对某个字符串进行base64编码 进行加密

  1. echo -n 'admin' | base64

image.png

  • 创建secret加密数据的yaml文件 secret.yaml
    1. apiVersion: v1
    2. kind: Secret
    3. metadata:
    4. name: mysecret
    5. type: Opaque
    6. data:
    7. username: YWRtaW4=
    8. password: MWYyZDFlMmU2N2Rm
    然后使用下面命令创建一个pod(这个应该有命名) ``` kubectl create -f secret.yaml

查看

kubectl get secret

  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/2639475/1618208642480-ed1e3590-eb09-42ea-bc47-67207f49d489.png#height=111&id=fiLk1&margin=%5Bobject%20Object%5D&name=image.png&originHeight=111&originWidth=821&originalType=binary&size=13464&status=done&style=none&width=821)
  2. <a name="lEbzb"></a>
  3. ### 1.1 变量形式挂载到Pod
  4. 文件 : secret-var.yaml
  5. ```yaml
  6. apiVersion: v1
  7. kind: Pod
  8. metadata:
  9. name: mypod
  10. spec:
  11. containers:
  12. - name: nginx
  13. image: nginx
  14. env:
  15. - name: SECRET_USERNAME
  16. valueFrom:
  17. secretKeyRef:
  18. name: mysecret
  19. key: username
  20. - name: SECRET_PASSWORD
  21. valueFrom:
  22. secretKeyRef:
  23. name: mysecret
  24. key: password

通过get命令查看

  1. #挂载
  2. kubectl apply -f secret-var.yaml
  3. kubectl get pods

image.png
然后我们通过下面的命令,进入到我们的容器内部

  1. kubectl exec -it mypod bash

然后我们就可以输出我们的值,这就是以变量的形式挂载到我们的容器中

  1. # 输出用户
  2. echo $SECRET_USERNAME
  3. # 输出密码
  4. echo $SECRET_PASSWORD

image.png
最后如果我们要删除这个Pod,就可以使用这个命令

  1. kubectl delete -f secret-val.yaml

1.2 数据卷形式挂载

首先我们创建一个 secret-val.yaml 文件

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: mypod2
  5. spec:
  6. containers:
  7. - name: nginx
  8. image: nginx
  9. # 挂载目录
  10. volumeMounts:
  11. - name: foo
  12. mountPath: "/etc/foo"
  13. readOnly: true
  14. volumes:
  15. - name: foo
  16. # 名称
  17. secret:
  18. secretName: mysecret

然后创建我们的 Pod

  1. # 根据配置创建容器
  2. kubectl apply -f secret-val.yaml
  3. # 进入容器
  4. kubectl exec -it mypod bash
  5. # 查看
  6. ls /etc/foo

image.png

  1. kubectl delete pod -all

二. ConfigMap

ConfigMap作用是存储不加密的数据到etcd中,让Pod以变量或数据卷Volume挂载到容器中
应用场景:配置文件

2.1 创建配置文件

首先我们需要创建一个配置文件 redis.properties

  1. redis.port=127.0.0.1
  2. redis.port=6379
  3. redis.password=123456

2.2 创建ConfigMap

我们使用命令创建configmap

  1. kubectl create configmap redis-config --from-file=redis.properties

然后查看详细信息

  1. kubectl get cm
  2. kubectl describe cm redis-config

image.png

2.3 挂载

2.3.1 Volume数据卷形式挂载

首先我们需要创建一个 cm.yaml

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: mypod
  5. spec:
  6. containers:
  7. - name: busybox
  8. image: busybox
  9. # 命令输出redis配置
  10. command: [ "/bin/sh","-c","cat /etc/config/redis.properties" ]
  11. volumeMounts:
  12. - name: config-volume
  13. mountPath: /etc/config
  14. volumes:
  15. - name: config-volume
  16. configMap:
  17. # 对应刚刚的configMap
  18. name: redis-config
  19. #Pod重启机制
  20. # Always:当容器终止退出后,总是重启容器,默认策略 【nginx等,需要不断提供服务】
  21. # OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。
  22. # Never:当容器终止退出,从不重启容器 【批量任务】
  23. restartPolicy: Never

然后使用该yaml创建我们的pod

  1. # 创建
  2. kubectl apply -f cm.yaml
  3. # 查看
  4. kubectl get pods

image.png
最后我们通过命令就可以查看结果输出了

  1. kubectl logs mypod
  2. kubectl delete -f cm.yaml

image.png

2.3.4 以变量的形式挂载Pod

首先我们也有一个 myconfig.yaml文件,声明变量信息,然后以configmap创建

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. name: myconfig
  5. namespace: default
  6. data:
  7. special.level: info
  8. special.type: hello

然后我们就可以创建我们的配置文件

  1. # 创建pod
  2. kubectl apply -f myconfig.yaml
  3. # 获取
  4. kubectl get cm

image.png
然后我们创建完该pod后,我们就需要在创建一个 config-var.yaml 来使用我们的配置信息

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: mypod
  5. spec:
  6. containers:
  7. # 容器
  8. - name: busybox
  9. image: busybox
  10. # 配置输出信息
  11. command: [ "/bin/sh", "-c", "echo $(LEVEL) $(TYPE)" ]
  12. env:
  13. - name: LEVEL
  14. valueFrom:
  15. # 挂载
  16. configMapKeyRef:
  17. name: myconfig
  18. key: special.level
  19. - name: TYPE
  20. valueFrom:
  21. configMapKeyRef:
  22. name: myconfig
  23. key: special.type
  24. restartPolicy: Never

最后我们查看输出

  1. kubectl create -f config-var.yaml
  2. kubectl get cm
  3. kubectl logs mypod

image.png