Hướng dẫn tạo và phân quyền người dùng với kubectl.
Vấn đề
Hãy tưởng tượng ta gặp trường hợp như sau. Công ty ta có một Kubernetes Cluster với hai môi trường pro
và dev
. Với pro
cho môi trường sản phẩm thực tế và dev
dùng để phát triển sản phẩm. Trước giờ bạn chỉ làm một mình và có toàn bộ quyền để quản lý Kubernetes Cluster, mỗi lần Developer muốn làm gì đều phải thông qua bạn, kể cả xem logs. Sếp bạn thấy vậy hơi bất tiện nên kêu bạn tìm cách làm thế nào để mấy bạn Developer có thể tự liệt kê ứng dụng và xem logs ở dưới môi trường dev
.
Giải pháp
Ta dùng Role-based access control (RBAC) để giải quyết vấn đề trên. Các bước thực hiện như sau.
Tạo Service Account với tên bất kì:
kubectl -n dev create serviceaccount pod-logs
Tạo tệp tin pod-logs-role.yaml
:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: pod-logs
namespace: dev
rules:
- apiGroups: [""]
resources: ["pods", "pods/log"]
verbs: ["get", "list"]
kubectl apply -f pod-logs-role.yaml
Tạo RoleBinding:
kubectl -n dev create rolebinding pod-logs --serviceaccount=dev:pod-logs --role=pod-logs
Tiếp theo ta sẽ tạo người dùng và cho họ đăng nhập với Token lấy từ Service Account là pod-logs
. Lấy Token:
kubectl -n dev describe secrets "$(kubectl -n dev describe serviceaccount pod-logs | grep -i Tokens | awk '{print $2}')" | grep token: | awk '{print $2}'
Các bạn lưu ý chạy kubectl với namespace chính xác. Trong ví dụ này là -n dev
.
Gán giá trị trên vào biến TOKEN
:
TOKEN=$(kubectl -n dev describe secrets "$(kubectl -n dev describe serviceaccount pod-logs | grep -i Tokens | awk '{print $2}')" | grep token: | awk '{print $2}')
Tạo người dùng với tên bất kì:
kubectl config set-credentials scaleup --token=$TOKEN
User "scaleup" set.
Chuyển Cluster hiện tại sang người dùng là scaleup
:
kubectl config set-context $(kubectl config current-context) --user=scaleup
Tới bước này thì các bạn đã tạo người dùng thành công. Chạy các câu lệnh sau để kiểm tra quyền:
$ kubectl auth can-i get pods --namespace=dev
yes
$ kubectl auth can-i get pods --namespace=pro
no
Tiếp theo các bạn mở tệp tin ~/.kube/config
ra và xóa những người dùng khác và các thông tin không cần thiết, chỉ để lại người dùng scaleup
. Ví dụ:
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: ...
server: ...
name: scaleup-cluster
contexts:
- context:
cluster: scaleup-cluster
user: scaleup
name: scaleup-cluster
kind: Config
preferences: {}
users:
- name: scaleup
user:
token: ...
Sau đó ta gửi tệp tin này qua cho các bạn Developer.
Kết luận
Hiện tại có rất nhiều giải pháp để ta có thể giải quyết vấn đề được đưa ra ở bài này, tuy nhiên các giải pháp khác lại hơi lằng nhằng và phức tạp. Đây là cách thủ công nhưng lại đơn giản và dễ làm nhất, phù hợp cho bạn mới. Các bạn có thể tham khảo giải pháp khác phức tạp hơn là ArgoCD: Quản lý user và phân quyền trên ArgoCD.
Bạn đang cần tìm Mentor: tìm hiểu tại đây.
Kém tiếng Anh và cần nâng cao trình độ giao tiếp: Tại sao bạn học không hiệu quả?