摘要:目前只支持使用來(lái)自于的。現(xiàn)在我們能創(chuàng)建使用這個(gè)的當(dāng)這個(gè)中的運(yùn)行后,將會(huì)有如下兩個(gè)文件及對(duì)應(yīng)的內(nèi)容現(xiàn)在可以用這個(gè)數(shù)據(jù)來(lái)建立連接。
在kubernetes中,secret對(duì)象類型主要目的是 保存一些私密數(shù)據(jù),比如密碼,OAuth tokens,ssh keys等信息。將這些信息放在secret對(duì)象中 比 直接放在pod或docker image中更安全,也更方便使用。
secrets描述創(chuàng)建secrets對(duì)象的方式有兩種,一種是用戶手動(dòng)創(chuàng)建,另一種是集群自動(dòng)創(chuàng)建。
一個(gè)已經(jīng)創(chuàng)建好的secrets對(duì)象有兩種方式被pod對(duì)象使用,其一,在container中的volume對(duì)象里以file的形式被使用,其二,在pull images時(shí)被kubelet使用。
為了使用secret對(duì)象,pod必須‘引用’這個(gè)secret,同樣可以手動(dòng)或者自動(dòng)來(lái)執(zhí)行‘引用’操作。
自動(dòng)建立ServiceAccount && 使用secret APIkubernetes會(huì)自動(dòng)創(chuàng)建包含證書(shū)信息的secret,并且使用它來(lái)訪問(wèn)api,kubernetes也將自動(dòng)修改pod來(lái)使用這個(gè)secret。
自動(dòng)創(chuàng)建的secret 以及 所使用的api證書(shū) 可以根據(jù)需要disable 或者 覆蓋。如果僅僅需要 安全訪問(wèn)apiserver,那么上述的流程是推薦的方式。
手動(dòng)創(chuàng)建secret以下是一個(gè)簡(jiǎn)單secret對(duì)象的例子:
apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque data: password: dmFsdWUtMg0K username: dmFsdWUtMQ0K
數(shù)據(jù)中的字段為map類型。其中keys必須符合dns_subdomain規(guī)則,values可以為任意類型,使用base64編碼。上述例子中,username和password的數(shù)據(jù)值在base64編碼前的值為value-1 和 value-2。
一旦secret被創(chuàng)建,可以:
通過(guò)ServiceAccount使用它自動(dòng)創(chuàng)建pod;
修改pod來(lái)使用secret;
手動(dòng)為pod綁定secret以下是一個(gè)例子,綁定secret到一個(gè)pod的volume:
{ "apiVersion": "v1", "kind": "Pod", "metadata": { "name": "mypod", "namespace": "myns" }, "spec": { "containers": [{ "name": "mypod", "image": "redis", "volumeMounts": [{ "name": "foo", "mountPath": "/etc/foo", "readOnly": true }] }], "volumes": [{ "name": "foo", "secret": { "secretName": "mysecret" } }] } }
注意,必須有spec.volumes才能使用secret。
如果一個(gè)pod中有多個(gè)container,每個(gè)container需要他們多帶帶對(duì)應(yīng)的volumeMounts ,但是一個(gè)secret只能對(duì)應(yīng)一個(gè)spec.volumes。
只要需要,可以將許多文件打包進(jìn)一個(gè)secret,或者使用多個(gè)secret。
手動(dòng)指定imagePullSecret詳細(xì)信息見(jiàn):images documentation
Details 限制在使用之前,secret volume 資源被驗(yàn)證,以確保指定的對(duì)象引用真是指向一個(gè)secret對(duì)象。因此,在pod使用它之前必須保證需要的secret被成功創(chuàng)建。
secret api對(duì)象從屬于namespace,一個(gè)secret對(duì)象只能被同namespace的pod所使用。
單個(gè)secret限制在1Mb之內(nèi),防止過(guò)大的secret耗盡apiserver & kubelet的內(nèi)存。然而,創(chuàng)建許多類似的secret同樣也會(huì)無(wú)用的消耗掉apiserver&kubelet的內(nèi)存。
kubelet目前只支持pod使用來(lái)自于apiserver的secret。pods包括了被 kubectl創(chuàng)建的pod 或者 被replication controller間接創(chuàng)建的。
Consuming Secret Values在一個(gè)綁定了secret的container中,會(huì)以secret keys為名的文件,其內(nèi)容為secret value的base64 decode后的內(nèi)容。下面是上述例子的輸出:
$ ls /etc/foo/ username password $ cat /etc/foo/username value-1 $ cat /etc/foo/password value-2
container中的程序可以讀取其中的文件來(lái)獲取其內(nèi)容。
Secret 與 Pod Lifetime 關(guān)系當(dāng)通過(guò)api創(chuàng)建一個(gè)pod后,不會(huì)去檢查所引用的secret是否存在。一旦這個(gè)pod被使用,kubelet將會(huì)嘗試去獲取引用的secret的值。如果這個(gè)secret不存在,或者kubelet暫時(shí)鏈接不上apiserver,kubelet將會(huì)定期重試,并發(fā)送一個(gè)event來(lái)解釋pod沒(méi)有啟動(dòng)的原因。如果獲取到了對(duì)應(yīng)的secret,kubelet將會(huì)創(chuàng)建對(duì)應(yīng)的volume并綁定到container。
一旦kubelet創(chuàng)建了一個(gè)pod,則container使用的相關(guān)secret volume不會(huì)在改變,即使對(duì)應(yīng)的secret對(duì)象被修改。如果為了改變使用的secret,則必須刪除舊的pod,并重新創(chuàng)建一個(gè)新的pod。
User Case Use-Case: Pod with ssh keyspod通過(guò)secret來(lái)使用ssh-key,首先得先創(chuàng)建對(duì)應(yīng)的secret:
{ "kind": "Secret", "apiVersion": "v1", "metadata": { "name": "ssh-key-secret" }, "data": { "id-rsa": "dmFsdWUtMg0KDQo=", "id-rsa.pub": "dmFsdWUtMQ0K" } }
Note:其中secret的data數(shù)據(jù)經(jīng)過(guò)base64編碼,不包含換行符。
現(xiàn)在我們能創(chuàng)建使用這個(gè)secret的pod:
{ "kind": "Pod", "apiVersion": "v1", "metadata": { "name": "secret-test-pod", "labels": { "name": "secret-test" } }, "spec": { "volumes": [ { "name": "secret-volume", "secret": { "secretName": "ssh-key-secret" } } ], "containers": [ { "name": "ssh-test-container", "image": "mySshImage", "volumeMounts": [ { "name": "secret-volume", "readOnly": true, "mountPath": "/etc/secret-volume" } ] } ] } }
當(dāng)這個(gè)pod中的container運(yùn)行后,將會(huì)有如下兩個(gè)文件及對(duì)應(yīng)的內(nèi)容:
/etc/secret-volume/id-rsa.pub /etc/secret-volume/id-rsa
現(xiàn)在container可以用這個(gè)secret數(shù)據(jù)來(lái)建立ssh連接。
Use-Case: Pods with prod / test credentials下面的例子將會(huì)展示 一個(gè)pod使用包含prod環(huán)境證書(shū)的secret對(duì)象,另一個(gè)pod使用包含test環(huán)境證書(shū)的secret對(duì)象:
secret對(duì)象:
{ "apiVersion": "v1", "kind": "List", "items": [{ "kind": "Secret", "apiVersion": "v1", "metadata": { "name": "prod-db-secret" }, "data": { "password": "dmFsdWUtMg0KDQo=", "username": "dmFsdWUtMQ0K" } }, { "kind": "Secret", "apiVersion": "v1", "metadata": { "name": "test-db-secret" }, "data": { "password": "dmFsdWUtMg0KDQo=", "username": "dmFsdWUtMQ0K" } }] }
建立pods:
{ "apiVersion": "v1", "kind": "List", "items": [{ "kind": "Pod", "apiVersion": "v1", "metadata": { "name": "prod-db-client-pod", "labels": { "name": "prod-db-client" } }, "spec": { "volumes": [ { "name": "secret-volume", "secret": { "secretName": "prod-db-secret" } } ], "containers": [ { "name": "db-client-container", "image": "myClientImage", "volumeMounts": [ { "name": "secret-volume", "readOnly": true, "mountPath": "/etc/secret-volume" } ] } ] } }, { "kind": "Pod", "apiVersion": "v1", "metadata": { "name": "test-db-client-pod", "labels": { "name": "test-db-client" } }, "spec": { "volumes": [ { "name": "secret-volume", "secret": { "secretName": "test-db-secret" } } ], "containers": [ { "name": "db-client-container", "image": "myClientImage", "volumeMounts": [ { "name": "secret-volume", "readOnly": true, "mountPath": "/etc/secret-volume" } ] } ] } }] }
建立的兩個(gè)pod都擁有兩個(gè)文件:
/etc/secret-volume/username /etc/secret-volume/password
可以使用service accounts來(lái)簡(jiǎn)化上述的流程,一個(gè)是prod-user對(duì)應(yīng)prod-db-secret,另一個(gè)是test-user對(duì)應(yīng)test-db-secret,如:
{ "kind": "Pod", "apiVersion": "v1", "metadata": { "name": "prod-db-client-pod", "labels": { "name": "prod-db-client" } }, "spec": { "serviceAccount": "prod-db-client", "containers": [ { "name": "db-client-container", "image": "myClientImage", } ] }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/32435.html
摘要:嘗試運(yùn)行腳本發(fā)生了的錯(cuò)誤。錯(cuò)誤信息接下來(lái)就是,天的調(diào)查,關(guān)于這個(gè)錯(cuò)誤的能查到的資料幾乎沒(méi)有,也嘗試了很多方法,無(wú)果非常煎熬。問(wèn)題解決了參考文檔初試使用完成持續(xù)構(gòu)建與發(fā)布集群安全配置 背景 為了使用Kubernetes管理并自動(dòng)化部署應(yīng)用程序,領(lǐng)導(dǎo)糾結(jié)了幾個(gè)同事搭了一個(gè)Kubernetes集群環(huán)境。不過(guò),為了減少?gòu)?fù)雜度,采用了非官方推薦的方式: API Server使用http方式 不...
摘要:前言在安裝搭建的時(shí)候,往往會(huì)遇到各種各樣的問(wèn)題,而安裝的展示組件則是困難中的困難,本人在實(shí)際搭建中則被整整卡住了天,和百度輪番搜索,各種技術(shù)博客和技術(shù)視頻反復(fù)研究才勉強(qiáng)搭建成功開(kāi)始安裝在安裝好集群之后,確保集群各個(gè)節(jié)點(diǎn)都處于狀態(tài)的時(shí)候,就 前言 在安裝搭建k8s的時(shí)候,往往會(huì)遇到各種各樣的問(wèn)題,而安裝k8s的web展示組件kubernetes-dashboard則是困難中的困難,本人在...
摘要:前言在安裝搭建的時(shí)候,往往會(huì)遇到各種各樣的問(wèn)題,而安裝的展示組件則是困難中的困難,本人在實(shí)際搭建中則被整整卡住了天,和百度輪番搜索,各種技術(shù)博客和技術(shù)視頻反復(fù)研究才勉強(qiáng)搭建成功開(kāi)始安裝在安裝好集群之后,確保集群各個(gè)節(jié)點(diǎn)都處于狀態(tài)的時(shí)候,就 前言 在安裝搭建k8s的時(shí)候,往往會(huì)遇到各種各樣的問(wèn)題,而安裝k8s的web展示組件kubernetes-dashboard則是困難中的困難,本人在...
摘要:開(kāi)始部署項(xiàng)目地址創(chuàng)建證書(shū)創(chuàng)建命名空間創(chuàng)建文件證書(shū)請(qǐng)求自簽證書(shū),指定證書(shū)的有效期天數(shù)。賦權(quán),并復(fù)制,并登錄換成你環(huán)境的即可 開(kāi)始部署Gitlab 項(xiàng)目地址:https://github.com/kubernetes/dashboard1) 創(chuàng)建證書(shū):mkdir dashboard-certscd dashboard-cert...
摘要:本文介紹了模型中四個(gè)最主要的對(duì)象,即,大致了解了的工作原理和使用方法,如果要更加深入地了解和掌握,可以查看官方文檔。只是這個(gè)不能復(fù)用到其他,一般只有在做精細(xì)化權(quán)限管理的時(shí)候,我們才會(huì)創(chuàng)建對(duì)象,比如一個(gè)只能查看名稱為的。了解RBAC簡(jiǎn)介RBAC是一種基于角色來(lái)管理對(duì)計(jì)算機(jī)或網(wǎng)絡(luò)資源訪問(wèn)策略的方法。我們知道,對(duì)K8S內(nèi)所有API對(duì)象的操作都是通過(guò)訪問(wèn)kube-apiserver來(lái)完成的,因此ku...
閱讀 1180·2021-11-25 09:43
閱讀 1490·2021-11-18 10:02
閱讀 1971·2021-11-02 14:41
閱讀 2523·2019-08-30 15:55
閱讀 1137·2019-08-29 16:18
閱讀 2643·2019-08-29 14:15
閱讀 1465·2019-08-26 18:13
閱讀 852·2019-08-26 10:27