Kubernetes中secret及configmap如何配置管理

60次阅读
没有评论

共计 4355 个字符,预计需要花费 11 分钟才能阅读完成。

这篇文章给大家分享的是有关 Kubernetes 中 secret 及 configmap 如何配置管理的内容。丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,一起跟随丸趣 TV 小编过来看看吧。

配置管理
Pod 使用 secret 两种方式:
• 变量注入(就是我们在写 yaml 的时候直接让它以变量的方式注入进去,注入 pod 中,去引用这个变量,去做相关的处理)
• 挂载(直接从 volume 的形式挂载到我们指定的目录下)
Configmap
与 Secret 类似,区别在于 ConfigMap 保存的是不需要加密配置信息。
应用场景:应用配置

官方文档使用 secret:https://kubernetes.io/docs/concepts/configuration/secret/

可以创建 secret 主要放一些加密数据,不希望别人看到的,比如用户名密码,保存这样的数据
存储好怎么让用户去访问,可以通过 ingress 指定一下 secret 名字,一般情况下创建 pod 业务容器的话,就需要指定这个 secret 到哪个地方或者以 volume 的方式挂载的
加密数据并存放 Etcd 中,让 Pod 的容器以挂载 Volume 方式访问。
应用场景:凭据
创建资源的时候, YAML 或 JSON 格式,然后创建该对象。在包含两个映射:stringdata 和数据。该数据字段用于存储任意数据,用 Base64 编码。在 stringdata 提供,并允许您提供秘密数据为未编码的字符串。
例如,两个字符串存储到在 yaml 的使用,将他们转换成 BASE64:
这里的变量转换为编码,提示敏感字符,下面的 yaml 文件没写上去,抱歉

[root@k8s-master demo]# echo -n  root  | base64
[root@k8s-master demo]# echo -n  zhaocheng  | base64
[root@k8s-master cert]# vim secret.yaml
apiVersion: v1
kind: Secret
metadata:
 name: mysecret
type: Opaque
data:
 username: 
 password:
[root@k8s-master cert]# kubectl create -f secret.yaml 
[root@k8s-master demo]# vim secret-pod1.yaml 
apiVersion: v1
kind: Pod
metadata:
 name: mypod
spec:
 containers:
 - name: nginx
 image: nginx
 env:
 - name: SECRET_USERNAME
 valueFrom:
 secretKeyRef:
 name: mysecret
 key: username
 - name: SECRET_PASSWORD
 valueFrom:
 secretKeyRef:
 name: mysecret
 key: password
[root@k8s-master demo]# kubectl create -f secret-pod1.yaml 
[root@k8s-master demo]# kubectl get pod
NAME READY STATUS RESTARTS AGE
busybox 1/1 Running 35 4d1h
mypod 1/1 Running 0 2m27s
nginx-5ddcc6cb74-m8dwr 1/1 Running 0 5h57m
nginx-5ddcc6cb74-rs8b6 1/1 Running 0 4h44m
nginx-5ddcc6cb74-zm7cz 1/1 Running 0 4h44m
[root@k8s-master demo]# kubectl exec -it mypod sh
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
echo $SECRET_USERNAME
echo $SECRET_PASSWORD
zhaocheng

应用场景:
一般写 Dockerfile 的时候,或者 docker-compose 的时候,能自动的去处理这些变量,也就是这个值被 k8s 进来解码

通过 volume 的形式来挂载
一般使用 volume 来把一些证书比如 https 的证书通过变量的形式传入挂载到目录中

[root@k8s-master demo]# vim secret-pod2.yaml
apiVersion: v1
kind: Pod
metadata:
 name: mypod2
spec:
 containers:
 - name: nginx
 image: nginx
 volumeMounts:
 - name: foo
 mountPath:  /etc/foo 
 readOnly: true
 volumes:
 - name: foo
 secret:
 secretName: mysecret
[root@k8s-master demo]# kubectl create -f secret-pod2.yaml 
[root@k8s-master demo]# kubectl get pod
NAME READY STATUS RESTARTS AGE
mypod 1/1 Running 0 6m1s
mypod2 1/1 Running 0 9s
nginx-5ddcc6cb74-lplxl 1/1 Running 0 43m
[root@k8s-master demo]# kubectl exec -it mypod2 bash
root@mypod2:/# ls /etc/foo/
password username
root@mypod2:/# cat /etc/foo/password 
zhaochengroot@mypod2:/# cat /etc/foo/username
rootroot@mypod2:/#

Configmap
与 Secret 类似,区别在于 ConfigMap 保存的是不需要加密配置信息。
应用场景:应用配置
使用 configmap 来传入变量
官方文档:https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/

[root@k8s-master demo]# vim configmap1.yaml
apiVersion: v1
kind: ConfigMap
metadata:
 name: myconfig
 namespace: default
data:
 special.level: info
 special.type: hello
apiVersion: v1
kind: Pod
metadata:
 name: mypod
spec:
 containers:
 - name: busybox
 image: busybox
 command: [  /bin/sh ,  -c ,  echo $(LEVEL) $(TYPE)  ]
 env:
 - name: LEVEL
 valueFrom:
 configMapKeyRef:
 name: myconfig
 key: special.level
 - name: TYPE
 valueFrom:
 configMapKeyRef:
 name: myconfig
 key: special.type
 restartPolicy: Never
[root@k8s-master demo]# kubectl get pod
NAME READY STATUS RESTARTS AGE
mypod 1/1 Running 0 26m
mypod2 1/1 Running 0 20m
mypod3 0/1 Completed 0 41s
nginx-5ddcc6cb74-lplxl 1/1 Running 0 63m
[root@k8s-master demo]# kubectl logs mypod3
info hello
使用 redis 的一个实例
[root@k8s-master demo]# vim configmap2.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
 name: redis-config
data:
 redis.properties: |
 redis.host=127.0.0.1
 redis.port=6379
 redis.password=123456
apiVersion: v1
kind: Pod
metadata:
 name: mypod
spec:
 containers:
 - name: busybox
 image: busybox
 command: [  /bin/sh , -c , cat /etc/config/redis.properties  ]
 volumeMounts:
 - name: config-volume
 mountPath: /etc/config
 volumes:
 - name: config-volume
 configMap:
 name: redis-config
 restartPolicy: Never
[root@k8s-master demo]# kubectl create -f configmap2.yaml 
[root@k8s-master demo]# kubectl get pod
NAME READY STATUS RESTARTS AGE
mypod 1/1 Running 0 30m
mypod2 1/1 Running 0 24m
mypod3 0/1 Completed 0 4m58s
mypod4 0/1 Completed 0 15s
nginx-5ddcc6cb74-lplxl 1/1 Running 0 68m
验证这里已经将内容发送到控制台
[root@k8s-master demo]# kubectl logs mypod4
redis.host=127.0.0.1
redis.port=6379
redis.password=123456

感谢各位的阅读!关于“Kubernetes 中 secret 及 configmap 如何配置管理”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-25发表,共计4355字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)