1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 10 kubernetes 核心技术-Secret ConfigMap

10 kubernetes 核心技术-Secret ConfigMap

时间:2020-10-06 11:02:59

相关推荐

10 kubernetes 核心技术-Secret ConfigMap

文章目录

一、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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。