kubernetes中Secret如何使用-創(chuàng)新互聯(lián)

小編給大家分享一下kubernetes中Secret如何使用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

創(chuàng)新互聯(lián)建站成立與2013年,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都做網(wǎng)站、網(wǎng)站制作網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元東港做網(wǎng)站,已為上家服務(wù),為東港各地企業(yè)和個人服務(wù),聯(lián)系電話:028-86922220

一: 簡介
Secret 可以作為數(shù)據(jù)卷被掛載,或作為環(huán)境變量暴露出來以供 pod 中的容器使用。它們也可以被系統(tǒng)的其他部分使用,而不直接暴露在 pod 內(nèi)。例如,它們可以保存憑據(jù),系統(tǒng)的其他部分應(yīng)該用它來代表您與外部系統(tǒng)進(jìn)行交互。

Secret舉例:

  1. apiVersion: v1

  2. kind: Secret

  3. metadata:

  4.   name: mysecret

  5. type: Opaque

  6. data:

  7.   username: YWRtaW4=

  8.   password: MWYyZDFlMmU2N2Rm


二:在 Pod 中使用 Secret 文件

1.創(chuàng)建一個 secret 或者使用已有的 secret。多個 pod 可以引用同一個 secret。

2.修改您的 pod 的定義在 spec.volumes[] 下增加一個 volume??梢越o這個 volume 隨意命名,它的 spec.volumes[].secret.secretName 必須等于 secret 對象的名字。

3.將 spec.containers[].volumeMounts[] 加到需要用到該 secret 的容器中。指定 spec.containers[].volumeMounts[].readOnly = true 和 spec.containers[].volumeMounts[].mountPath 為您想要該 secret 出現(xiàn)的尚未使用的目錄。

4.修改您的鏡像并且/或者命令行讓程序從該目錄下尋找文件。Secret 的 data 映射中的每一個鍵都成為了 mountPath 下的一個文件名。

  1. apiVersion: v1

  2. kind: Pod

  3. metadata:

  4.   name: mypod

  5. spec:

  6.   containers:

  7.   - name: mypod

  8.     image: redis

  9.     volumeMounts:

  10.     - name: foo

  11.       mountPath: "/etc/foo"

  12.       readOnly: true

  13.   volumes:

  14.   - name: foo

  15.     secret:

  16.       secretName: mysecret

您想要用的每個 secret 都需要在 spec.volumes 中指明。如果 pod 中有多個容器,每個容器都需要自己的 volumeMounts 配置塊,但是每個 secret 只需要一個 spec.volumes。
您可以打包多個文件到一個 secret 中,或者使用的多個 secret,怎樣方便就怎樣來.

三:向特性路徑映射 secret 密鑰

我們還可以控制 Secret key 映射在 volume 中的路徑。您可以使用 spec.volumes[].secret.items 字段修改每個 key 的目標(biāo)路徑:

  1. apiVersion: v1

  2. kind: Pod

  3. metadata:

  4.   name: mypod

  5. spec:

  6.   containers:

  7.   - name: mypod

  8.     image: redis

  9.     volumeMounts:

  10.     - name: foo

  11.       mountPath: "/etc/foo"

  12.       readOnly: true

  13.   volumes:

  14.   - name: foo

  15.     secret:

  16.       secretName: mysecret

  17.       items:

  18.       - key: username

  19.         path: my-group/my-username

1.username secret 存儲在 /etc/foo/my-group/my-username 文件中而不是 /etc/foo/username 中。
2.password secret 沒有被影射

如果使用了 spec.volumes[].secret.items,只有在 items 中指定的 key 被影射。要使用 secret 中所有的 key,所有這些都必須列在 items 字段中。所有列出的密鑰必須存在于相應(yīng)的 secret 中。否則,不會創(chuàng)建卷。

四:Secret 文件權(quán)限
您還可以指定 secret 將擁有的權(quán)限模式位文件。如果不指定,默認(rèn)使用 0644。您可以為整個保密卷指定默認(rèn)模式,如果需要,可以覆蓋每個密鑰。

  1. apiVersion: v1

  2. kind: Pod

  3. metadata:

  4.   name: mypod

  5. spec:

  6.   containers:

  7.   - name: mypod

  8.     image: redis

  9.     volumeMounts:

  10.     - name: foo

  11.       mountPath: "/etc/foo"

  12.   volumes:

  13.   - name: foo

  14.     secret:

  15.       secretName: mysecret

  16.       defaultMode: 256

然后,secret 將被掛載到 /etc/foo 目錄,所有通過該 secret volume 掛載創(chuàng)建的文件的權(quán)限都是 0400。
請注意,JSON 規(guī)范不支持八進(jìn)制符號,因此使用 256 值作為 0400 權(quán)限。如果您使用 yaml 而不是 json 作為 pod,則可以使用八進(jìn)制符號以更自然的方式指定權(quán)限。

五:從 Volume 中消費 secret 值
在掛載的 secret volume 的容器內(nèi),secret key 將作為文件,并且 secret 的值使用 base-64 解碼并存儲在這些文件中。這是在上面的示例容器內(nèi)執(zhí)行的命令的結(jié)果:

  1. $ ls /etc/foo/

  2. username

  3. password

  4. $ cat /etc/foo/username

  5. admin

  6. $ cat /etc/foo/password

  7. 1f2d1e2e67df

