一、ConfigMap
1、介紹
ConfigMap 是一種 API 對(duì)象,用來(lái)將非機(jī)密性的數(shù)據(jù)保存到鍵值對(duì)中。使用時(shí), Pods 可以將其用作環(huán)境變量、命令行參數(shù)或者存儲(chǔ)卷中的配置文件。
ConfigMap 將你的環(huán)境配置信息和 容器鏡像 解耦,便于應(yīng)用配置的修改。
注意:
ConfigMap 并不提供保密或者加密功能。 如果你想存儲(chǔ)的數(shù)據(jù)是機(jī)密的,請(qǐng)使用 Secret, 或者使用其他第三方工具來(lái)保證你的數(shù)據(jù)的私密性,而不是用 ConfigMap。
使用
你可以使用四種方式來(lái)使用 ConfigMap 配置 Pod 中的容器:
- 在容器命令和參數(shù)內(nèi)
- 容器的環(huán)境變量
- 在只讀卷里面添加一個(gè)文件,讓?xiě)?yīng)用來(lái)讀取
- 編寫(xiě)代碼在 Pod 中運(yùn)行,使用 Kubernetes API 來(lái)讀取 ConfigMap
這些不同的方法適用于不同的數(shù)據(jù)使用方式。 對(duì)前三個(gè)方法,kubelet 使用 ConfigMap 中的數(shù)據(jù)在 Pod 中啟動(dòng)容器。第四種方法意味著你必須編寫(xiě)代碼才能讀取 ConfigMap 和它的數(shù)據(jù)。
2、創(chuàng)建configmap
[root@master demo]# vi configMap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: test-config
data:
username: zhangsan
password: yuanke
username: lisi
[root@master demo]# kubectl create -f configMap.yaml
configmap/test-config created
[root@master demo]# vi configMap.yaml
[root@master demo]# kubectl get configMaps
NAME DATA AGE
test-config 2 45s
[root@master demo]# kubectl describe configmaps test-config
Name: test-config
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
password:
----
yuanke
username:
----
lisi
Events: <none>
3、使用configmap
vim test-configMap-env-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-configmap-env-pod
spec:
containers:
- name: test-container
image: radial/busyboxplus
imagePullPolicy: IfNotPresent
command: ["/bin/sh","-c","sleep 1000000"]
envFrom:
- configMapRef:
name: test-config
[root@master demo]# kubectl create -f test-configMap-env-pod.yaml
pod/test-configmap-env-pod created
[root@master demo]# kubectl get pod
NAME READY STATUS RESTARTS AGE
test-configmap-env-pod 1/1 Running 0 42s
[root@master demo]# kubectl exec -it test-configmap-env-pod -- env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=test-configmap-env-pod
TERM=xterm
username=lisi
password=yuanke
4、引入環(huán)境變量的另一種方式
apiVersion: v1
kind: Pod
metadata:
name: test-configmap-env-pod
spec:
containers:
- name: test-container
image: radial/busyboxplus
imagePullPolicy: IfNotPresent
command: ["/bin/sh","-c","echo ${MYSQLUSER} ${MYSQLPASSWD};sleep 1000000"]
env:
- name: MYSQLUSER
valueFrom:
configMapKeyRef:
name: test-config
key: username
- name: MYSQLPASSWD
valueFrom:
configMapKeyRef:
name: test-config
key: password
[root@master demo]# kubectl create -f test-configMap-env-pod.yaml
pod/test-configmap-env-pod created
[root@master demo]# kubectl get pod
NAME READY STATUS RESTARTS AGE
test-configmap-env-pod 1/1 Running 0 5s
[root@master demo]# kubectl exec -it test-configmap-env-pod -- env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=test-configmap-env-pod
TERM=xterm
MYSQLUSER=lisi
MYSQLPASSWD=yuanke
二、Secret
1、介紹
Secret 是一種包含少量敏感信息例如密碼、令牌或密鑰的對(duì)象。 這樣的信息可能會(huì)被放在 Pod 規(guī)約中或者鏡像中。 使用 Secret 意味著你不需要在應(yīng)用程序代碼中包含機(jī)密數(shù)據(jù)。
由于創(chuàng)建 Secret 可以獨(dú)立于使用它們的 Pod, 因此在創(chuàng)建、查看和編輯 Pod 的工作流程中暴露 Secret(及其數(shù)據(jù))的風(fēng)險(xiǎn)較小。 Kubernetes 和在集群中運(yùn)行的應(yīng)用程序也可以對(duì) Secret 采取額外的預(yù)防措施, 例如避免將機(jī)密數(shù)據(jù)寫(xiě)入非易失性存儲(chǔ)。
Secret 類(lèi)似于 ConfigMap 但專(zhuān)門(mén)用于保存機(jī)密數(shù)據(jù)。
注意:
默認(rèn)情況下,Kubernetes Secret 未加密地存儲(chǔ)在 API 服務(wù)器的底層數(shù)據(jù)存儲(chǔ)(etcd)中。 任何擁有 API 訪(fǎng)問(wèn)權(quán)限的人都可以檢索或修改 Secret,任何有權(quán)訪(fǎng)問(wèn) etcd 的人也可以。 此外,任何有權(quán)限在命名空間中創(chuàng)建 Pod 的人都可以使用該訪(fǎng)問(wèn)權(quán)限讀取該命名空間中的任何 Secret; 這包括間接訪(fǎng)問(wèn),例如創(chuàng)建 Deployment 的能力。
為了安全地使用 Secret,請(qǐng)至少執(zhí)行以下步驟:
- 為 Secret 啟用靜態(tài)加密。
- 以最小特權(quán)訪(fǎng)問(wèn) Secret 并啟用或配置 RBAC 規(guī)則。
- 限制 Secret 對(duì)特定容器的訪(fǎng)問(wèn)。
- 考慮使用外部 Secret 存儲(chǔ)驅(qū)動(dòng)。
Secret 的使用
Pod 可以用三種方式之一來(lái)使用 Secret:
- 作為掛載到一個(gè)或多個(gè)容器上的卷 中的文件。
- 作為容器的環(huán)境變量。
- 由 kubelet 在為 Pod 拉取鏡像時(shí)使用。
2、創(chuàng)建secret
您也可以先以 json 或 yaml 格式在文件中創(chuàng)建一個(gè) secret 對(duì)象,然后創(chuàng)建該對(duì)象。
每一項(xiàng)必須是 base64 編碼:
$ echo -n "admin" | base64
YWRtaW4=
$ echo -n "1f2d1e2e67df" | base64
MWYyZDFlMmU2N2Rm
解密:
echo 'YWRtaW4=' | base64 --decode
返回admin
vim secret-env.yaml
apiVersion: v1
kind: Secret
metadata:
name: mysecret-env
type: Opaque
data:
username: YWRtaW4=
password: MWYyZDFlMmU2N2Rm
[root@master demo]# kubectl create -f secret-env.yaml
secret/mysecret-env created
[root@master demo]# kubectl get secrets
NAME TYPE DATA AGE
default-token-mp2h9 kubernetes.io/service-account-token 3 21d
mysecret-env Opaque 2 10s
tls-secret kubernetes.io/tls 2 23h
3、使用secret
vim secret-pod-env1.yaml文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-461830.html
apiVersion: v1
kind: Pod
metadata:
name: envfrom-secret
spec:
containers:
- name: test-nginx
image: nginx
envFrom:
- secretRef:
name: mysecret-env
[root@master secret]# kubectl apply -f secret-pod-env1.yaml
pod/envfrom-secret created
[root@master secret]# kubectl get pod
NAME READY STATUS RESTARTS AGE
envfrom-secret 1/1 Running 0 16s
[root@master secret]# kubectl exec -it envfrom-secret -- env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=envfrom-secret
TERM=xterm
password=1f2d1e2e67df
username=admin
4、引入環(huán)境變量的另一種方式
vim secret-pod-env2.yaml文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-461830.html
apiVersion: v1
kind: Pod
metadata:
name: test-secret-env-pod
spec:
containers:
- name: test-container
image: radial/busyboxplus
imagePullPolicy: IfNotPresent
command: ["/bin/sh","-c","echo ${MYSQLUSER} ${MYSQLPASSWD};sleep 1000000"]
env:
- name: MYSQLUSER
valueFrom:
secretKeyRef:
name: mysecret-env
key: username
- name: MYSQLPASSWD
valueFrom:
secretKeyRef:
name: mysecret-env
key: password
[root@master secret]# kubectl apply -f secret-pod-env2.yaml
pod/test-secret-env-pod created
[root@master secret]# kubectl get pod
NAME READY STATUS RESTARTS AGE
test-secret-env-pod 1/1 Running 0 5s
[root@master secret]# kubectl exec -it test-secret-env-pod -- env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=test-secret-env-pod
TERM=xterm
MYSQLUSER=admin
MYSQLPASSWD=1f2d1e2e67df
到了這里,關(guān)于Linux高級(jí)---configmap和secret的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!