網上很少有地方涉及到在角色授權時,如何對User Group授權。我們都知道在做角色綁定的時候,會有kind: User,kind: Group,但是實際上,Kubernetes並沒有提供User、Group資源創建接口,那這兩個怎麼使用呢?下面以一個實例來說明一下
前提條件:kube-apiserver必須是運行在安全端口模式下,這裏基於CA根證書籤名的雙向數字證書認證方式。
1、先創建Role
role-demo.yaml 內容如下:
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: pods-reader namespace: default rules: - apiGroups: - "" resources: - pods verbs: - get - list - watch |
2、綁定角色,將權限授予到真正角色上
編輯rolebinding-demo.yaml
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: creationTimestamp: null name: kubelet-read-pods roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: pods-reader subjects: - apiGroup: rbac.authorization.k8s.io kind: Group name: app1 |
這裏將賦予組app1只能查看namespace爲default的pod權限。Kind也可以爲user。
3、創建用戶和組
現在就可以創建用戶和組,CA的方式通過openssl就可以做到
3.1 創建用戶jbeda,並同時屬於組app1、app2
openssl genrsa -out jbeda.key 2048 openssl req -new -key jbeda.key -out jbeda.csr -subj "/CN=jbeda/O=app1/O=app2" openssl x509 -req -in jbeda.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out jbeda.crt -days 365 |
將 jbeda.key、jbeda.crt 複製到/etc/kubernetes/ssl/目錄下
l jbeda/O=app1/O=app2 這個代表創建了用戶jbeda,且該用戶屬於組app1、app2
l ca.crt ca.key是根證書,這個是爲kube-apiserver創建的,所有的客戶端都是利用它簽名的。這裏不重複它的創建過程。
3.2 測試權限
Ø 配置使用的調用接口使用的角色
這裏使用kubectl,編譯~/.kube/config
apiVersion: v1 kind: Config clusters: - cluster: server: https://10.8.8.27:6443 certificate-authority: /etc/kubernetes/ssl/ca.crt name: local users: - name: jbeda user: client-certificate : /etc/kubernetes/ssl/jbeda.crt client-key: /etc/kubernetes/ssl/jbeda.key contexts: - context: cluster: local user: jbeda name: local current-context: local |
Ø 查看pod
查看kubectl當前使用的config
可以看到只能查看namespace爲default下的pod信息
RBAC還可以用service account的方式認證,網上有太多資料,這裏不多做介紹。