Header Ads Widget

Ticker

6/recent/ticker-posts

Tạo và phân quyền cho user account RBAC trên Kubernetes

Keywords: Create and add permission for user account RBAC on Kubernetes

Chào tất cả mọi người, lâu rồi mới ngồi viết linh ta linh tinh gì đó trên cái trang này, sau khi giải quyết xong áp lực của công việc thì cuối cùng bản thân mình cũng đã control mọi thứ ổn thỏa trở lại rồi, chính vì thế mình mới quay về viết blog cho các bạn đây, hôm nay mình sẻ hướng dẫn các bạn tạo account trên Kubernetes nhé

Giả sử một ngày đẹp trời nào đó sếp của các bạn yêu cầu các bạn cấp quyền cho Dev có thể truy cập vào hệ thống K8S của công ty nhưng phải giới hạn một số quyền cũng như trên một số namespace nhất định, vậy lúc đó các bạn sẻ làm thế nào?  cùng mình thực hiện điều này nhé.
Ở đây mình sẻ chia ra 2 trường hợp đó là "Cấp cho các quyền nhất định nhưng full namespace" nghĩa là cho cả Cluster K8S và "Cấp cho các quyền nhất định nhưng với một vài namespace nào đó thôi"
  • Quyền cho tất cả namespace (Cluster)
Các thành phần để thực hiện tạo quyền cho một account cả cluster bao gồm những kind sau
  1. CluserRole
  2. ServiceAccount
  3. ClusterRoleBinding
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: thanhphatit-cr
rules:
- apiGroups: [""]
  resources: ["pods", "pods/log", "pods/portforward", "services"]
  verbs: ["get", "watch", "list", "patch"]
- apiGroups: [""]
  resources: ["namespaces"]
  verbs: ["get", "list", "patch"]
- apiGroups: [""]
  resources: ["pods/exec"]
  verbs: ["create", "get", "list", "patch"]  
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: thanhphatit
  namespace: itblognote
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: thanhphatit-crb
subjects:
- kind: ServiceAccount
  name: thanhphatit
  namespace: itblognote
roleRef:
  kind: ClusterRole
  name: thanhphatit-cr
  apiGroup: rbac.authorization.k8s.io
  • Quyền cho một namespace được chỉ định
Các thành phần để thực hiện tạo quyền cho một account trong một ns được chỉ định bao gồm những kind sau
  1. Role
  2. ServiceAccount
  3. Secret
  4. RoleBinding
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: itblognote-developer-r
  namespace: itblognote-dev
rules:
- apiGroups: [""]
  resources: ["pods", "pods/log", "pods/portforward", "services"]
  verbs: ["create", "get", "watch", "list", "patch"]
- apiGroups: [""]
  resources: ["namespaces"]
  verbs: ["get", "list", "patch"]
- apiGroups: [""]
  resources: ["pods/exec"]
  verbs: ["create", "get", "list", "patch"]  
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: itblognote-developer
  namespace: itblognote-dev
---
apiVersion: v1
kind: Secret
type: kubernetes.io/service-account-token
metadata:
  name: itblognote-developer-secret
  namespace: itblognote-dev
  annotations:
    kubernetes.io/service-account.name: itblognote-developer
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: itblognote-developer-rb
  namespace: itblognote-dev
subjects:
- kind: ServiceAccount
  name: itblognote-developer
  namespace: itblognote-dev
roleRef:
  kind: Role
  name: itblognote-developer-r
  apiGroup: rbac.authorization.k8s.io
Sự khác biệt giữa 2 thằng này chính là để thực hiện cho một ns nhất định nào đó thì chúng ta phải sử dụng là Role chứ không được phép sử dụng ClusterRole, Cluster đồng nghĩa với việc chúng ta sẻ cấp toàn quyền cho cả Cluster K8S của chúng ta nên vì vậy cho dù các bạn có gán namespace vào trong trường metadata cũng vô nghĩa và chẳng có tác dụng gì nếu như các bạn muốn chỉ cho một namespace nhất định, vì vậy tốt nhất các bạn nên chọn config bên dưới nghĩa là chỉ Role thôi, sau khi thực hiện kubectl apply nó thì các bạn có thể get token bằng lệnh sau
kubectl -n namespace-of-sa describe secret $(kubectl -n namespace-of-sa get secret | grep itblognote-developer-secret | awk '{print $1}')
Chú ý điều chỉnh role đúng với nhu cầu mà phía công ty bạn muốn nhé

Post a Comment

0 Comments