+1

Kubernetes - Dashboard with Ingress

[Trà đá ký sự] Nay Hà Nội nó mưa, thời tiết se lạnh, trà đá càng ế.

Ngồi nghĩ về tương lai thấy nó mờ mịt như bầu trời lúc này.

Bán nước thế này baoh mới mua được Audi đời 2003 🙁

Thôi thì tiện đang rảnh, ngồi nghiên cứu về Role trong K8s, thì viết luôn 1 cái bài này.

Nó rất dễ rồi, nhưng cũng ok phết.

Ai rảnh qua ủng hộ cốc nước nhé 😃)

Kubernetes Dashboard hơi chuối.

Nay rảnh rỗi, ngồi hí hoáy tí cho nó vui.

1. Install Nginx Ingress

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx

helm repo update

helm search repo nginx

helm pull ingress-nginx/ingress-nginx

tar -zxvf ingress-nginx-4.11.3.tgz

helm -n <namespaces> install <release name> -f <value file> <helm chart>

helm -n ingress-nginx install ingress-nginx -f ingress-nginx/values.yaml ingress-nginx

Chỉnh sửa file values.yaml:

vim values.yaml

Trong phần service, change type LoadBalancer → NodePort image.png

Thêm port trong phần NodePort:

http: “30080”

https: “30443”

![image.png](https://images.viblo.asia/a0fe92df-ca69-47a5-af4d-fa310606d9d9.png)
![image.png](https://images.viblo.asia/2b3c2cf4-c569-446f-88bc-aca5a7a083ef.png)

helm -n ingress-nginx install ingress-nginx -f ingress-nginx/values.yaml ingress-nginx

2. Install nginx

apt install nginx -y

3. Tạo 1 file config cho domain chúng ta muốn dùng :

vim /etc/nginx/conf.d/dashboard.conf

upstream k8s-cluster {
            
    server 192.168.100.10:30443;
            
    server 192.168.100.11:30443;
            
    server 192.168.100.12:30443;
}

server {

    listen 8000;

    server_name product.co;

 location / {
     proxy_pass <http://k8s-cluster>;
     
    proxy_redirect off;
     
    proxy_set_header Host $host;
     
    proxy_set_header X-Real-IP $remote_addr;
     
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     
    proxy_set_header X-Forwarded-Proto $scheme;
    }
}

image.png

4. Install Kubernetes Dashboard:

helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/

helm update repo

helm repo list

image.png

helm pull repo kubernetes-dashboard/kubernetes-dashboard

tar -zxvf kubernetes-dashboard-7.10.0.tgz

image.png

vim kubernetes-dashboard/values.yaml

Tìm và chỉnh sửa phần kong như sau :

NodePort → ClusterIP

image.png

helm upgrade kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard -f values.yaml -n kubernetes-dashboard

image.png image.png

5. Create service account dashboard-user, và tạo cluster role binding, secret.

apiVersion: v1

kind: ServiceAccount

metadata:

    name: dashboard-user

    namespace: kubernetes-dashboard

---

apiVersion: rbac.authorization.k8s.io/v1
    
kind: ClusterRoleBinding
    
metadata:

    name: dashboard-user
roleRef:
    apiGroup: rbac.authorization.k8s.io
  
    kind: ClusterRole
  
    name: cluster-admin
subjects:

    - kind: ServiceAccount
  
    name: dashboard-user
  
    namespace: kubernetes-dashboard

---

apiVersion: v1
kind: Secret
metadata:

    name: dashboard-user

    namespace: kubernetes-dashboard

 annotations:
    kubernetes.io/service-account.name: "dashboard-user"

 type: kubernetes.io/service-account-token

image.png

Mục đích của việc này :

  • To protect your cluster data, Dashboard deploys with a minimal RBAC configuration by default.
  • Currently, Dashboard only supports logging in with a Bearer Token.

Nguồn : https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/

https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating-sample-user.md

In most cases after provisioning the cluster using kopskubeadm or any other popular tool, the ClusterRole cluster-admin already exists in the cluster. We can use it and create only a ClusterRoleBinding for our ServiceAccount. If it does not exist then you need to create this role first and grant required privileges manually.

→ ClusterRole cluster-admin đã có sẵn khi ta khỏi tạo k8s cluster, thế nên chúng ta chỉ việc tạo 1 ClusterRoleBinding cho service account ở trên.

Tiếp đến là tạo 1 secret để lưu trữ token để access vào UI Dashboard.

image.png

image.png image.png

Get token để access nào :

kubectl -n kubernetes-dashboard get secret dashboard-user -o jsonpath="{.data.token}" | base64 --decode > key.txt

image.png

6. Tạo ingress-dashboard.yml để thực hiện việc access từ bên ngoài thông qua domain.

![image.png](https://images.viblo.asia/aa9415f5-2e71-4062-97a8-7f855bcc831a.png)

Apply nó thôi.

image.png

Sau khi apply, phần rule của ingress đi vào backend là thằng kong-proxy là ok.

7. Access và tận hưởng thành quả :

Add host trên máy cá nhân :

image.png

Mở browser và truy cập :

image.png

Nhập token và tận hưởng.

8. Troubleshot lỗi

image.png

Tôi lượn 1 vòng gg thì thấy nhiều bài về cái lỗi này, nhưng với tôi thì là do trước đó tôi truy cập bằng

http://dashboard.test.com

Có vẻ thằng này nó k cho xác thực qua http.

Thế nên tôi đã sửa lại ở các bước trên để làm sao có thể truy cập được qua https.

Chúc các bạn cuối tuần vui vẻ.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí