目錄
一、理論
1.Secret
2.Secret創(chuàng)建
3.Secret使用
4.Configmap
5.Configmap創(chuàng)建
6.Configmap使用
二、實(shí)驗(yàn)
1.Secret創(chuàng)建
2.Secret使用
3.Configmap創(chuàng)建
4.Configmap使用
三、問題
1.變量引用生成資源報錯
2.查看pod日志失敗
3.創(chuàng)建configmap報錯
4.YAML創(chuàng)建configmap報錯
5. 生成資源報錯
6.文件掛載pod報錯Error
四、總結(jié)
一、理論
1.Secret
(1) 概念
Secret 解決了密碼、token、秘鑰等敏感數(shù)據(jù)的配置問題,而不需要把這些敏感數(shù)據(jù)暴露到鏡像或者 Pod Spec 中。Secret 可以以 Volume 或者環(huán)境變量的方式使用。
Secret 是一種包含少量敏感信息例如密碼、令牌或密鑰的對象。 這樣的信息可能會被放在 Pod 規(guī)約中或者鏡像中。 使用 Secret 意味著你不需要在應(yīng)用程序代碼中包含機(jī)密數(shù)據(jù)。
由于創(chuàng)建 Secret 可以獨(dú)立于使用它們的 Pod, 因此在創(chuàng)建、查看和編輯 Pod 的工作流程中暴露 Secret(及其數(shù)據(jù))的風(fēng)險較小。 Kubernetes 和在集群中運(yùn)行的應(yīng)用程序也可以對 Secret 采取額外的預(yù)防措施, 例如避免將機(jī)密數(shù)據(jù)寫入非易失性存儲。
Secret 類似于?ConfigMap但專門用于保存機(jī)密數(shù)據(jù)。
(2)參數(shù)
secret 可選參數(shù)有三種:
1)generic: 通用類型,通常用于存儲密碼數(shù)據(jù)。
2)tls:此類型僅用于存儲私鑰和證書。
3)docker-registry: 若要保存 docker 倉庫的認(rèn)證信息的話,就必須使用此種類型來創(chuàng)建。
(3)類型
secret 常用類型:
1)Service Account:
用于被 serviceaccount 引用。serviceaccout 創(chuàng)建時 Kubernetes 會默認(rèn)創(chuàng)建對應(yīng)的 secret。Pod 如果使用了 serviceaccount,對應(yīng)的 secret 會自動掛載到 Pod的/run/secrets/kubernetes.io/serviceaccount 目錄中。
2)Opaque:
base64 編碼格式的 Secret,用來存儲密碼、秘鑰等??梢酝ㄟ^ base64 --decode 解碼獲得原始數(shù)據(jù),因此安全性弱。
3)kubernetes.io/dockerconfigjson:
用來存儲私有 docker registry 的認(rèn)證信息。
創(chuàng)建 Secret 時,你可以使用 Secret 資源的?type
?字段, 或者與其等價的?kubectl
?命令行參數(shù)(如果有的話)為其設(shè)置類型。 Secret 的?type
?有助于對不同類型機(jī)密數(shù)據(jù)的編程處理。
Kubernetes 提供若干種內(nèi)置的類型,用于一些常見的使用場景。 針對這些類型,Kubernetes 所執(zhí)行的合法性檢查操作以及對其所實(shí)施的限制各不相同。
內(nèi)置類型 | 用法 |
---|---|
Opaque |
用戶定義的任意數(shù)據(jù) |
kubernetes.io/service-account-token |
服務(wù)賬號令牌 |
kubernetes.io/dockercfg |
~/.dockercfg ?文件的序列化形式 |
kubernetes.io/dockerconfigjson |
~/.docker/config.json ?文件的序列化形式 |
kubernetes.io/basic-auth |
用于基本身份認(rèn)證的憑據(jù) |
kubernetes.io/ssh-auth |
用于 SSH 身份認(rèn)證的憑據(jù) |
kubernetes.io/tls |
用于 TLS 客戶端或者服務(wù)器端的數(shù)據(jù) |
bootstrap.kubernetes.io/token |
啟動引導(dǎo)令牌數(shù)據(jù) |
通過為 Secret 對象的?type
?字段設(shè)置一個非空的字符串值,你也可以定義并使用自己 Secret 類型。如果?type
?值為空字符串,則被視為?Opaque
?類型。 Kubernetes 并不對類型的名稱作任何限制。不過,如果你要使用內(nèi)置類型之一, 則你必須滿足為該類型所定義的所有要求。
2.Secret創(chuàng)建
(1)命令行創(chuàng)建
Secret的命令行創(chuàng)建方法與configmap一樣,可以通過命令行或者文件/目錄的方式創(chuàng)建,這里就不過多介紹,此處使用命名行創(chuàng)建,其它方法可以參照后面的方法進(jìn)行創(chuàng)建
把 mysql 的 root 用戶的 password 創(chuàng)建成 secret
kubectl create secret generic mysql-password --from-literal=password=xy123456
# 查看secret詳細(xì)信息
kubectl describe secret mysql-password
(2)YAML文件創(chuàng)建
通過手動加密,基于base64加密
echo -n 'admin' | base64
YWRtaW4=
echo -n 'xy123456' | base64
eHkxMjM0NTY=
創(chuàng)建YAML
vim secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: YWRtaW4=
password: eHkxMjM0NTY=
kubectl apply -f secret.yaml
kubectl get secret
kubectl describe secret mysecret
3.Secret使用
secret使用有2種方法
(1) 變量引用
vim secret-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: secretpod
spec:
containers:
- name: busybox
image: busybox
command: [ "/bin/sh","-c","echo $(SECRET_USERNAME) $(SECRET_PASSWORD)" ]
env:
- name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: mysecret
key: username
- name: SECRET_PASSWORD
valueFrom:
secretKeyRef:
name: mysecret
key: password
restartPolicy: Never
kubectl apply -f secret-pod.yaml
kubectl get pod
kubectl logs secretpod
(2)文件掛載
將 Secret 掛載到 Volume 中
vim pod_secret_volume.yaml
apiVersion: v1
kind: Pod
metadata:
name: secret-volume-pod
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: secret-volume
mountPath: "/etc/secret"
readOnly: true
volumes:
- name: secret-volume
secret:
secretName: mysecret
kubectl apply -f pod_secret_volume.yaml
kubectl get pod
kubectl exec -it secret-volume-pod /bin/bash
進(jìn)入pod可以看到/etc/secret下有password和username兩個文件,查看內(nèi)容和我們創(chuàng)建的secret內(nèi)容吻合。
kubectl exec -it secret-volume-pod /bin/bash
root@secret-volume-pod:/# cd /etc/secret
root@secret-volume-pod:/etc/secret# ls
password username
root@secret-volume-pod:/etc/secret# cat username
adminroot@secret-volume-pod:/etc/secret# cat password
xy123456root@secret-volume-pod:/etc/secret# exit
exit
4.Configmap
(1)概念
Configmap 是 k8s 中的資源對象,用于保存非機(jī)密性的配置的,數(shù)據(jù)可以用 key/value 鍵值對的形式保存,也可通過文件的形式保存。
ConfigMap來替代環(huán)境變量,ConfigMap可以被用來填入環(huán)境變量; configmap里面的信息讀入環(huán)境變量,而容器啟動的時候可以利用這些環(huán)境變量.
ConfigMap是以key:value的形式保存配置項(xiàng),既可以用于表示一個變量的值(例如config=info),也可以用于表示一個完整配置文件的內(nèi)容(例如server.xml=<?xml…>…)。
(2)作用
在部署服務(wù)的時候,每個服務(wù)都有自己的配置文件:
1)如果一臺服務(wù)器上部署多個服務(wù):nginx、tomcat、apache等,那么這些配置都存在這個節(jié)點(diǎn)上
2)假如一臺服務(wù)器不能滿足線上高并發(fā)的要求,需要對服務(wù)器擴(kuò)容,擴(kuò)容之后的服務(wù)器還是需要部署多個服務(wù):
3)nginx、tomcat、apache,新增加的服務(wù)器上還是要管理這些服務(wù)的配置
4)如果有一個服務(wù)出現(xiàn)問題,需要修改配置文件,每臺物理節(jié)點(diǎn)上的配置都需要修改,這種方式肯定滿足不了線上大批量的配置變更要求
所以,k8s 中引入了 Configmap資源對象,可以當(dāng)成 volume 掛載到 pod 中,實(shí)現(xiàn)統(tǒng)一的配置管理。
(3)特點(diǎn)
1)Configmap 是 k8s 中的資源, 相當(dāng)于配置文件,可以有一個或者多個 Configmap;
2)Configmap 可以做成 Volume,k8s pod 啟動之后,通過 volume 形式映射到容器內(nèi)部指定目錄上;
3)容器中應(yīng)用程序按照原有方式讀取容器特定目錄上的配置文件;
4)在容器看來,配置文件就像是打包在容器內(nèi)部特定目錄,整個過程對應(yīng)用沒有任何侵入。
(4)結(jié)構(gòu)
5.Configmap創(chuàng)建
configmap創(chuàng)建有二種方式,
一是命令行方式,分為從字面讀?。?-from-literal)和從目錄(--from-file)讀取。
二是yaml方式。
(1)?命令行直接創(chuàng)建
直接在命令行中指定 configmap 參數(shù)創(chuàng)建,通過**–from-literal** 指定參數(shù)
#創(chuàng)建
kubectl create configmap nginx-config --from-literal=nginx_port=80 --from-literal=server_name=nginx
#查看configmap
kubectl describe configmap nginx-config
(2)通過文件/目錄創(chuàng)建
通過指定文件創(chuàng)建一個 configmap,–from-file=<文件/目錄>
vim nginx.conf
server {
server_name www.nginx.com;
listen 80;
root /home/nginx/www/
}
通過指定文件創(chuàng)建
kubectl create configmap www-nginx --from-file=www=/opt/config/nginx.conf
kubectl describe configmap www-nginx
?通過目錄創(chuàng)建
當(dāng)某些服務(wù)存在多個配置文件時,放在同一目錄下,我們可以指定目錄,進(jìn)行創(chuàng)建
kubectl create configmap www-nginx2 --from-file=/opt/config/
kubectl describe configmap www-nginx2
(3)YAML創(chuàng)建
vim nginx_conf.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-conf
labels:
app: nginx-conf
data:
nginx.conf: |
server {
server_name www.nginx.com;
listen 80;
root /home/nginx/www/
}
6.Configmap使用
(1)新創(chuàng)一個configmap用于測試
apiVersion: v1
kind: ConfigMap
metadata:
name: test
labels:
app: test
data:
xy: "xuexi"
hw: "hello world"
kubectl apply -f test.yaml
(2)變量引入
創(chuàng)建一個pod,引用configmap
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: busybox
image: busybox
command: [ "/bin/sh", "-c", "echo $(LEVEL) $(TYPE)" ]
env:
- name: LEVEL
valueFrom:
configMapKeyRef:
name: test
key: xy
- name: TYPE
valueFrom:
configMapKeyRef:
name: test
key: hw
restartPolicy: Never
kubectl apply -f pod-configmap.yaml
kubectl get pod
kubectl logs mypod
(3)文件掛載?
apiVersion: v1
kind: Pod
metadata:
name: mypod1
spec:
containers:
- name: busybox
image: busybox
command: [ "/bin/sh","-c","cat /etc/config/hi" ]
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: test
restartPolicy: Never
#創(chuàng)建pod
kubectl apply -f cm.yaml
#查看pod日志
kubectl logs mypod1
二、實(shí)驗(yàn)
1.Secret創(chuàng)建
(1)命令行創(chuàng)建
把 mysql 的 root 用戶的 password 創(chuàng)建成 secret
密文類型威Opaque,查詢不會顯示password的值
(2)YAML文件創(chuàng)建
通過手動加密,基于base64加密
創(chuàng)建YAML
生成資源
查看信息
2.Secret使用
(1)變量引用
生成資源
查看信息
(2)文件掛載
將 Secret 掛載到 Volume 中
生成資源
查看信息
進(jìn)入pod可以看到/etc/secret下有password和username兩個文件,查看內(nèi)容和我們創(chuàng)建的secret內(nèi)容吻合。
3.Configmap創(chuàng)建
?(1)?命令行直接創(chuàng)建
直接在命令行中指定 configmap 參數(shù)創(chuàng)建,通過**–from-literal** 指定參數(shù)
(2)通過文件/目錄創(chuàng)建
通過指定文件創(chuàng)建一個 configmap,–from-file=<文件/目錄>
通過指定文件創(chuàng)建
?通過目錄創(chuàng)建
當(dāng)某些服務(wù)存在多個配置文件時,放在同一目錄下,我們可以指定目錄,進(jìn)行創(chuàng)建
(3)YAML創(chuàng)建
生成資源
查看信息
4.Configmap使用
?(1)新創(chuàng)一個configmap用于測試
生成資源
(2)變量引入
創(chuàng)建一個pod,引用configmap
輸出2個變量,用于測試
LEVEL:定義pod容器內(nèi)的變量
test為configmap的名稱
xw為tes中的key
(3)文件掛載?
"cat /etc/config/hi"輸出test配置種的key為hw的值
掛載在pod內(nèi)容器的位置: /etc/config
test為configmap的名稱
啟動pod并查看pod日志
三、問題
1.變量引用生成資源報錯
(1)報錯
(2)原因分析
資源類型錯誤
(3)解決方法
修改前:
修改后:
成功:
2.查看pod日志失敗
(1)報錯
(2)原因分析
pod還在創(chuàng)建,未啟動
(3)解決方法
等待幾秒,再次查看
3.創(chuàng)建configmap報錯
(1)報錯
(2)原因分析
文件名已存在
(3)解決方法
刪除已存在文件
4.YAML創(chuàng)建configmap報錯
(1)報錯
(2)原因分析
配置文件錯誤
(3)解決方法
修改前:
修改后:
5. 生成資源報錯
(1)報錯
(2)原因分析
配置文件錯誤
(3)解決方法
配置文件關(guān)鍵詞“ConfigMap”,添加 “|”
修改前:
修改后:
成功:
6.文件掛載pod報錯Error
(1)報錯
(2)原因分析
配置文件錯誤
(3)解決方法
修改配置文件
修改前:
修改后:
成功
四、總結(jié)
使用secret的基本流程:
1.創(chuàng)建k8s集群
2.創(chuàng)建管理的文件
3.驗(yàn)證
4.解碼
5.清理
configmap創(chuàng)建有二種方式,文章來源:http://www.zghlxwxcb.cn/news/detail-729608.html
一是命令行方式,分為從字面讀?。?-from-literal)和從目錄(--from-file)讀取。
下面是二者區(qū)別:
1. --from-literal從字面讀取的好處就是快速和便捷,你可以通過關(guān)鍵字參數(shù)的形式(**kargs),將配置信息直接傳遞至configmap,然后在pod啟動的時候進(jìn)行加載;同時這個方式的弊端就是,變量不能實(shí)時更新到pod容器。
2. ? --from-file從目錄讀取的好處可以實(shí)時更新到pod容器。
二是yaml方式。
在容器看來,配置文件就像是打包在容器內(nèi)部特定目錄,整個過程對應(yīng)用沒有任何侵入。文章來源地址http://www.zghlxwxcb.cn/news/detail-729608.html
到了這里,關(guān)于云原生Kubernetes:K8S配置資源管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!