Kubernetes Dashboard là công cụ trên nền Web, kết nối đến Kubernetes để thực hiện việc quản lý (giống kubectl), ưu điểm của nó là trực quan dễ sử dụng.
Dưới đây là link các phiên bản của dashboard.
https://github.com/kubernetes/dashboard/releasesMình sử dụng phiên bản v2.7.0 nên mình sẽ download nó về bằng lệnh dưới
$ wget -O recommended.yaml https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yamlSau khi download xong file, bạn mở file và chuyển đến phần Secret có tên kubernetes-dashboard-certs, tiến hành comment lại hoặc xoá bỏ chúng đi, đoạn cấu hình này để khởi tạo Secret cấu hình xác thực SSL khi truy cập Dashboard nhưng mình muốn tự chủ động tạo thủ công Secret có tên kubernetes-dashboard-certs thủ công từ certificates sinh ra từ OpenSSL.
# apiVersion: v1
# kind: Secret
# metadata:
# labels:
# k8s-app: kubernetes-dashboard
# name: kubernetes-dashboard-certs
# namespace: kubernetes-dashboard
# type: OpaqueTìm đến service kubernetes-dashboard, chỗ spec thêm type: NodePort, nodePort: 30649 để chúng ta truy cập được từ mạng bên ngoài vào các pod.
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
type: NodePort
ports:
- port: 443
targetPort: 8443
nodePort: 30649
selector:
k8s-app: kubernetes-dashboardSau khi thực hiện xong các thay đổi, ta triển khai nó
$ kubectl apply -f ./recommended.yaml
Warning: resource namespaces/kubernetes-dashboard is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by kubectl apply. kubectl apply should only be used on resources created declaratively by either kubectl create --save-config or kubectl apply. The missing annotation will be patched automatically.
namespace/kubernetes-dashboard configured
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard 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Để lấy được port để truy cập url, ta get các services thuộc namespace kubernetes-dashboard, kết quả ta nhận được port được forward ra là port 30649
$ kubectl get svc -n kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dashboard-metrics-scraper ClusterIP 10.100.118.92 <none> 8000/TCP 4m56s
kubernetes-dashboard NodePort 10.102.9.232 <none> 443:30649/TCP 4m57sVậy url của mình sẽ là
https://192.168.13.238:30649Chúng ta sẽ tự tạo ra kubernetes-dashboard-certs bằng cách sau
Tạo thư mục chứa certs
$ mkdir -p /home/dashboard_certs/Chạy đoạn mã đưới để lấy các file xác thực tls.key
$ openssl req -nodes -newkey rsa:2048 -keyout /home/dashboard_certs/tls.key -out /home/dashboard_certs/ca.csr -subj "/CN=dashboard.hoanghd.com"
Can't load /root/.rnd into RNG
140184557298112:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:88:Filename=/root/.rnd
Generating a RSA private key
............+++++
..+++++
writing new private key to '/home/dashboard_certs/tls.key'
-----Tiếp theo ta chạy lệnh sau để tạo ra file tls.crt
$ openssl x509 -req -sha256 -days 365 -in /home/dashboard_certs/ca.csr -signkey /home/dashboard_certs/tls.key -out /home/dashboard_certs/tls.crt
Signature ok
subject=CN = dashboard.hoanghd.com
Getting Private keyKiểm ra các file ca.csr, tls.crt, tls.key đã được tạo
$ ls dashboard_certs/
ca.csr tls.crt tls.keyTạo 1 namespace để triển khai Kubernetes dashboard
$ kubectl create namespace kubernetes-dashboard
namespace/kubernetes-dashboard createdTạo kubernetes-dashboard-certs, nhớ trỏ đến thư mục chứa các file certs nhé, của mình là /home/dashboard_certs
$ kubectl create secret generic kubernetes-dashboard-certs --from-file=/home/dashboard_certs -n kubernetes-dashboard
secret/kubernetes-dashboard-certs createdChúng ta có thể dùng lệnh describe để xác nhận lại kubernetes-dashboard-certs đã được tạo
$ kubectl describe secret/kubernetes-dashboard-certs --namespace kubernetes-dashboard
Name: kubernetes-dashboard-certs
Namespace: kubernetes-dashboard
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
ca.csr: 907 bytes
tls.crt: 1025 bytes
tls.key: 1708 bytesHoặc cũng có thể dùng lệnh get secret để xác minh
$ kubectl get secret -n kubernetes-dashboard
NAME TYPE DATA AGE
default-token-6v6n9 kubernetes.io/service-account-token 3 110s
kubernetes-dashboard-certs Opaque 3 74sTạo ra file yaml như dưới để khởi tạo admin user
cat > /home/dashboard_certs/dashboard-adminuser.yaml << OEF
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
OEFTa triển khai nó
$ kubectl apply -f /home/dashboard_certs/dashboard-adminuser.yaml
serviceaccount/admin-user createdTạo file dashboard_rbac.yaml với tác dụng để phân quyền cho admin user
cat > /home/dashboard_certs/dashboard_rbac.yaml << OEF
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
OEFTriển khai file dashboard_rbac.yaml
$ kubectl apply -f /home/dashboard_certs/dashboard_rbac.yaml
clusterrolebinding.rbac.authorization.k8s.io/admin-user createdDùng lệnh dưới để lấy Token đăng nhập trên trang dashboard nhé.
kubectl get secret -n kubernetes-dashboard $(kubectl get serviceaccount admin-user -n kubernetes-dashboard -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decodeDùng trình duyệt truy cập url https://192.168.13.238:30649, chọn các đăng nhập bằng Token và nhập mã Token vào rồi bấm Sign in

Và đây là kết quả

