這篇文章主要介紹kubernetes中Service Account與Secret的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
成都創(chuàng)新互聯(lián)公司長期為成百上千客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為沐川企業(yè)提供專業(yè)的成都網(wǎng)站制作、網(wǎng)站建設(shè),沐川網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
一:Service Account與Secret數(shù)據(jù)結(jié)構(gòu)
二:Service Account與Secret運(yùn)行機(jī)制
1.kubernetes的master節(jié)點(diǎn)由三部分組成kube-apiserver,kube-scheduler和kube-controller-manager。其中controller manager會根據(jù)apiserver的配置信息(--admission-control和--service-account-private-key-file),生成ServiceAccount controller 和token controller.
2.ServiceAccount controller一直監(jiān)聽Service Account和Namespace事件。如果一個(gè)Namespace中沒有default
Service Account,那么Service Account
Controller就會為該Namespace創(chuàng)建一個(gè)默認(rèn)的(default)的Service
Account。
3.Token Controller也監(jiān)聽Service
Account的事件,如果發(fā)現(xiàn)新建的Service Account里沒有對應(yīng)的Service
Account Secret,則會用API Server私鑰(--service-account-private-key-file指定的文件)創(chuàng)建一個(gè)Token(JWT
Token),并用該Token、CA證書(這個(gè)是API Server的CA公鑰證書,來源于controller-manager配置文件中的root-ca-file),Namespace名稱等三個(gè)信息產(chǎn)生一個(gè)新的Secret對象,然后放入剛才的Service
Account中;如果監(jiān)聽到的事件是刪除Service Account事件,則自動刪除與該Service
Account相關(guān)的所有Secret。此外,Token
Controller對象同時(shí)監(jiān)聽Secret的創(chuàng)建、修改和刪除事件,并根據(jù)事件的不同做不同的處理。
4.API Server收到Token以后,采用自己的私鑰(實(shí)際是使用apiserver配置文件中的參數(shù)service-account-key-file指定的私鑰,如果此參數(shù)沒有設(shè)置,則默認(rèn)采用tls-private-key-file指定的參數(shù),即自己的私鑰)對Token進(jìn)行合法驗(yàn)證。
三:Service Account相關(guān)概念
1.
Service Account概念的引入是基于這樣的使用場景:運(yùn)行在pod里的進(jìn)程需要調(diào)用Kubernetes
API以及非Kubernetes
API的其它服務(wù)。Service
Account它并不是給kubernetes集群的用戶使用的,而是給pod里面的進(jìn)程使用的,它為pod提供必要的身份認(rèn)證。
2. 如果kubernetes開啟了ServiceAccount(apiserver配置文件)那么會在每個(gè)namespace下面都會創(chuàng)建一個(gè)默認(rèn)的default的service account。
3.ServiceAccount詳情
4.當(dāng)創(chuàng)建pod的時(shí)候,如果沒有指定一個(gè)service account,系統(tǒng)會自動在該pod所在的namespace下為其指派一個(gè)default service account.
a. 如果spec.serviceAccount域沒有被設(shè)置,則Kubernetes默認(rèn)為其制定名字為default的Serviceaccount;
b. 如果Pod的spec.serviceAccount域指定了default以外的ServiceAccount,而該ServiceAccount沒有事先被創(chuàng)建,則該P(yáng)od操作失敗;
c. 如果在Pod中沒有指定“ImagePullSecrets”,那么該sec.serviceAccount域指定的ServiceAccount的“ImagePullSecrets”會被加入該P(yáng)od;
d.
給Pod添加一個(gè)新的Volume,在該Volume中包含ServiceAccountSecret中的Token,并將Volume掛載到Pod中所有容器的指定目錄下(/var/run/secrets/kubernetes.io/serviceaccount);
四:Secret相關(guān)概念
1.Secret解決了密碼、token、密鑰等敏感數(shù)據(jù)的配置問題,而不需要把這些敏感數(shù)據(jù)暴露到鏡像或者Pod Spec中。Secret可以以Volume或者環(huán)境變量的方式使用。
2.Secret有三種類型:
·Service Account:用來訪問Kubernetes API,由Kubernetes自動創(chuàng)建,并且會自動掛載到Pod的/run/secrets/kubernetes.io/serviceaccount目錄中;
·Opaque:base64編碼格式的Secret,用來存儲密碼、密鑰等;
·kubernetes.io/dockerconfigjson:用來存儲私有docker registry的認(rèn)證信息。
我們可以通過Secret保管其它系統(tǒng)的敏感信息,并以Mount的方式將Secret掛載到Container中,然后通過訪問目錄中文件的方式獲取該敏感信息。當(dāng)Pod被API Server創(chuàng)建時(shí),API Server不會校驗(yàn)該P(yáng)od引用的Secret是否存在。一旦這個(gè)Pod被調(diào)用,則kubelet將試著獲取Secret的值,如果Secret不存在或者暫時(shí)無法連接到API Server,則kubelet將按一定的時(shí)間間隔定期重試獲取Secret. 為了使用更新后的secret,必須刪除舊的Pod,并重新創(chuàng)建一個(gè)新的Pod.
以上是“kubernetes中Service Account與Secret的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!