内容预知
目录
内容预知
secret资源配置
secert的几种模式
pod如何来引用secret
陈述式创建secret
声明式+base64编码配置secret
将secret用vlumes的方式挂载到pod中
传参的方式将环境变量导入pod
如何通过secret加密方式获取仓库密码
configmap的资源配置
陈述式创建configmap资源配置
声明式配置configmap资源
如何在pod引用?
数据卷使用configmap(挂载方式实现configmap)
configmap的热更新
总结
secret和configMap的区别
secret资源配置
Secret 是用来保存密码、token、密钥等敏感数据的 k8s 资源,这类数据虽然也可以存放在 Pod 或者镜像中,但是放在 Secret 中是为了更方便的控制如何使用数据,并减少暴露的风险。
secert的几种模式
[root@master01 opt]# kubectl create secret
docker-registry generic tls docker-registry:存储docker仓库认证信息,以及docker组件认证信息。(私有)generic:是secret的默认模式,Opaque base64 加密编码的secret。用户自定义密码,密钥等等。 tls:TLS/SSL 用于存储证书和私钥,https系统自建:kubernetes.io/service-account-token用来访问系统的apiserver。pod会默认使用这个kubernetes.io/service-account-token创建的secret和apiserver通信。自动挂载到pod的/run/secret/kubernetes.io/service-account
pod如何来引用secret
3种方式:
- 1.挂载方式,secret挂载到pod当中的一个或者多个容器上的卷 里面。
- 2.把secret作为容器的环境变量
- 3.docker-registry可以作为集群拉取镜像时使用。使用secret可以实现免密登录。
陈述式创建secret
echo "zzr" > username.txt
echo "123" > passwd.txtkubectl create secret generic mysecret --from-file=/opt/username.txt --from-file=/opt/passwd.txtkubectl get sercet默认类型的加密方式: Opaque
声明式+base64编码配置secret
echo username.txt | base64
echo password.txt | base64
apiVersion: v1
kind: Secret
metadata:name: mysecret
type:Opaque
data:username: dXNlcm5hbWUudHh0Cg==passwd: cGFzc3dkLnR4dAo=
将secret用vlumes的方式挂载到pod中
apiVersion: v1
kind: Pod
metadata:name: mypod
spec:containers:- name: nginximage: nginx:1.22volumeMounts:- name: secretmountPath: "/etc/secrets"readOnly: falsevolumes:- name: secretssecret:secretName: mysecret1
传参的方式将环境变量导入pod
-----------创建mysecret1---------------------
echo username.txt | base64
echo username1.txt | base64
vim sec.yaml
apiVersion: v1
kind: Secret
metadata:name: mysecret1
type:Opaque
data:username: dXNlcm5hbWUudHh0Cg==username1: dXNlcm5hbWUxLnR4dAo=
wq
------------创建完毕-------------------------------------将环境变量引入-----------------------apiVersion: v1
kind: Pod
metadata:name: mypod
spec:containers:- name: nginximage: nginx:1.22env:- name: USERvalueFrom:secretKeyRef:name: mysecret1key: username- name: USER1valueFrom:secretKeyRef:name: mysecret1key: username1我给nginx1.22这个容器里面传了两个环境变量,这两个变量的值从secret来,分别是两条mysecret1的加密信息。
wq
-------------------
进入容器观察
如何通过secret加密方式获取仓库密码
kubectl create secret docker-registry myharbor --docker-server=20.0.0.64 --docker-username=admin --docker-password=123456kubectl describe secrets myharbor
apiVersion: v1
kind: Pod
metadata:name: mypod2
spec:containers:- name: nginx1image: hub.zzr.com/v1/nginx:zzrimagePullSecrets:- name: myharbornodeName: master01wq
kubectl apply -f sec3.yaml
configmap的资源配置
保存的是不需要加密的信息。configmap是1.2引入的功能,应用程序会从配置文件,命令参数,以及环境变化中读取配置信息。
configmap在创建容器中,给他注入我们需要的配置信息。即可以是单个的属性也可以整个容器的配置文件。
陈述式创建configmap资源配置
cd /opt
mkdir configmap
cd configmapvim game.txt
emo=123
kda=445vim abc.txt
zzr=123
hj=456kubectl create configmap game --from-file=/opt/configmap/game.txt --from-file=/opt/configmap/abc.txt
声明式配置configmap资源
apiVerdion: v1
kind: ConfigMap
metadata:name: game
data:hj: aaazzr: bbb
data里面要键值对形式
如何在pod引用?
apiVersion: v1
kind: Pod
metadata:name: mypod2
spec:containers:- name: nginx1image: nginx:1.22env:- name: USER1valueFrom:configMapKeyRef:name: gamekey: zzr- name: USER2valueFrom:configMapKeyRef:name: gamekey: hj
数据卷使用configmap(挂载方式实现configmap)
cd /opt
mkdir nginx-configmap
cd nginx-configmapvim nginx.conf
kubectl create configmap nginx-conf --from-file=/opt/nginx-configmap/nignx.confkubectl get cm
kubectl describe nginx-conf
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx1labels:app: nginx1
spec:replicas: 3selector:matchLabels:app: nginx1template:metadata:labels:app: nginx1spec:containers:- name: nginx1image: nginx:1.22ports:- containerPort: 8081volumeMounts:- name: nginx-configmountPath: /etc/nginx- name: nginx-mountmountPath: /usr/share/nginx/htmlvolumes:- name: nginx-configconfigMap:name: nginx-conf- name: nginx-mounthostPath:path: /opt/htmltype: DirectoryOrCreatewq
由于configmap的热更新机制,可以直接对文件进行修改
kubectl edit cm nginx-conflocation
root /usr/share/nginx/html
kubectl patch deployments.apps nginx1 --patch '{"spec": {"template": {"metadata": {"annotations": {"version/confgi": "20240116"}}}}}'更新完配置文件重启更新
configmap的热更新
1.我们通过数据卷的形式,把配置文件传给了pod内部容器。
2.config的热更新,在pod运行的情况下,对configmap的配置信息进行修改,直接生效(反应到容器当中)
3.configmap的热更新不会触发pod的滚动更新机制(deployment)
version/config来触发滚动更新。
kubectl patch deployments.apps nginx1 --patch '{"spec": {"template": {"metadata": {"annotations": {"version/config": "20240116"}}}}}'kubectl get pod
总结
secert:主要作用是保存加密文件,主要的使用方式就是挂载方式
comfigmap:把配置信息传给容器。主要方式也是挂载方式。
configmap的热更新:热更新可以直接反应到容器的内部,也不会触发pod的更新机制。如果不是需要重启的配置,都可以直接生效
version/config来触发热更新
需要重启的,可以重启pod
在工作中configMap就是将配置信息传递给容器。通过键值对形式保存的非加密信息。
更新:就是把配置信息重新传到容器内,重启也是一样。
secret和configMap的区别
secret是加密的信息。
configMap是非加密信息。可以传递配置信息给容器