![]()
當(dāng)你敲下kubectl get pods時,Kubernetes不會問"你是誰",它只問"誰簽的名,我信嗎"。
這個設(shè)計讓新手工程師集體懵圈——他們翻遍集群也找不到用戶數(shù)據(jù)庫、密碼表、登錄界面。Kubernetes把身份認(rèn)證外包給了一整條可插拔的驗證鏈,x509證書、OIDC令牌、云廠商IAM憑證都能同時生效。搞懂這條鏈的運(yùn)轉(zhuǎn)邏輯,是區(qū)分"能調(diào)試認(rèn)證故障的工程師"和"只會復(fù)制kubeconfig文件祈禱別出事"的分水嶺。
認(rèn)證鏈:誰先認(rèn)出來,誰說了算
每個抵達(dá)API server的請求都攜帶某種憑證——kubectl、Pod里的控制器、CI流水線,無一例外。API server會把憑證依次丟給鏈上的驗證器,第一個能驗明的就拍板定案,后面的連看都不看。全鏈覆沒?請求被打成匿名用戶,要么直接拒絕。
這種"先到先得"的機(jī)制允許生產(chǎn)環(huán)境常見配置:管理員用客戶端證書,普通開發(fā)者走OIDC。鏈上具體有哪些驗證器,由啟動kube-apiserver時的命令行旗標(biāo)決定。
x509證書:機(jī)器的好工具,人的壞選擇
客戶端證書是Kubernetes原生支持的認(rèn)證方式。流程很直接:用openssl生成私鑰和證書簽名請求(CSR, Certificate Signing Request),找集群CA簽名,把證書嵌進(jìn)kubeconfig。API server收到請求時,校驗證書簽名是否來自可信CA,再把證書里的Common Name(CN)字段當(dāng)作用戶名,Organization(O)字段當(dāng)作組名。
證書認(rèn)證的問題在于它天生為機(jī)器設(shè)計。證書無法撤銷——一旦簽發(fā),在過期前始終有效,泄露了只能輪換CA。沒有登錄流程,沒有會話概念,用戶是誰、從哪來,證書本身不攜帶任何上下文。生產(chǎn)環(huán)境里給人發(fā)證書,相當(dāng)于給每個員工發(fā)一把永遠(yuǎn)有效的物理鑰匙,離職了鎖芯都得換。
OIDC:把登錄外包給專業(yè)選手
OpenID Connect(OIDC,開放式身份認(rèn)證連接協(xié)議)讓Kubernetes把"認(rèn)人"這件事交給Google、Azure AD、Okta這類身份提供商(IdP, Identity Provider)。用戶用瀏覽器登錄IdP,拿到簽名的JWT(JSON Web Token,一種攜帶聲明的簽名JSON對象),kubectl再把令牌塞進(jìn)請求頭。
API server配置OIDC需要四個關(guān)鍵參數(shù):--oidc-issuer-url指定IdP地址,--oidc-client-id標(biāo)識本集群,--oidc-username-claim和--oidc-groups-claim告訴Kubernetes從JWT的哪個字段提取用戶名和用戶組。Kubernetes只驗證令牌簽名和過期時間,不跟IdP實(shí)時通信——這意味著即使IdP那邊把用戶刪了,已簽發(fā)的令牌在過期前依然有效。
實(shí)際部署中,Dex這類開源IdP常被用來橋接企業(yè)現(xiàn)有的LDAP或SAML系統(tǒng)。配合kubelogin插件,開發(fā)者執(zhí)行kubectl時會自動彈出瀏覽器完成登錄,體驗接近現(xiàn)代SaaS應(yīng)用。
云廠商的即插即用方案
AWS、GCP、Azure各自把IAM身份嵌進(jìn)了相同的認(rèn)證模型。AWS用aws-iam-authenticator生成帶簽名的令牌,GCP讓gcloud命令行自動獲取訪問令牌,Azure則通過kubelogin對接AAD。底層都是Webhook Token Authentication——API server把令牌發(fā)給外部Webhook驗證,云廠商的IAM服務(wù)扮演那個外部裁判。
這種設(shè)計讓多云策略成為可能:同一套集群可以并行啟用AWS IAM給運(yùn)維團(tuán)隊、OIDC給開發(fā)者、服務(wù)賬戶令牌給Pod內(nèi)應(yīng)用。每條路徑獨(dú)立配置,互不影響。
認(rèn)證鏈的靈活性是把雙刃劍。配置越復(fù)雜,調(diào)試越像拆炸彈——kubectl的--v=6日志能暴露請求攜帶的憑證類型,API server的審計日志則記錄最終解析出的用戶身份。下次認(rèn)證失敗時,你會先檢查鏈上哪個環(huán)節(jié)在說謊,還是繼續(xù)復(fù)制別人的kubeconfig?
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.