您好,登錄后才能下訂單哦!
這篇文章主要介紹kubernetes中Service Account與Secret的示例分析,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!
一:Service Account與Secret數(shù)據(jù)結(jié)構(gòu)
二:Service Account與Secret運行機制
1.kubernetes的master節(jié)點由三部分組成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事件。如果一個Namespace中沒有default
Service Account,那么Service Account
Controller就會為該Namespace創(chuàng)建一個默認(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)建一個Token(JWT
Token),并用該Token、CA證書(這個是API Server的CA公鑰證書,來源于controller-manager配置文件中的root-ca-file),Namespace名稱等三個信息產(chǎn)生一個新的Secret對象,然后放入剛才的Service
Account中;如果監(jiān)聽到的事件是刪除Service Account事件,則自動刪除與該Service
Account相關(guān)的所有Secret。此外,Token
Controller對象同時監(jiān)聽Secret的創(chuàng)建、修改和刪除事件,并根據(jù)事件的不同做不同的處理。
4.API Server收到Token以后,采用自己的私鑰(實際是使用apiserver配置文件中的參數(shù)service-account-key-file指定的私鑰,如果此參數(shù)沒有設(shè)置,則默認(rèn)采用tls-private-key-file指定的參數(shù),即自己的私鑰)對Token進行合法驗證。
三:Service Account相關(guān)概念
1.
Service Account概念的引入是基于這樣的使用場景:運行在pod里的進程需要調(diào)用Kubernetes
API以及非Kubernetes
API的其它服務(wù)。Service
Account它并不是給kubernetes集群的用戶使用的,而是給pod里面的進程使用的,它為pod提供必要的身份認(rèn)證。
2. 如果kubernetes開啟了ServiceAccount(apiserver配置文件)那么會在每個namespace下面都會創(chuàng)建一個默認(rèn)的default的service account。
3.ServiceAccount詳情
4.當(dāng)創(chuàng)建pod的時候,如果沒有指定一個service account,系統(tǒng)會自動在該pod所在的namespace下為其指派一個default service account.
a. 如果spec.serviceAccount域沒有被設(shè)置,則Kubernetes默認(rèn)為其制定名字為default的Serviceaccount;
b. 如果Pod的spec.serviceAccount域指定了default以外的ServiceAccount,而該ServiceAccount沒有事先被創(chuàng)建,則該Pod操作失?。?/p>
c. 如果在Pod中沒有指定“ImagePullSecrets”,那么該sec.serviceAccount域指定的ServiceAccount的“ImagePullSecrets”會被加入該Pod;
d.
給Pod添加一個新的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)建時,API Server不會校驗該Pod引用的Secret是否存在。一旦這個Pod被調(diào)用,則kubelet將試著獲取Secret的值,如果Secret不存在或者暫時無法連接到API Server,則kubelet將按一定的時間間隔定期重試獲取Secret. 為了使用更新后的secret,必須刪除舊的Pod,并重新創(chuàng)建一個新的Pod.
以上是“kubernetes中Service Account與Secret的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。