k8s鑒權(quán):
k8s不存儲(chǔ)用戶信息沉填,主要有一下集中識(shí)別用戶的方式
X509 Client Certs: 使用由 k8s 根 CA 簽發(fā)的證書粥鞋,提取O字段
Static Token File: 預(yù)先在 API Server 放置 Token 文件(bootstrap 階段使用過)
Bootstrap Tokens: 一種在集群內(nèi)創(chuàng)建的 Bootstrap 專用 Token(新的 Bootstarp 推薦)
Static Password File: 跟靜態(tài) Token 類似
Service Account Tokens: 使用 Service Account 的 Token
------------------------------------------------------------------------------------------------------------------------
RBAC(Role Base Access Control)
基于角色的權(quán)限控制
所有的外部訪問都會(huì)經(jīng)過集群的統(tǒng)一入口api-server進(jìn)入集群,訪問的方式有kubectl、客戶端庫(kù)以及restful請(qǐng)求。
Account:
ServiceAccounts:用來訪問 kubernetes API,通過 kubernetes API 創(chuàng)建和管理习劫,每個(gè) account 只能在一個(gè)namespace 上生效,存
儲(chǔ)在kubernetes API 中的 Secrets 資源嚼隘。kubernetes 會(huì)默認(rèn)創(chuàng)建诽里,并且會(huì)自動(dòng)掛載到Pod中的
/run/secrets/kubernetes.io/serviceaccount 目錄下如果pod沒有指定sa那么會(huì)使用默認(rèn)的default
ROLE:定義權(quán)限規(guī)則,維度為namespace
CLusterRole:在集群維度來定義用戶權(quán)限規(guī)則飞蛹,忽略namespace
RoleBinding:將用戶和rules進(jìn)行綁定
ClusterRoleBinding:將用戶與集群資源做綁定谤狡,可以使用ClusterRole綁定RoleBinding
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
創(chuàng)建dashboard登錄用的賬戶過程
首先必須是SA
token認(rèn)證:
創(chuàng)建sa,根據(jù)管理目標(biāo)進(jìn)行rolebinding和clusterrolebinding 綁定到role或者cluterrole
獲取sa的secret查看token信息
(kubectl get secret lixiao-admin-token-8spcl -o jsonpath={.data.token} |base64 -d)
config文件認(rèn)證
創(chuàng)建sa卧檐,根據(jù)管理目標(biāo)進(jìn)行rolebinding和clusterrolebinding 綁定到role或者cluterrole
創(chuàng)建配置文件:
kubectl config set-context lixiao@kubernetes --cluster=kubernetes --user=lixiao --kubeconfig=/datafs/lixiao.conf
kubectl config set-credentials lixiao --token=${sa_token} --kubeconfig=/datafs/lixiao.conf
kubectl config use-context lixiao@kubernetes --kubeconfig=/datafs/lixiao.conf
標(biāo)準(zhǔn)的配置文件包含三段
contexts:上下文描述集群和用戶關(guān)系
current-context:當(dāng)前上下文
users:包含用戶名和集群中的tocken信息
其他節(jié)點(diǎn)使用kubectl配置需要導(dǎo)出主節(jié)點(diǎn)的
------------------------------------------------------------------------------------------------------------------------
證書認(rèn)證:
CN:Common Name墓懂,kube-apiserver 從證書中提取該字段作為請(qǐng)求的用戶名 (User Name)
“O”:Organization,kube-apiserver 從證書中提取該字段作為請(qǐng)求用戶所屬的組 (Group)
1:制作一組證書
2:將證書信息寫入kubeconfig配置文件 kubectl config set-credentials
3:創(chuàng)建role和binding 綁定CN或者O (根據(jù)binding.subjects.kind)
cfssl和openssl