microk8s 使用 ingress 將流量導出,以 Kubernetes Dashboard 為例

首先需要先啟用 microk8s 的 Ingress:
    
microk8s enable ingress
    

查看可以使用的 ingressclass:
    
microk8s kubectl get ingressclass
    

範例輸出:
    
microk8s kubectl get ingressclass
NAME     CONTROLLER             PARAMETERS   AGE
nginx    k8s.io/ingress-nginx   <none>       2d4h
public   k8s.io/ingress-nginx   <none>       2d4h

    

查看 kubernetes-dashboard 服務的連接埠:
    
microk8s kubectl get service kubernetes-dashboard -n kube-system
    

範例輸出:
    
microk8s kubectl get service kubernetes-dashboard -n kube-system
NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
kubernetes-dashboard   ClusterIP   10.152.183.80   <none>        443/TCP   3d23h
    

建立 dashboard-ingress.yaml 檔案來定義 ingress:
    
sudo vi dashboard-ingress.yaml
    

輸入以下內容:
    
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: dashboard-ingress
  namespace: kube-system
  annotations:
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" # 指定後端通訊使用 HTTPS

spec:
  ingressClassName: public # 上面使用指令查詢到的 ingressClassName
  rules:
    - host: dashboard.local # 指定要連接的網域
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: kubernetes-dashboard
                port:
                  number: 443 # 上面使用指令查詢到的連接埠
    

因為 ingress 需要綁定 Domain name,這裡我們使用一個不存在的網域 dashboard.local 代替。因為網域不存在,瀏覽器去 DNS 尋找此網域對應的 IP 會找不到,所以我們需要手動指定電腦的 IP 映射, 使用 Windows 的讀者可以查看這篇:Windows 手動設定本機網域名稱對應 hosts
假設 k8s 的 IP 是 192.168.0.30 ,那我們只要設定上面指定的網域 dashboard.local 為 192.168.0.30 即可。

將 dashboard-ingress.yaml 定義的資源套用的 k8s 中:
    
microk8s kubectl apply -f dashboard-ingress.yaml
    

可以使用下面的指令確認 dashboard-ingress.yaml 定義的資源的狀態:
    
microk8s kubectl describe -f dashboard-ingress.yaml
    

範例輸出:
    
microk8s kubectl describe -f dashboard-ingress.yaml
Name:             dashboard-ingress
Labels:           <none>
Namespace:        kube-system
Address:          127.0.0.1
Ingress Class:    public
Default backend:  <default>
Rules:
  Host             Path  Backends
  ----             ----  --------
  dashboard.local
                   /   kubernetes-dashboard:443 (10.1.36.193:8443)
Annotations:       nginx.ingress.kubernetes.io/backend-protocol: HTTPS
                   nginx.ingress.kubernetes.io/ssl-redirect: true
Events:
  Type    Reason  Age               From                      Message
  ----    ------  ----              ----                      -------
  Normal  Sync    2s (x2 over 18s)  nginx-ingress-controller  Scheduled for sync
  Normal  Sync    2s (x2 over 18s)  nginx-ingress-controller  Scheduled for sync
    

查看 ingress 對應的網域:
( -n kube-system 代表的是 namespace)
    
microk8s kubectl get ingress -n kube-system
    

範例輸出:
    
microk8s kubectl get ingress -n kube-system
NAME                CLASS    HOSTS             ADDRESS     PORTS   AGE
dashboard-ingress   public   dashboard.local   127.0.0.1   80      4m2s
    

然後使用瀏覽器開啟下面的網頁即可看到 Kubernetes Dashboard 的頁面:
    
https://dashboard.local
    

如果要將 dashboard-ingress.yaml 定義的資源刪掉可以使用下面的指令:
    
microk8s kubectl delete -f dashboard-ingress.yaml
    



文章撰寫中...請稍後...

參考資料:
kubernetes - Ingress
kubernetes - Ingress Controllers

留言