六:掛載的 secret 被自動更新
當(dāng)已經(jīng)在 volume 中消被消費的 secret 被更新時,被映射的 key 也將被更新。Kubelet 在周期性同步時檢查被掛載的 secret 是不是最新的。但是,它正在使用其基于本地 ttl 的緩存來獲取當(dāng)前的 secret 值。結(jié)果是,當(dāng) secret 被更新的時刻到將新的 secret 映射到 pod 的時刻的總延遲可以與 kubelet 中的secret 緩存的 kubelet sync period + ttl 一樣長。

七:Secret 作為環(huán)境變量
1.創(chuàng)建一個 secret 或者使用一個已存在的 secret。多個 pod 可以引用同一個 secret。
2.在每個容器中修改您想要使用 secret key 的 Pod 定義,為要使用的每個 secret key 添加一個環(huán)境變量。消費secret key 的環(huán)境變量應(yīng)填充 secret 的名稱,并鍵入 env[x].valueFrom.secretKeyRef。
3.修改鏡像或者命令行,以便程序在指定的環(huán)境變量中查找值。

  1. apiVersion: v1

  2. kind: Pod

  3. metadata:

  4.   name: secret-env-pod

  5. spec:

  6.   containers:

  7.   - name: mycontainer

  8.     image: redis

  9.     env:

  10.       - name: SECRET_USERNAME

  11.         valueFrom:

  12.           secretKeyRef:

  13.             name: mysecret

  14.             key: username

  15.       - name: SECRET_PASSWORD

  16.         valueFrom:

  17.           secretKeyRef:

  18.             name: mysecret

  19.             key: password

  20.   restartPolicy: Never

八:消費環(huán)境變量里的 Secret 值
在一個消耗環(huán)境變量 secret 的容器中,secret key 作為包含 secret 數(shù)據(jù)的 base-64 解碼值的常規(guī)環(huán)境變量。這是從上面的示例在容器內(nèi)執(zhí)行的命令的結(jié)果:

  1. $ echo $SECRET_USERNAME

  2. admin

  3. $ echo $SECRET_PASSWORD

  4. 1f2d1e2e67df

九:使用 imagePullSecret
imagePullSecret 是將包含 Docker(或其他)鏡像注冊表密碼的 secret 傳遞給 Kubelet 的一種方式,因此可以代表您的 pod 拉取私有鏡像。

十:使用Secret的限制
1.驗證 secret volume 來源確保指定的對象引用實際上指向一個類型為 Secret 的對象。因此,需要在依賴于它的任何 pod 之前創(chuàng)建一個 secret。
2.Secret API 對象駐留在命名空間中。它們只能由同一命名空間中的 pod 引用。
3.每個 secret 的大小限制為1MB。這是為了防止創(chuàng)建非常大的 secret 會耗盡 apiserver 和 kubelet 的內(nèi)存。然而,創(chuàng)建許多較小的 secret 也可能耗盡內(nèi)存。更全面得限制 secret 對內(nèi)存使用的更全面的限制是計劃中的功能。
4.Kubelet 僅支持從 API server 獲取的 Pod 使用 secret。這包括使用 kubectl 創(chuàng)建的任何 pod,或間接通過 replication controller 創(chuàng)建的 pod。它不包括通過 kubelet --manifest-url 標(biāo)志,其 --config 標(biāo)志或其 REST API 創(chuàng)建的pod(這些不是創(chuàng)建 pod 的常用方法)。
5.必須先創(chuàng)建 secret,除非將它們標(biāo)記為可選項,否則必須在將其作為環(huán)境變量在 pod 中使用之前創(chuàng)建 secret。對不存在的 secret 的引用將阻止其啟動。
6.通過 secretKeyRef 對不存在于命名的 key 中的 key 進(jìn)行引用將阻止該啟動。
7.用于通過 envFrom 填充環(huán)境變量的 secret,這些環(huán)境變量具有被認(rèn)為是無效環(huán)境變量名稱的 key 將跳過這些鍵。該 pod 將被允許啟動。將會有一個事件,其原因是 InvalidVariableNames,該消息將包含被跳過的無效鍵的列表。該示例顯示一個 pod,它指的是包含2個無效鍵,1badkey 和 2alsobad 的默認(rèn)/mysecret ConfigMap。

十一: Secret 與 Pod 生命周期的聯(lián)系
通過 API 創(chuàng)建的 Pod 時,不會檢查應(yīng)用的 secret 是否存在。一旦 Pod 被調(diào)度,kubelet 就會嘗試獲取該 secret 的值。如果獲取不到該 secret,或者暫時無法與 API server 建立連接,kubelet 將會定期重試。Kubelet 將會報告關(guān)于 pod 的事件,并解釋它無法啟動的原因。一旦獲取的 secret,kubelet將創(chuàng)建并裝載一個包含它的卷。在安裝所有pod的卷之前,都不會啟動 pod 的容器。

以上是“kubernetes中Secret如何使用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道!

分享名稱:kubernetes中Secret如何使用-創(chuàng)新互聯(lián)
標(biāo)題來源:http://muchs.cn/article10/cdshdo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站電子商務(wù)、網(wǎng)站設(shè)計、用戶體驗、服務(wù)器托管、虛擬主機(jī)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)