Secret
Secret用來保存密碼、token密鑰以及一些敏感的k8s資源。這類數(shù)據(jù)雖然可以存放在鏡像當中,但是放在secret當中可以更方便控制。減少暴露的風險。
Secret的作用:保存加密的信息
Secret的類型
docker-registry()主要用于存儲docker倉庫的認證信息,以及docker組件認證信息。(私有)
generic(jienairuike)是Secret的默認模式。類型是Qpaque。是base64加密編碼的secret。用于用戶自定義的密碼、密鑰等等。
tls表示TLS/SSL,用于存儲證書和密鑰、存儲https證書和密鑰隊
系統(tǒng)自建的:kubernetes.io/service-account-token來訪問系統(tǒng)的apiserver。pod會默認使用kubernetes.io/service-account-token創(chuàng)建的secret和apiserver進行通信。自動掛載到pod的/run/serect/kubernetes.io/service-account
如何創(chuàng)建secret?
1、指定文件提取信息
陳述式的創(chuàng)建方式:
#創(chuàng)建命令
kubectl create secret generic mysecret --from-file=/opt/xiao.txt --from-file=/opt/xiaobu.txt
#查看有哪些secret文件
kubectl get secrets
NAME TYPE DATA AGE
default-token-sgjrp kubernetes.io/service-account-token 3 18d
mysecret Opaque 2 11s
nfs-client-provisioner-token-rlg96 kubernetes.io/service-account-token 3 20h
#查看指定secret的詳細信息
kubectl describe secrets mysecret
Name: mysecret
Namespace: default
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
xiao.txt: 4 bytes
xiaobu.txt: 4 bytes
#以base64的加密方式生成文件內(nèi)部數(shù)據(jù)
echo xiaobu.txt | base64
echo xiao.txt | base64
陳述式需要指定資源創(chuàng)建
默認類型的加密方式:Opaque加密類型
聲明式的創(chuàng)建方式:
apiVersion: v1
kind: Secret
metadata:
name: mysecret1
type:
Opaque
data:
xiaobu: eGlhb2J1LnR4dAo=
xiao: eGlhby50eHQK
data內(nèi)保存的是加密的內(nèi)容
pod如何來引用Secret?
1、 掛載方式。將secret掛載到pod當中的一個或者多個容器上的卷里面。
2、 把secret作為容器的環(huán)境變量
3、 docker-registry可以作為集群拉取鏡像時使用。使用secret可以實現(xiàn)免密登錄。
掛載的方式來實現(xiàn)
實驗舉例:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: nginx
image: nginx:1.22
volumeMounts:
- name: secrets
mountPath: "/etc/secret"
readOnly: false
volumes:
- name: secrets
secret:
secretName: mysecret
#將創(chuàng)建好的mysecret加密內(nèi)容和容器內(nèi)的指定目錄進行掛載
執(zhí)行命令
kubectl apply -f sercet.yaml
進入容器
kubectl exec -it mypod bash
查看掛載目錄
root@mypod:/# cd /etc/secret/
root@mypod:/etc/secret# ls
xiao.txt xiaobu.txt
root@mypod:/etc/secret# cat xiao.txt
123
root@mypod:/etc/secret# cat xiaobu.txt
456
保存內(nèi)容是加密內(nèi)容,容器內(nèi)部可以解密直接引用。
把secret作為容器的環(huán)境變量
[root@master01 opt]# echo 小布 | base64
5bCP5biDCg==
[root@master01 opt]# echo 小凱 | base64
5bCP5YevCg==
創(chuàng)建secret
apiVersion: v1
kind: Secret
metadata:
name: mysecret1
type:
Opaque
data:
xiaobu: 5bCP5biDCg==
xiaokai: 5bCP5YevCg==
創(chuàng)建pod
apiVersion: v1
kind: Pod
metadata:
name: mypod1
spec:
containers:
- name: nginx
image: nginx:1.22
env:
- name: USER
valueFrom:
secretKeyRef:
name: mysecret1
key: xiaobu
- name: USER1
valueFrom:
secretKeyRef:
name: mysecret1
key: xiaokai
#我給nginx1.22這個容器里面?zhèn)鲀蓚€環(huán)境變量,這兩個變量的值從secret來,分別是兩條mysecret1的加密信息
進入容器查看
root@mypod1:/# env
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_SERVICE_PORT=443
HOSTNAME=mypod1
PWD=/
PKG_RELEASE=1~bullseye
HOME=/root
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
USER1=小凱
NJS_VERSION=0.7.11
TERM=xterm
USER=小布
SHLVL=1
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP_PORT=443
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
NGINX_VERSION=1.22.1
_=/usr/bin/env
docker-registry
kubectl create secret docker-registry myharbor --docker-server=20.0.0.73 --docker-username=admin --docker-password=123456
apiVersion: v1
kind: Pod
metadata:
name: mypod2
spec:
containers:
- name: nginx1
image: hub.test.com/library/nginx:v1
imagePullSecrets:
- name: myharbor
nodeName: node02
kubectl get pod
NAME READY STATUS RESTARTS AGE
mypod 1/1 Running 0 83m
mypod1 1/1 Running 0 73m
mypod2 1/1 Running 0 39s
nfs-provisioner-cbbfd74c8-5tr7r 1/1 Running 0 22h
nginx1-68c5d494c9-9zwhd 1/1 Running 0 103m
nginx1-68c5d494c9-bbbds 1/1 Running 0 103m
nginx1-68c5d494c9-mg8ms 1/1 Running 0 103m
secret三種方式:
陳述式創(chuàng)建
聲明式
引用方式:
掛載使用
設定環(huán)境變量
docker-registry
ConfigMap
保存的是不需要加密的信息。configmap是1.2引用的功能,應用程序會配置文件,命令參數(shù)。以及環(huán)境變量中讀取信息。
通過configmap在創(chuàng)建容器時,給他注入我們需要的配置信息。既可以是單個的屬性也可也是整個文件的配置文件。
陳述式
kubectl create configmap person --from-file=/opt/configmap/xiaobu.txt --from-file=/opt/configmap/xiaokai.txt
ubectl describe cm person
Name: person
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
xiaobu.txt:
----
xiaobu=....
xiaokai=gao
xiaokai.txt:
----
xiao=bu
xiao=kai
Events: <none>
指定文件創(chuàng)建,可以是一個,也可以是多個。
kubectl create configmap person1 --from-literal=xiaobu=bu --from-literal=xiaokai=kai
[root@master01 opt]# kubectl get cm
NAME DATA AGE
kube-root-ca.crt 1 18d
person 2 2m28s
person1 2 6s
聲明式
apiVersion: v1
kind: ConfigMap
metadata:
name: person
data:
xiaobu: bu
xiaokai: kai
#configmap是鍵值對形式
kubectl describe cm person
Name: person
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
xiaobu:
----
bu
xiaokai:
----
kai
Events: <none>
引用方式
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: nginx
image: nginx:1.22
env:
- name: USER1
valueFrom:
configMapKeyRef:
name: person
key: xiaobu
- name: USER2
valueFrom:
configMapKeyRef:
name: person
key: xiaokai
kubectl get pod
NAME READY STATUS RESTARTS AGE
mypod 1/1 Running 0 6s
nfs-provisioner-cbbfd74c8-5tr7r 1/1 Running 0 22h
進入容器查看
root@mypod:/# env
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_SERVICE_PORT=443
HOSTNAME=mypod
PWD=/
PKG_RELEASE=1~bullseye
HOME=/root
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
USER1=bu
USER2=kai
NJS_VERSION=0.7.11
TERM=xterm
SHLVL=1
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP_PORT=443
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
NGINX_VERSION=1.22.1
_=/usr/bin/env
掛載的方式
數(shù)據(jù)卷使用comfigmap
準備一個nginx.conf的配置文件
worker_processes 2;
events {
worker_connections 1024;
}
http {
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8081;
server_name localhost;
charset utf-8;
location / {
root html;
index index.html index.htm;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
}
kubectl create configmap nginx-con --from-file=/opt/configmap/nginx.conf
創(chuàng)建yaml文件
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-con
- name: nginx-mount
hostPath:
path: /opt/html
type: DirectoryOrCreate
訪問不了,出現(xiàn)404,可能是訪問頁面路徑不對
修改訪問路徑之后
kubectl patch deployment nginx1 --patch '{"spec": {"template":{"metadata": {"annotations": {"version/config": "20240116"}}}}}'
curl 10.244.0.42:8081
123
熱更新的特點:
1、 通過數(shù)據(jù)卷的形式將配置文件傳給pod內(nèi)的容器
2、 在pod運行的情況下對configmap的配置信息進行修改。直接生效反應到容器當中。
熱更新pod不會重啟。如果有pod有副本都會一并更改。
3、 configmap的熱更新不會觸發(fā)pod的滾動更新機制。
version/config觸發(fā)滾動更新機制
kubectal patch deployment nginx1 --path '{"spec": {"template":{"metadata": {"annotations": {"version/config": "20240116"}}}}}'
通過命令觸發(fā)pod滾動更新,將pod重新拉起,將修改過的configmap重新傳遞給pod內(nèi)重新拉起的容器。
secret:主要作用是保存加密文件。使用的方式就是掛載方式。
configMap:把配置信息傳遞給容器。主要使用方式也是掛載。
configMap的熱更新:熱更新可以直接反應到容器的內(nèi)部。也不會觸發(fā)pod的更新機制。如果不是需要重啟的配置。都可以直接生效。
可以通過version/config的方式來觸發(fā)滾動更新機制
需要重啟的,可以重啟pod
更新:就是把配置信息重新傳遞到容器內(nèi)。重啟也是一樣的。
在工作中configMap就是將配置信息傳遞給容器。通過鍵值對形式保存的非加密信息。
secret和configMap的區(qū)別
secret是加密的信息。文章來源:http://www.zghlxwxcb.cn/news/detail-797309.html
configMap是非加密信息??梢詡鬟f配置信息給容器文章來源地址http://www.zghlxwxcb.cn/news/detail-797309.html
到了這里,關(guān)于k8s的配置資源管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!