secret | 保存密码,token,敏感的k8s资源 |
configmap(重点) | 1.2加入的新特征 这类数据可以存放在镜像当中,但是放在secret当中可以更方便的控制,减少暴露的风险,保存加密的信息 |
secret的类型
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/kubernets.io/serviceaccount. |
[root@master01 k8s]# kubectl get secret
NAME TYPE DATA AGE
default-token-zf8fj kubernetes.io/service-account-token 3 18d
nfs-client-provisioner-token-b5z8s kubernetes.io/service-account-token 3 3d21h
#查看secret中的加密信息
pod引用secret:三种方式
1 | 挂载的方式,secret挂载到pod当中的一个或者多个容器上的卷里面 |
2 | 把secret作为容器的环境变量 |
3 | Docker-registry 可以作为集群拉取镜像时的使用,使用secret可以实现免密登录 |
secret创建方式
陈述式
[root@master01 opt]# kubectl create secret generic mysecret --from-file=/opt/username.txt --from-file=/opt/password.txt
secret/mysecret created
#指定文件提取信息,generic:默认类型,opaque加密类型 ,--from-file=/opt/username.txt 从指定文件获取需要加密的信息
[root@master01 k8s]# kubectl get secrets
NAME TYPE DATA AGE
default-token-zf8fj kubernetes.io/service-account-token 3 19d
mysecret Opaque 2 80m
mysecret1 Opaque 2 7m22s
nfs-client-provisioner-token-b5z8s kubernetes.io/service-account-token 3 4d1h
#查看有哪些secrets
[root@master01 k8s]# kubectl describe secrets mysecret
Name: mysecret
Namespace: default
Labels: <none>
Annotations: <none>Type: OpaqueData
====
password.txt: 4 bytes
username.txt: 3 bytes
#查看secret详细信息[root@master01 k8s]# echo username.txt | base64
dXNlcm5hbWUudHh0Cg==
[root@master01 k8s]# echo password.txt | base64
cGFzc3dvcmQudHh0Cg==
#以64加密方式加密声明式
[root@master01 opt]# echo passwd.txt | base64
cGFzc3dkLnR4dAo=
[root@master01 opt]# echo username.txt | base64
dXNlcm5hbWUudHh0Cg==
#将格式转换为64加密方式[root@master01 k8s]# kubectl explain secret
KIND: Secret
VERSION: v1
#看一下secret的格式apiVersion: v1
kind: Secret
metadata:name: mysecret1
type:Opaque
data:username: dXNlcm5hbWUudHh0Cg==password: cGFzc3dkLnR4dAo=
#先要创建secret#挂载的方式实现
apiVersion: v1
kind: Pod
metadata:name: mypod
spec:containers:- name: nginximage: nginx:1.22volumeMounts:- name: secretsmountPath: "/etc/secrets"readOnly: falsevolumes:- name: secretssecret:secretName: mysecret1[root@master01 k8s]# kubectl exec -it mypod bash
root@mypod:/etc/secrets# cd /etc/secrets/
root@mypod:/etc/secrets# ls
password username
root@mypod:/etc/secrets# cat password
passwd.txt
保存的内容是加密内容,容器内部可以解密直接引用例2[root@master01 k8s]# kubectl create secret generic mysecret2 --from-file=/etc/passwd --from-file=/etc/shadowapiVersion: v1
kind: Secret
metadata:name: mysecret1
type:Opaque
data:username: MTIzCg==password: NDU2Cg==apiVersion: v1
kind: Pod
metadata:name: mypod
spec:containers:- name: nginximage: nginx:1.22volumeMounts:- name: secretsmountPath: "/etc/secrets"readOnly: falsevolumes:- name: secretssecret:secretName: mysecret2[root@master01 k8s]# kubectl exec -it mypod bash
root@mypod:/# cd /etc/secrets/
root@mypod:/etc/secrets# ls
passwd shadow
root@mypod:/etc/secrets# cat passwd
把secret作为容器的环境变量
[root@master01 k8s]# echo 123 | base64
MTIzCg==
[root@master01 k8s]# echo 456 | base64
NDU2Cg==#创建secret
apiVersion: v1
kind: Secret
metadata:name: mysecret1
type:Opaque
data:username: MTIzCg==password: NDU2Cg==创建podapiVersion: v1
kind: Pod
metadata:name: mypod1
spec:containers:- name: nginximage: nginx:1.22env:- name: USERvalueFrom:secretKeyRef:name: mysecret1
#这里的name指的是secret的名称。
#表示需要用哪个secret来赋值给USERkey: username- name: USER1valueFrom:secretKeyRef:name: mysecret1key: username1
#给nginx:1.22这个容器里面传了两个环境变量。这两个变量的值从secret来。分别是两条mysecret1的加密信息
docker-registry
kubectl create secret docker-registry myharbor --docker-server=20.0.0.36 --docker-username=admin --docker-password=123456
#创建docker-registry。指向harbur仓库的IP主机以及账号密码kubectl describe secrets myharbor
#查看docker-registry的详细信息apiVersion: v1
kind: Pod
metadata:name: mypod2
spec:containers:- name: nginx2image: hub.test.com/library/nginx:v1imagePullSecrets:- name: myharbornodeName: node01
#指定node不走调度策略
ConfigMap
保存的是不需要加密的信息,configmap是1.2引入的功能,应用程序会从配置文件,命令行参数,以及环境变量中读取配置信息,通过configmap在创建容器中,给它注入我们需要的配置信息,既可以是单个的属性,也可以使整个容器的配置文件 |
configmap的创建方式
1.陈述式
2.声明式
kubectl create configmap game --from-file=/opt/configmap/123.txt --from-file=/opt/configmap/456.txt
#创建configmapkubectl get cm
#查看configmap有多少个
kubectl describe cm game
#查看指定configmap的详细信息
#指定文件创建,可以是一个,也可以是多个
声明式
apiVersion: v1
kind: ConfigMap
metadata:name: bqb
data:gq: shuaiwdf: shua
#configmap是键值对形式。一个键对应一个值kubectl describe cm game
#查看详细信息
引用方式
apiVersion: v1
kind: Pod
metadata:name: mypod2
spec:containers:- name: nginx2image: nginx:1.22env:- name: USER1valueFrom:configMapKeyRef:name: et
#这里的name是configmap的名称key: tyu- name: USER2valueFrom:conigfMapKeyRef:name: etkey: tyu
挂载的方式
数据卷使用comfigmapkubectl create configmap nginx-con --from-file=/opt/configmap/nginx.conf
#创建yaml文件
使用version/config触发滚动更新机制
kubectl patch deployment nginx1 --patch '{"spec": {"template":{"metadata": {"annotations": {"version/config": "20240116"}}}}}'
数据卷使用configMap
可以通过命令verion Secret:主要是用来保存加密文件,主要的使用方式就是挂载 ConfigMap:主要作用是把配置信息传给容器,主要方式也是挂载方式 ConfigMap的热更新:热更新可以直接反映到容器的内部,也不会触发pod的更新机制,如果不是需要重启的配置,都可以直接生效 Version/config来触发滚动更新 kubectl patch deployments.apps nginx1 --patch '{"spec": {"template": {"metadata": {"annotations": {"version/confgi": "20240116"}}}}}' Config和20240116可以自定义 需要重启,可以重启pod 更新: 就是把配置信息重新传到容器内,重启也是一样 ConfigMap:就是把配置信息传给容器,键值对形式保存的,非加密的信息,为什么重要? |