Tác giả: Soái

Thông tin liên hệ:

Chào mọi người mình là Soái. Vì học hỏi được nhiều kiến thức và tư duy hay của anh Mạnh trên devopsedu.vn và hiện tại cũng vừa có việc làm DevOps intern nên nay mình cũng xin viết một bài chia sẻ cách cài đặt Kubernetes Dashboard mà mình được giao rất mong cũng giúp ích được phần nào cho mọi người ạ.

Cách cài đặt Kubernetes Dashboard

Kubernetes cung cấp một giao diện người dùng đồ họa (GUI) tiện lợi thông qua web dashboard, cho phép tạo, giám sát và quản lý cụm một cách dễ dàng. Việc cài đặt khá đơn giản, nhưng cần thực hiện một số bước để thiết lập mọi thứ một cách thuận tiện.

Ngoài việc triển khai dashboard, chúng ta cũng sẽ tìm hiểu cách thiết lập quyền truy cập admin và quyền truy cập chỉ đọc (read-only) cho dashboard. Tuy nhiên, trước khi bắt đầu, chúng ta cần có một cụm Kubernetes đang hoạt động.

Cài đặt Kubernetes Dashboard phiên bản mới nhất

Khi bạn đã thiết lập xong cụm Kubernetes hoặc nếu bạn đã có một cụm đang hoạt động, chúng ta có thể bắt đầu.

Điều đầu tiên cần biết về giao diện web UI là nó chỉ có thể truy cập thông qua địa chỉ localhost trên máy mà nó đang chạy. Điều này có nghĩa là chúng ta cần thiết lập một SSH tunnel đến máy chủ. Trên hầu hết các hệ điều hành, bạn có thể tạo một SSH tunnel bằng lệnh sau. Thay thế <user> và <ip_k8s_master> bằng các thông tin tương ứng của cụm Kubernetes của bạn.

# ssh user@ip_k8s_master

Sau khi bạn đã đăng nhập, bạn có thể triển khai dashboard bằng lệnh đơn giản sau đây:

# kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml

If your cluster is working correctly, you should see an output confirming the creation of a bunch of Kubernetes components, as in the example below:

namespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created

Tạo tài khoản admin (administrator user)

Dashboard của Kubernetes hỗ trợ nhiều cách để quản lý quyền truy cập. Trong ví dụ này, chúng ta sẽ tạo một tài khoản admin với đầy đủ quyền để sửa đổi cụm và sử dụng token.

Bắt đầu bằng cách tạo một thư mục mới để chứa các tệp cấu hình cho dashboard.

# mkdir ~/dashboard && cd ~/dashboard

Tạo cấu hình sau đây và lưu lại dưới tên tệp dashboard-admin.yaml. Lưu ý rằng việc thụt lề (indentation) rất quan trọng trong các tệp YAML, và bạn nên sử dụng hai dấu cách trong trình chỉnh sửa văn bản thông thường

# vi dashboard-admin.yaml

Có cấu hình như sau:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard

Sau khi hoàn tất, lưu tệp và thoát khỏi trình chỉnh sửa.

Tiếp theo, triển khai vai trò người dùng admin bằng lệnh sau:

# kubectl apply -f dashboard-admin.yaml

Bạn sẽ thấy một tài khoản dịch vụ (service account) và một ràng buộc vai trò cụm (cluster role binding) được tạo ra:

serviceaccount/admin-user created
clusterrolebinding.rbac.authorization.k8s.io/admin-user created

Với phương pháp này, bạn không cần thiết lập hoặc ghi nhớ mật khẩu. Thay vào đó, để truy cập dashboard, bạn sẽ cần một token.

Lấy token admin bằng lệnh dưới đây:

# kubectl get secret -n kubernetes-dashboard $(kubectl get serviceaccount admin-user -n kubernetes-dashboard -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode

Hãy copy giá trị Token ra nhé.

Tạo tài khoản chỉ có quyền đọc (read-only user)

Bạn có thể tạo một chế độ xem chỉ đọc cho cụm nếu muốn cung cấp quyền truy cập vào dashboard của Kubernetes, ví dụ như để trình diễn.

Tương tự như tài khoản admin, hãy lưu cấu hình sau đây vào tệp dashboard-read-only.yaml:

# vi dashboard-read-only.yaml

Có cấu hình như sau:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: read-only-user
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
  labels:
  name: read-only-clusterrole
  namespace: default
rules:
- apiGroups:
  - ""
  resources: ["*"]
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - extensions
  resources: ["*"]
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - apps
  resources: ["*"]
  verbs:
  - get
  - list
  - watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: read-only-binding
roleRef:
  kind: ClusterRole
  name: read-only-clusterrole
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
  name: read-only-user
  namespace: kubernetes-dashboard

Sau khi hoàn tất, lưu tệp và thoát khỏi trình chỉnh sửa.

Tiếp theo, triển khai tài khoản người dùng chỉ đọc bằng lệnh dưới đây:

kubectl apply -f dashboard-read-only.yaml

Để cho phép người dùng đăng nhập qua tài khoản chỉ đọc, bạn sẽ cần cung cấp một token, token này có thể được lấy bằng lệnh dưới đây:

# kubectl get secret -n kubernetes-dashboard $(kubectl get serviceaccount read-only-user -n kubernetes-dashboard -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode

Hãy copy giá trị Token ra nhé.

Truy cập vào Kubernetes Dashboard

Chúng ta đã triển khai dashboard và tạo tài khoản người dùng cho nó. Tiếp theo, chúng ta có thể bắt đầu quản lý cụm Kubernetes.

Tuy nhiên, trước khi có thể đăng nhập vào dashboard, nó cần được truy cập thông qua một dịch vụ proxy trên localhost. Hãy chạy lệnh dưới đây trên cụm Kubernetes của bạn:

# kubectl proxy

Giả sử rằng chúng ta đã thiết lập một SSH tunnel kết nối tới cổng localhost 8001 ở cả hai đầu, hãy mở trình duyệt và truy cập vào liên kết dưới đây:

http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

Nếu mọi thứ hoạt động đúng, bạn sẽ thấy cửa sổ đăng nhập của dashboard

Chọn phương thức xác thực bằng token và sao chép token admin của bạn vào trường dưới đây. Sau đó, nhấn nút Sign in.

Sau khi đăng nhập, bạn sẽ thấy giao diện tổng quan về cụm Kubernetes của mình

Dừng Kubernetes Dashboard

Các vai trò người dùng không còn cần thiết có thể được xóa bằng phương thức xóa:

# kubectl delete -f dashboard-admin.yaml
# kubectl delete -f dashboard-read-only.yaml

Tương tự, nếu bạn muốn vô hiệu hóa dashboard, nó có thể được xóa giống như bất kỳ deployment nào khác.

# kubectl delete -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml

Dashboard sau đó có thể được triển khai lại bất cứ lúc nào theo cùng một quy trình như trước.

Vậy là chúng ta đã cài đặt thành công Kubernetes dashboard. Bây giờ bạn có thể bắt đầu làm quen với dashboard bằng cách khám phá các menu và chế độ xem khác nhau mà nó cung cấp.