国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【云原生 | Kubernetes 系列】K8s 實戰(zhàn) 管理 Secret 詳解

這篇具有很好參考價值的文章主要介紹了【云原生 | Kubernetes 系列】K8s 實戰(zhàn) 管理 Secret 詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


前言

k8s secret實際應用,云原生,kubernetes,云原生,docker

Secret 是一種包含少量敏感信息例如密碼、令牌或密鑰的對象。 這樣的信息可能會被放在 Pod 規(guī)約中或者鏡像中。 用戶可以創(chuàng)建 Secret,同時系統(tǒng)也創(chuàng)建了一些 Secret。


一、使用 kubectl 管理 Secret

1.1、創(chuàng)建 Secret

一個 Secret 可以包含 Pod 訪問數(shù)據(jù)庫所需的用戶憑證。 例如,由用戶名和密碼組成的數(shù)據(jù)庫連接字符串。 你可以在本地計算機上,將用戶名存儲在文件 ./username.txt 中,將密碼存儲在文件 ./password.txt 中。

echo -n 'admin' > ./username.txt
echo -n '1f2d1e2e67df' > ./password.txt

在這些命令中,-n 標志確保生成的文件在文本末尾不包含額外的換行符。 這一點很重要,因為當 kubectl 讀取文件并將內容編碼為 base64 字符串時,多余的換行符也會被編碼。

kubectl create secret 命令將這些文件打包成一個 Secret 并在 API 服務器上創(chuàng)建對象。

$ kubectl create secret generic db-user-pass \
  --from-file=./username.txt \
  --from-file=./password.txt

輸出類似于:

secret/db-user-pass created

默認密鑰名稱是文件名。 可以使用 --from-file=[key=]source 來設置密鑰名稱。

例如:

$ kubectl create secret generic db-user-pass \
  --from-file=username=./username.txt \
  --from-file=password=./password.txt

不需要對文件中包含的密碼字符串中的特殊字符進行轉義。

還可以使用 --from-literal=<key>=<value> 標簽提供 Secret 數(shù)據(jù)。 可以多次使用此標簽,提供多個鍵值對。
需要注意,特殊字符(例如:$,\,*,= 和 !)由你的 shell 解釋執(zhí)行,而且需要轉義。

在大多數(shù) shell 中,轉義密碼最簡便的方法是用單引號括起來。 比如,如果你的密碼是 S!B\*d$zDsb=, 可以像下面一樣執(zhí)行命令:

$ kubectl create secret generic db-user-pass \
  --from-literal=username=devuser \
  --from-literal=password='S!B\*d$zDsb='

1.2、驗證 Secret

檢查 secret 是否已創(chuàng)建:

$ kubectl get secrets

輸出類似于:

NAME                  TYPE                                  DATA      AGE
db-user-pass          Opaque                                2         51s

你可以查看 Secret 的描述:

$ kubectl describe secrets/db-user-pass

輸出類似于:

Name:            db-user-pass
Namespace:       default
Labels:          <none>
Annotations:     <none>

Type:            Opaque

Data
====
password:    12 bytes
username:    5 bytes

kubectl getkubectl describe 命令默認不顯示 Secret 的內容。 這是為了防止 Secret 被意外暴露或存儲在終端日志中。

1.3、解碼 Secret

要查看創(chuàng)建的 Secret 的內容,運行以下命令:

$ kubectl get secret db-user-pass -o jsonpath='{.data}'

這里會輸出你的賬號和密碼,我就不貼了。

現(xiàn)在你可以解碼 password 的數(shù)據(jù):

# 這是一個用于文檔說明的示例。
# 如果你這樣做,數(shù)據(jù) 'MWYyZDFlMmU2N2Rm' 可以存儲在你的 shell 歷史中。
# 可以進入你電腦的人可以找到那個記住的命令并可以在你不知情的情況下 base-64 解碼這個 Secret。
# 通常最好將這些步驟結合起來,如頁面后面所示。
echo 'MWYyZDFlMmU2N2Rm' | base64 --decode

輸出類似于:

1f2d1e2e67df

為了避免在 shell 歷史記錄中存儲 Secret 的編碼值,可以執(zhí)行如下命令:

$ kubectl get secret db-user-pass -o jsonpath='{.data.password}' | base64 --decode

輸出應與上述類似。

1.4、清理

刪除創(chuàng)建的 Secret:

$ kubectl delete secret db-user-pass

二、使用配置文件管理 Secret

2.1、創(chuàng)建 Secret

你可以先用 JSON 或 YAML 格式在一個清單文件中定義 Secret 對象,然后創(chuàng)建該對象。 Secret 資源包含 2 個鍵值對:data 和 stringData。 data 字段用來存儲 base64 編碼的任意數(shù)據(jù)。 提供 stringData 字段是為了方便,它允許 Secret 使用未編碼的字符串。 data 和 stringData 的鍵必須由字母、數(shù)字、-、_ 或 . 組成。

我來使用 data 字段在 Secret 中存儲兩個字符串:

  1. 將這些字符串轉換為 base64:
echo -n 'admin' | base64
echo -n '1f2d1e2e67df' | base64

輸出類似于:

YWRtaW4=
MWYyZDFlMmU2N2Rm
  1. 創(chuàng)建清單:
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: YWRtaW4=
  password: MWYyZDFlMmU2N2Rm

Secret 對象的名稱必須是有效的 DNS 子域名。

  1. 使用 kubectl apply 創(chuàng)建 Secret:
$ kubectl apply -f ./secret.yaml

輸出類似于:

secret/mysecret created

2.2、創(chuàng)建 Secret 時提供未編碼的數(shù)據(jù)

