文章目录
一、Secret1.1 变量形式挂载到Pod1.2 数据卷形式挂载二、ConfigMap2.1 创建配置文件2.2 创建ConfigMap2.3 Volume数据卷形式挂载2.4 以变量的形式挂载Pod一、Secret
Secret的主要作用就是加密数据,然后存在etcd里面,让Pod容器以挂载Volume方式进行访问
Secret 解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露 到镜像或者 Pod Spec 中。Secret 可以以 Volume 或者环境变量的方式使用
场景:用户名 和 密码进行加密
一般场景的是对某个字符串进行base64编码 进行加密
[root@k8s-master ~]$ echo -n 'admin' | base64YWRtaW4=
Secret 有三种类型
Service Account :用来访问 Kubernetes API,由 Kubernetes 自动创建,并且会自动挂 载到 Pod 的 /run/secrets/kubernetes.io/serviceaccount 目录中Opaque : base64 编码格式的 Secret,用来存储密码、密钥等kubernetes.io/dockerconfigjson :用来存储私有 docker registry 的认证信息
1.1 变量形式挂载到Pod
创建secret加密数据的yaml文件 secret.yaml
[root@k8s-master ~]$ cat > secret.yaml << EOFapiVersion: v1kind: Secretmetadata:name: mysecrettype: Opaquedata:username: YWRtaW4=password: MWYyZDFlMmU2N2RmEOF
创建一个pod
[root@k8s-master ~]$ kubectl create -f secret.yaml[root@k8s-master ~]$ kubectl get pods[root@k8s-master ~]$ kubectl get secretNAME TYPE DATA AGEdefault-token-wqhjb kubernetes.io/service-account-token 327hmysecret Opaque 27m36s
创建一个 secret-val.yaml 文件
[root@k8s-master ~]$ cat > secret-val.yaml << EOFapiVersion: v1kind: Podmetadata:name: mypodspec:containers:- name: nginximage: nginxenv:- name: SECRET_USERNAMEvalueFrom: #挂载目录secretKeyRef:name: mysecretkey: username- name: SECRET_PASSWORDvalueFrom:secretKeyRef: #名称name: mysecretkey: passwordEOF[root@k8s-master ~]$ kubectl apply -f secret-val.yamlNAME READY STATUSRESTARTS AGEds-test-ljb52 1/1Running085mmypod1/1Running015s
进入到容器内部
[root@k8s-master ~]$ kubectl exec -it mypod bash
然后就可以输出值,这就是以变量的形式挂载到容器中
# 输出用户root@mypod:/# echo $SECRET_USERNAMEadmin# 输出密码root@mypod:/# echo $SECRET_PASSWORD1f2d1e2e67df
要删除这个Pod,就可以使用这个命令
[root@k8s-master ~]$ kubectl delete -f secret-val.yaml
1.2 数据卷形式挂载
创建一个 secret-vol.yaml 文件
[root@k8s-master ~]$ cat > secret-vol.yaml << EOFapiVersion: v1kind: Podmetadata:name: mypodspec:containers:- name: nginximage: nginxvolumeMounts: #挂载- name: foomountPath: "/etc/foo"readOnly: truevolumes:- name: foosecret:secretName: mysecretEOF
创建Pod
# 根据配置创建容器[root@k8s-master ~]$ kubectl apply -f secret-vol.yaml# 进入容器[root@k8s-master ~]$ kubectl exec -it mypod bash# 查看root@mypod:/# ls /etc/foopassword username
二、ConfigMap
ConfigMap作用是存储不加密的数据到etcd中,让Pod以变量或数据卷Volume挂载到容器中
应用场景:配置文件
2.1 创建配置文件
创建一个配置文件 redis.properties
[root@k8s-master ~]$ kubectl delete Pod --all[root@k8s-master ~]$ cat > redis.properties << EOFredis.host=127.0.0.1redis.port=6379redis.password=123456EOF
2.2 创建ConfigMap
[root@k8s-master ~]$ kubectl create configmap redis-config --from-file=redis.properties
查看详细信息
[root@k8s-master ~]$ kubectl get cmNAME DATA AGEredis-config 17m8s[root@k8s-master ~]$ kubectl describe cm redis-configName: redis-configNamespace: defaultLabels: <none>Annotations: <none>Data====redis.properties:----redis.host=127.0.0.1redis.port=6379redis.password=123456Events: <none>
2.3 Volume数据卷形式挂载
创建一个 cm.yaml
[root@k8s-master ~]$ cat > cm.yaml << EOFapiVersion: v1kind: Podmetadata:name: mypodspec:containers:- name: busyboximage: busyboxcommand: [ "/bin/sh","-c","cat /etc/config/redis.properties" ]volumeMounts:- name: config-volumemountPath: /etc/configvolumes:- name: config-volumeconfigMap:name: redis-configrestartPolicy: NeverEOF
使用该yaml创建pod
# 创建[root@k8s-master ~]$ kubectl apply -f cm.yaml# 查看[root@k8s-master ~]$ kubectl get podsNAME READY STATUSRESTARTS AGEmypod 0/1Completed 06m42s
最后通过命令就可以查看结果输出了
[root@k8s-master ~]$ kubectl logs mypodredis.host=127.0.0.1redis.port=6379redis.password=123456
2.4 以变量的形式挂载Pod
创建一个myconfig.yaml文件,声明变量信息,然后以configmap创建
[root@k8s-master ~]$ cat > myconfig.yaml << EOFapiVersion: v1kind: ConfigMapmetadata:name: myconfignamespace: defaultdata:special.level: infospecial.type: helloEOF
创建配置文件
# 创建pod[root@k8s-master ~]$ kubectl apply -f myconfig.yaml# 获取[root@k8s-master ~]$ kubectl get cm
创建完该pod后,我们就需要在创建一个 config-var.yaml 来使用我们的配置信息
[root@k8s-master ~]$ cat > config-var.yaml << EOFapiVersion: v1kind: Podmetadata:name: mypodspec:containers:- name: busybox #容器image: busyboxcommand: [ "/bin/sh", "-c", "echo $(LEVEL) $(TYPE)" ] #输出信息env:- name: LEVELvalueFrom:configMapKeyRef:name: myconfig #挂载key: special.level- name: TYPEvalueFrom:configMapKeyRef:name: myconfigkey: special.typerestartPolicy: NeverEOF
查看输出
[root@k8s-master ~]$ kubectl logs mypod