千家信息网

Kubernetes中secret及configmap如何配置管理

发表于:2024-10-20 作者:千家信息网编辑
千家信息网最后更新 2024年10月20日,这篇文章给大家分享的是有关Kubernetes中secret及configmap如何配置管理的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。配置管理Pod使用secret两种
千家信息网最后更新 2024年10月20日Kubernetes中secret及configmap如何配置管理

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

配置管理
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.yamlapiVersion: v1kind: Secretmetadata:  name: mysecrettype: Opaquedata:  username:   password:
[root@k8s-master cert]# kubectl create -f secret.yaml [root@k8s-master demo]# vim secret-pod1.yaml apiVersion: v1kind: Podmetadata:  name: mypodspec:  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 podNAME                     READY   STATUS    RESTARTS   AGEbusybox                  1/1     Running   35         4d1hmypod                    1/1     Running   0          2m27snginx-5ddcc6cb74-m8dwr   1/1     Running   0          5h57mnginx-5ddcc6cb74-rs8b6   1/1     Running   0          4h44mnginx-5ddcc6cb74-zm7cz   1/1     Running   0          4h44m[root@k8s-master demo]# kubectl exec -it mypod shlsbin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  varecho $SECRET_USERNAMErootecho $SECRET_PASSWORDzhaocheng

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

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

[root@k8s-master demo]# vim secret-pod2.yamlapiVersion: v1kind: Podmetadata:  name: mypod2spec:  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 podNAME                     READY   STATUS    RESTARTS   AGEmypod                    1/1     Running   0          6m1smypod2                   1/1     Running   0          9snginx-5ddcc6cb74-lplxl   1/1     Running   0          43m[root@k8s-master demo]# kubectl exec -it mypod2 bashroot@mypod2:/# ls /etc/foo/password  usernameroot@mypod2:/# cat /etc/foo/password zhaochengroot@mypod2:/# cat /etc/foo/usernamerootroot@mypod2:/#

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

[root@k8s-master demo]# vim configmap1.yamlapiVersion: v1kind: ConfigMapmetadata:  name: myconfig  namespace: defaultdata:  special.level: info  special.type: hello---apiVersion: v1kind: Podmetadata:  name: mypodspec:  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 podNAME                     READY   STATUS      RESTARTS   AGEmypod                    1/1     Running     0          26mmypod2                   1/1     Running     0          20mmypod3                   0/1     Completed   0          41snginx-5ddcc6cb74-lplxl   1/1     Running     0          63m[root@k8s-master demo]# kubectl logs mypod3info hello使用redis的一个实例[root@k8s-master demo]# vim configmap2.yaml apiVersion: v1kind: ConfigMapmetadata:  name: redis-configdata:  redis.properties: |    redis.host=127.0.0.1    redis.port=6379    redis.password=123456---apiVersion: v1kind: Podmetadata:  name: mypodspec:  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 podNAME                     READY   STATUS      RESTARTS   AGEmypod                    1/1     Running     0          30mmypod2                   1/1     Running     0          24mmypod3                   0/1     Completed   0          4m58smypod4                   0/1     Completed   0          15snginx-5ddcc6cb74-lplxl   1/1     Running     0          68m验证这里已经将内容发送到控制台[root@k8s-master demo]# kubectl logs mypod4redis.host=127.0.0.1redis.port=6379redis.password=123456

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

0