對于某些場景,你可能希望使用 stringData 字段。 這個字段可以將一個非 base64 編碼的字符串直接放入 Secret 中, 當創(chuàng)建或更新該 Secret 時,此字段將被編碼。

上述用例的實際場景可能是這樣:當你部署應用時,使用 Secret 存儲配置文件, 你希望在部署過程中,填入部分內容到該配置文件。

如果你的應用程序使用以下配置文件:

apiUrl: "https://my.api.com/api/v1"
username: "<user>"
password: "<password>"

你可以使用以下定義將其存儲在 Secret 中:

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
stringData:
  config.yaml: |
    apiUrl: "https://my.api.com/api/v1"
    username: <user>
    password: <password>   

當你檢索 Secret 數(shù)據(jù)時,此命令將返回編碼的值,并不是你在 stringData 中提供的純文本值。

運行以下命令:

$ kubectl get secret mysecret -o yaml

輸出類似于:

apiVersion: v1
data:
  config.yaml: YXBpVXJsOiAiaHR0cHM6Ly9teS5hcGkuY29tL2FwaS92MSIKdXNlcm5hbWU6IHt7dXNlcm5hbWV9fQpwYXNzd29yZDoge3twYXNzd29yZH19
kind: Secret
metadata:
  creationTimestamp: 2018-11-15T20:40:59Z
  name: mysecret
  namespace: default
  resourceVersion: "7225"
  uid: c280ad2e-e916-11e8-98f2-025000000001
type:

2.3、同時指定 data 和 stringData

如果在 data 和 stringData 中設置了同一個字段,則使用來自 stringData 中的值。

可以定義以下 Secret:

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: YWRtaW4=
stringData:
  username: administrator

所創(chuàng)建的 Secret 對象如下:

apiVersion: v1
data:
  username: YWRtaW5pc3RyYXRvcg==
kind: Secret
metadata:
  creationTimestamp: 2018-11-15T20:46:46Z
  name: mysecret
  namespace: default
  resourceVersion: "7579"
  uid: 91460ecb-e917-11e8-98f2-025000000001
type: Opaque
YWRtaW5pc3RyYXRvcg== 解碼成 administrator。

2.4、清理

刪除你創(chuàng)建的 Secret:

$ kubectl delete secret mysecret

三、使用 Kustomize 管理 Secret

從 kubernetes v1.14 開始,kubectl 支持使用 Kustomize 管理對象。 Kustomize 提供了資源生成器(Generators)來創(chuàng)建 Secret 和 ConfigMap。 Kustomize 生成器應該在某個目錄的 kustomization.yaml 文件中指定。 生成 Secret 后,你可以使用 kubectl apply 在 API 服務器上創(chuàng)建該 Secret。

3.1、創(chuàng)建 Kustomization 文件

你可以在 kustomization.yaml 中定義 secreteGenerator 字段,并在定義中引用其它本地文件生成 Secret。 例如:下面的 kustomization 文件 引用了 ./username.txt./password.txt 文件:

secretGenerator:
- name: db-user-pass
  files:
  - username.txt
  - password.txt

你也可以在 kustomization.yaml 文件中指定一些字面量定義 secretGenerator 字段。 例如:下面的 kustomization.yaml 文件中包含了 username 和 password 兩個字面量:

secretGenerator:
- name: db-user-pass
  literals:
  - username=admin
  - password=1f2d1e2e67df

你也可以使用 .env 文件在 kustomization.yaml 中定義 secretGenerator。 例如:下面的 kustomization.yaml 文件從 .env.secret 文件獲取數(shù)據(jù)。

secretGenerator:
- name: db-user-pass
  envs:
  - .env.secret

注意,上面兩種情況,你都不需要使用 base64 編碼。

3.2、創(chuàng)建 Secret

在包含 kustomization.yaml 文件的目錄下使用 kubectl apply 命令創(chuàng)建 Secret。

$ kubectl apply -k .

輸出類似于:

secret/db-user-pass-96mffmfh4k created

請注意,生成 Secret 時,Secret 的名稱最終是由 name 字段和數(shù)據(jù)的哈希值拼接而成。 這將保證每次修改數(shù)據(jù)時生成一個新的 Secret。

3.3、檢查創(chuàng)建的 Secret

你可以檢查剛才創(chuàng)建的 Secret:

$ kubectl get secrets

輸出類似于:

NAME                             TYPE                                  DATA      AGE
db-user-pass-96mffmfh4k          Opaque                                2         51s

你可以看到 Secret 的描述:

$ kubectl describe secrets/db-user-pass-96mffmfh4k

輸出類似于:

Name:            db-user-pass-96mffmfh4k
Namespace:       default
Labels:          <none>
Annotations:     <none>

Type:            Opaque

Data
====
password.txt:    12 bytes
username.txt:    5 bytes

kubectl getkubectl describe 命令默認不顯示 Secret 的內容。 這是為了防止 Secret 被意外暴露給旁觀者或存儲在終端日志中。

3.5、清理

刪除你創(chuàng)建的 Secret:

$ kubectl delete secret db-user-pass-96mffmfh4k

總結

通過 API 創(chuàng)建的 Pod 時,不會檢查應用的 secret 是否存在。一旦 Pod 被調度,kubelet 就會嘗試獲取該 secret 的值。如果獲取不到該 secret,或者暫時無法與 API server 建立連接,kubelet 將會定期重試。Kubelet 將會報告關于 pod 的事件,并解釋它無法啟動的原因。一旦獲取的 secret,kubelet將創(chuàng)建并裝載一個包含它的卷。在安裝所有pod的卷之前,都不會啟動 pod 的容器。文章來源地址http://www.zghlxwxcb.cn/news/detail-783119.html

到了這里,關于【云原生 | Kubernetes 系列】K8s 實戰(zhàn) 管理 Secret 詳解的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包