内容预知
目录
数据卷使用configmap(挂载方式实现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.txt
kubectl create secret generic mysecret --from-file=/opt/username.txt --from-file=/opt/passwd.txt
kubectl 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: nginx
image: nginx:1.22
volumeMounts:
- name: secret
mountPath: "/etc/secrets"
readOnly: false
volumes:
- name: secrets
secret:
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: nginx
image: nginx:1.22
env:
- name: USER
valueFrom:
secretKeyRef:
name: mysecret1
key: username
- name: USER1
valueFrom:
secretKeyRef:
name: mysecret1
key: username1
我给nginx1.22这个容器里面传了两个环境变量,这两个变量的值从secret来,分别是两条mysecret1的加密信息。
wq
-------------------
进入容器观察
如何通过secret加密方式获取仓库密码
kubectl create secret docker-registry myharbor --docker-server=20.0.0.64 --docker-username=admin --docker-password=123456
kubectl describe secrets myharbor
apiVersion: v1
kind: Pod
metadata:
name: mypod2
spec:
containers:
- name: nginx1
image: hub.zzr.com/v1/nginx:zzr
imagePullSecrets:
- name: myharbor
nodeName: master01
wq
kubectl apply -f sec3.yaml
configmap的资源配置
保存的是不需要加密的信息。configmap是1.2引入的功能,应用程序会从配置文件,命令参数,以及环境变化中读取配置信息。
configmap在创建容器中,给他注入我们需要的配置信息。即可以是单个的属性也可以整个容器的配置文件。
陈述式创建configmap资源配置
cd /opt
mkdir configmap
cd configmap
vim game.txt
emo=123
kda=445
vim abc.txt
zzr=123
hj=456
kubectl 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: aaa
zzr: bbb
data里面要键值对形式
如何在pod引用?
apiVersion: v1
kind: Pod
metadata:
name: mypod2
spec:
containers:
- name: nginx1
image: nginx:1.22
env:
- name: USER1
valueFrom:
configMapKeyRef:
name: game
key: zzr
- name: USER2
valueFrom:
configMapKeyRef:
name: game
key: hj
数据卷使用configmap(挂载方式实现configmap)
cd /opt
mkdir nginx-configmap
cd nginx-configmap
vim nginx.conf
kubectl create configmap nginx-conf --from-file=/opt/nginx-configmap/nignx.conf
kubectl get cm
kubectl describe nginx-conf
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx1
labels:
app: nginx1
spec:
replicas: 3
selector:
matchLabels:
app: nginx1
template:
metadata:
labels:
app: nginx1
spec:
containers:
- name: nginx1
image: nginx:1.22
ports:
- containerPort: 8081
volumeMounts:
- name: nginx-config
mountPath: /etc/nginx
- name: nginx-mount
mountPath: /usr/share/nginx/html
volumes:
- name: nginx-config
configMap:
name: nginx-conf
- name: nginx-mount
hostPath:
path: /opt/html
type: DirectoryOrCreate
wq
由于configmap的热更新机制,可以直接对文件进行修改
kubectl edit cm nginx-conf
location
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是非加密信息。可以传递配置信息给容器