k8s容器编排技术实践——k8s应用中机密信息的配置与存储

k8s容器编排技术实践------K8s中的数据存储实现机制https://blog.csdn.net/xiaochenXIHUA/article/details/161677099k8s容器编排技术实践------k8s的介绍及其整体运行架构https://coffeemilk.blog.csdn.net/article/details/161011629

一、k8s中的Secret简介与创建方法

1.1、k8s资源Secret

在实际的应用中,可能需要存储一些机密信息(如:密码、token,或者秘钥等),这类数据虽然可以存放在Pod或者镜像中,但安全性太差;为了减少机密信息暴露的风险,Kubernetes提供了Secret这个解决方案。

Secret是用来保存敏感数据的k8s资源,它通过密文的方式存储数据,用户可以创建自己的secret,系统也会有自己的secret。

Pod使用Secret的方式是:以Volume的形式mount到Pod,容器可通过文件的方式使用Secret中的敏感数据。

1.2、创建Secret的两种方法

1.2.1、通过--from-literal创建Secret

bash 复制代码
#通过--from-literal创建Secret【每个--from-literal 对应一个信息条目】
#创建用户名为admin,密码是123456的Secret命令
kubectl create secret generic secretdemo1 --from-literal=username=admin --from-literal=password=123456

#查看当前所有的secret状态
kubectl get secret

#删除指定secret
kubectl delete secret secretdemo1

1.2.2、通过YAML配置文件创建Secret

注意:

  1. 之所以k8s的资源文件中data下的所有值,必须是Base64编码字符串编码;是因为K8s 用 data 存储二进制数据(图片、证书、特殊字符文本),Base64 是通用的二进制转文本格式,避免格式报错。
  2. ⚠️ 致命误区 :Base64 是可逆编码,不是加密!
bash 复制代码
#通过YAML配置文件创建Secret
#1-创建生成secret的资源文件secretdemo2.yml
#注意:k8s的资源文件中data下的所有值,必须是Base64编码字符串(如:【echo admin|base64】【echo 123456|base64】)
cat>secretdemo2.yml<<EOF
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
data:
  username: YWRtaW4K
  password: MTIzNDU2Cg==
EOF



#2-创建指定资源
kubectl apply -f secretdemo2.yml

#3-获取到当前所有的secret状态
kubectl get secret

#4-获取到指定secret的详细信息
kubectl describe secret mysecret

#5-获取到指定secret的敏感信息值
kubectl edit secret mysecret

#6-将获取到的敏感信息值通过base64反解码
echo MTIzNDU2Cg==|base64 --decode
echo YWRtaW4K|base64 --decode

二、在pod中使用secret

通过volume方式使用Secret,是最常见的做法,此外volume方式支持动态更新,也就是当Secret更新后,容器中的数据也会自动更新。

bash 复制代码
#在pod中使用secret
#1-创建使用secret的pod资源文件secret-pod.yml
cat>secret-pod.yml<<EOF
apiVersion: v1
kind: Pod
metadata:
  name: secret-pod
spec:
  containers:
  - name: secret-pod
    image: busybox
    args:
    - /bin/sh
    - -c
    - sleep 10; touch /tmp/check; sleep 30000
    volumeMounts:
    - name: secrets
      mountPath: /etc/secret
      readOnly: true
  volumes:
  - name: secrets
    secret:
      secretName: mysecret
EOF



#2-创建指定的资源
kubectl apply -f secret-pod.yml

#3-查看当前所有的pod状态详情
kubectl get pod -o wide

#4-查看当前所有的node状态详情
kubectl get node -o wide

#5-进入到该secret-pod资源中,并进入【/etc/secret/】下查看内容
kubectl exec -it secret-pod sh
cd /etc/secret/
more password
more username

#6-看看新的password会不会自动同步到容器中;
#在新开一个终端对mysecret内容修改(如:修改password的密码为qwer1234)修改完成后再次到secret-pod资源中,并进入【/etc/secret/】下查看password密码是否改变(改变则说明成功)
echo qwer1234|base64
vi secretdemo2.yml
kubectl apply -f secretdemo2.yml

从上图可以看到,K8s会在指定的路径/etc/secret下为每条敏感数据创建一个文件,文件名就是数据条目的Key,这里是/etc/secret/username和/etc/secret/password,Value则以明文存放在文件中。

