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 ạ.
Nội dung
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.