正文
12.1.了解認(rèn)證機(jī)制
啟動(dòng)API服務(wù)器時(shí),通過(guò)命令行選項(xiàng)可以開(kāi)啟認(rèn)證插件。
12.1.1.用戶和組
了解用戶:
分為兩種連接到api服務(wù)器的客戶端:
1.真實(shí)的人
2.pod,使用一種稱為ServiceAccount的機(jī)制
了解組:
認(rèn)證插件會(huì)連同用戶名,和用戶id返回組,組可以一次性給用戶服務(wù)多個(gè)權(quán)限,不用單次賦予,
system:unauthenticated組:用于所有認(rèn)證插件都不會(huì)認(rèn)證客戶端身份的請(qǐng)求。
system:authenticated組:會(huì)自動(dòng)分配給一個(gè)成功通過(guò)認(rèn)證的用戶。
system:serviceaccount組:包含 所有在系統(tǒng)中的serviceaccount。
system:serviceaccount:<namespace>組:包含了所有在特定命名空間中的serviceAccount。
12.1.2 ServiceAccount介紹
每個(gè)pod中都包含/var/run/secrets/kubernetes.io/serviceaccount/token文件,如下圖所示,文件內(nèi)容用于對(duì)身份進(jìn)行驗(yàn)證,token文件持有serviceaccount的認(rèn)證token。
應(yīng)用程序使用token去連接api服務(wù)器時(shí),認(rèn)證插件會(huì)對(duì)serviceaccount進(jìn)行身份認(rèn)證,并將serviceaccount的用戶名傳回到api服務(wù)器內(nèi)部。
serviceaccount的用戶名格式如下:
system:serviceaccount:<namespace>:<service account name>
ServiceAccount是運(yùn)行在pod中的應(yīng)用程序,和api服務(wù)器身份認(rèn)證的一中方式。
了解ServiceAccount資源
ServiceAcount作用在單一命名空間,為每個(gè)命名空間創(chuàng)建默認(rèn)的ServiceAccount。
多個(gè)pod可以使用相同命名空間下的同一的ServiceAccount,
ServiceAccount如何與授權(quán)文件綁定
在pod的manifest文件中,可以指定賬戶名稱的方式,將一個(gè)serviceAccount賦值給一個(gè)pod,如果不指定,將使用該命名空間下默認(rèn)的ServiceAccount.
可以 將不同的ServiceAccount賦值給pod,讓pod訪問(wèn)不同的資源。
12.1.3創(chuàng)建ServiceAccount
為了集群的安全性,可以手動(dòng)創(chuàng)建ServiceAccount,可以限制只有允許的pod訪問(wèn)對(duì)應(yīng)的資源。
創(chuàng)建方法如下:
使用describe來(lái)查看ServiceAccount。
查看該token,
Name: yaohong-token-qhbxn
Namespace: default
Labels: <none>
Annotations: kubernetes.io/service-account.name: yaohong
kubernetes.io/service-account.uid: a3d0d2fe-bb43-11e9-ac1e-005056870b4d
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1342 bytes
namespace: 7 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6Inlhb2hvbmctdG9rZW4tcWhieG4iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoieWFvaG9uZyIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImEzZDBkMmZlLWJiNDMtMTFlOS1hYzFlLTAwNTA1Njg3MGI0ZCIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0Onlhb2hvbmcifQ.BwmbZKoM95hTr39BuZhinRT_vHF-typH4anjkL0HQxdVZEt_eie5TjUECV9UbLRRYIqYamkSxmyYapV150AQh-PvdcLYPmwKQLJDe1-7VC4mO2IuVdMCI_BnZFQBJobRK9EdPdbZ9uxc9l0RL5I5WyWoIjiwbrQvtCUEIkjT_99_NngdrIr7QD9S5SxHurgE3HQbmzC6ItU911LjmxtSvBqS5NApJoJaztDv0cHKvlT67ZZbverJaStQdxr4yiRbpSycRNArHy-UZKbNQXuzaZczSjVouo5A5hzgSHEBBJkQpQ6Tb-Ko5XGjjCgV_b9uQvhmgdPAus8GdFTTFAbCBw
12.1.4將ServiceAccount分配給pod
在pod中定義的spec.serviceAccountName字段上設(shè)置,此字段必須在pod創(chuàng)建時(shí)設(shè)置后續(xù)不能被修改。
自定義pod的ServiceAccount的方法如下圖
12.2通過(guò)基于角色的權(quán)限控制加強(qiáng)集群安全
12.2.1.介紹RBAC授權(quán)插件
RBAC授權(quán)插件將用戶角色作為決定用戶能否執(zhí)行操作的關(guān)機(jī)因素。
12.2.2介紹RBAC授權(quán)資源
RBAC授權(quán)規(guī)則通過(guò)四種資源來(lái)進(jìn)行配置的,他們可以分為兩組:
Role和ClusterRole,他們決定資源上可執(zhí)行哪些動(dòng)詞。
RoleBinding和ClusterRoleBinding,他們將上述角色綁定到特定的用戶,組或者ServiceAccounts上。
Role和RoleBinding是namespace級(jí)別資源
ClusterRole和ClusterRoleBinding是集群級(jí)別資源
12.2.3使用Role和RoleBinding
Role資源定義了哪些操作可以在哪些資源上執(zhí)行,
創(chuàng)建Role
service-reader.yml
在kube-system中創(chuàng)建Role
查看該namespace下的role
綁定角色到ServiceAccount
將service-reader角色綁定到default ServiceAccount
12.2.4使用ClusterRole和ClusterRoleBinding
查看集群ClusterRole
創(chuàng)建ClusterRole
查看yaml文件
創(chuàng)建clusterRoleBinding
12.2.5了解默認(rèn)的ClusterRole和ClusterRoleBinding
如下所示使用kubectl get clusterroles和kubectl get clusterrolesbinding可以獲取k8s默認(rèn)資源。
用edit ClusterRole允許對(duì)資源進(jìn)行修改
用admin ClusterRole賦予一個(gè)命名空間全部的權(quán)限