三、ConfigMap的使用与配置

Secret可以为Pod提供密码、Token、私钥等敏感数据;而对于一些非敏感数据(如:应用的配置信息),则可以使用ConfigMap。ConfigMap的创建和使用方式与Secret非常类似,主要的不同是ConfigMap数据以明文的形式存放。

3.1、通过--from-literal创建ConfigMap

bash 复制代码
#通过--from-literal创建ConfigMap【每个 --from-literal 对应一个信息条目】
kubectl create configmap myconfigmap1 --from-literal=config1=abc --from-literal=config2=def

#查看当前所有的configmap状态
kubectl get configmap

#查看指定configmap的详细信息
kubectl describe configmap myconfigmap1

#编辑指定configmap的内容
kubectl edit configmap myconfigmap1

#删除指定的configmap
kubectl delete configmap myconfigmap1

3.2、通过 YAML 配置文件创建ConfigMap

bash 复制代码
#通过 YAML 配置文件创建ConfigMap
#1-创建configmap资源文件
cat>configmapdemo.yml<<EOF
apiVersion: v1
kind: ConfigMap
metadata:
  name: configmap-demo
data:
  sqlite: coffeemilk-sqlite.db
  basepath: /data/coffeemilk
EOF



#2-创建指定资源
kubectl apply -f configmapdemo.yml

#3-查看当前所有的configmap资源状态
kubectl get configmap

#4-查看指定configmap资源的详情
kubectl describe configmap configmap-demo

3.3、在pod中使用configmap

bash 复制代码
#在pod中使用configmap
#1-创建pod资源文件
cat>configmap-pod.yml<<EOF
apiVersion: v1
kind: Pod
metadata:
  name: configmap-pod
spec:
  containers:
     - name: app-pod
       image: busybox
       args:
       - /bin/sh
       - -c
       - sleep 10; touch /tmp/check; sleep 30000
       volumeMounts:
         - name: myconfigmap
           mountPath: /etc/config
           readOnly: true
  volumes:
     - name: myconfigmap
       configMap:
         name: configmap-demo
EOF



#2-创建指定的资源文件
kubectl apply -f configmap-pod.yml

#3-查看当前所有的pod状态详情
kubectl get pod -o wide

#4-进入指定configmap的pod中查看对应的configmap内容
kubectl exec -it configmap-pod sh
cd /etc/config/
more basepath
more sqlite
exit

#5-删除指定的pod与configmap
kubectl delete -f configmap-pod.yml
kubectl delete -f configmapdemo.yml 
相关推荐
雨辰AI4 小时前
K8s 数据库 Secret 加密实战|密码明文漏洞彻底修复,等保密评双合规(金仓 / 达梦双库适配)
数据库·容器·kubernetes
人间凡尔赛5 小时前
Kubernetes十周年:从Cloud Native到AI Native的架构范式跃迁
后端·云原生·架构
Elastic 中国社区官方博客5 小时前
一个字段,覆盖所有模态:Elasticsearch 的 semantic 字段如何自动索引和搜索图像、音频、视频和 PDF
大数据·数据库·elasticsearch·ai·云原生·pdf·全文检索
Chasing__Dreams5 小时前
Go 语言学习笔记
云原生·容器·kubernetes
聚搜云——JuSouClouD6 小时前
深圳阿里云代理商:K8s Pod OOM智能排查修复指南
阿里云·kubernetes·云计算
明王明王7 小时前
从零搭建一个单节点 K8S 可观测实验室(六):安装 Tempo + OpenTelemetry,构建链路追踪链路
云原生·容器·kubernetes
张毅2004-10-107 小时前
docker详解:安装docker,docker架构,docker镜像、容器、网络、存储,容器监控,容器日志,综合实验
linux·运维·docker·云原生·云计算
小狼嚎月7 小时前
K8s PV / PVC / StorageClass 有状态应用持久化
云原生·容器·kubernetes
AAA@峥8 小时前
K8s 资源混乱怎么办?Namespace 隔离 + 上下文切换实战
容器·贪心算法·kubernetes
重庆小透明8 小时前
深入探寻微服务【第一篇微服务的坏】
微服务·云原生·架构