您好,登錄后才能下訂單哦!
這篇文章主要介紹kubernetes中Service Account與Secret的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
一:Service Account與Secret數據結構
二:Service Account與Secret運行機制
1.kubernetes的master節點由三部分組成kube-apiserver,kube-scheduler和kube-controller-manager。其中controller manager會根據apiserver的配置信息(--admission-control和--service-account-private-key-file),生成ServiceAccount controller 和token controller.
2.ServiceAccount controller一直監聽Service Account和Namespace事件。如果一個Namespace中沒有default
Service Account,那么Service Account
Controller就會為該Namespace創建一個默認的(default)的Service
Account。
3.Token Controller也監聽Service
Account的事件,如果發現新建的Service Account里沒有對應的Service
Account Secret,則會用API Server私鑰(--service-account-private-key-file指定的文件)創建一個Token(JWT
Token),并用該Token、CA證書(這個是API Server的CA公鑰證書,來源于controller-manager配置文件中的root-ca-file),Namespace名稱等三個信息產生一個新的Secret對象,然后放入剛才的Service
Account中;如果監聽到的事件是刪除Service Account事件,則自動刪除與該Service
Account相關的所有Secret。此外,Token
Controller對象同時監聽Secret的創建、修改和刪除事件,并根據事件的不同做不同的處理。
4.API Server收到Token以后,采用自己的私鑰(實際是使用apiserver配置文件中的參數service-account-key-file指定的私鑰,如果此參數沒有設置,則默認采用tls-private-key-file指定的參數,即自己的私鑰)對Token進行合法驗證。
三:Service Account相關概念
1.
Service Account概念的引入是基于這樣的使用場景:運行在pod里的進程需要調用Kubernetes
API以及非Kubernetes
API的其它服務。Service
Account它并不是給kubernetes集群的用戶使用的,而是給pod里面的進程使用的,它為pod提供必要的身份認證。
2. 如果kubernetes開啟了ServiceAccount(apiserver配置文件)那么會在每個namespace下面都會創建一個默認的default的service account。
3.ServiceAccount詳情
4.當創建pod的時候,如果沒有指定一個service account,系統會自動在該pod所在的namespace下為其指派一個default service account.
a. 如果spec.serviceAccount域沒有被設置,則Kubernetes默認為其制定名字為default的Serviceaccount;
b. 如果Pod的spec.serviceAccount域指定了default以外的ServiceAccount,而該ServiceAccount沒有事先被創建,則該Pod操作失敗;
c. 如果在Pod中沒有指定“ImagePullSecrets”,那么該sec.serviceAccount域指定的ServiceAccount的“ImagePullSecrets”會被加入該Pod;
d.
給Pod添加一個新的Volume,在該Volume中包含ServiceAccountSecret中的Token,并將Volume掛載到Pod中所有容器的指定目錄下(/var/run/secrets/kubernetes.io/serviceaccount);
四:Secret相關概念
1.Secret解決了密碼、token、密鑰等敏感數據的配置問題,而不需要把這些敏感數據暴露到鏡像或者Pod Spec中。Secret可以以Volume或者環境變量的方式使用。
2.Secret有三種類型:
·Service Account:用來訪問Kubernetes API,由Kubernetes自動創建,并且會自動掛載到Pod的/run/secrets/kubernetes.io/serviceaccount目錄中;
·Opaque:base64編碼格式的Secret,用來存儲密碼、密鑰等;
·kubernetes.io/dockerconfigjson:用來存儲私有docker registry的認證信息。
我們可以通過Secret保管其它系統的敏感信息,并以Mount的方式將Secret掛載到Container中,然后通過訪問目錄中文件的方式獲取該敏感信息。當Pod被API Server創建時,API Server不會校驗該Pod引用的Secret是否存在。一旦這個Pod被調用,則kubelet將試著獲取Secret的值,如果Secret不存在或者暫時無法連接到API Server,則kubelet將按一定的時間間隔定期重試獲取Secret. 為了使用更新后的secret,必須刪除舊的Pod,并重新創建一個新的Pod.
以上是“kubernetes中Service Account與Secret的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。