# NeuVector 5.3. 多叢集管理設定 在每一個NeuVector環境各自運作的狀況下,如果要派發規則會顯得麻煩,因此NeuVector可以透過Federation功能進行多叢集管理作業。 不論公有雲或地端環境,只要能夠連到,基本就可以進行管理作業。 :::info 還可以透過Proxy呢。 ::: **加入管理的群組** ![截圖 2024-08-15 13.36.13](https://hackmd.io/_uploads/Bkm1VzsqR.png) **Federation Policy** ![截圖 2024-08-15 12.44.04](https://hackmd.io/_uploads/S1SsDWscC.png) ## 1. 環境資訊與設定 - Primary Cluster, aka Federate admin cluster **Demo Cluster luster:** 1. 3 Master IP, 192.168.11.106, 192.168.11.119, 192.168.11.122 2. 4 Worker IP, 192.168.11.117, 192.168.11.112, 192.168.11.120, 192.168.11.123 **All In One Cluster** 1. all-in-one: 192.168.11.107 ## 1.1. 取得neuvector-svc-controller-fed-master連線資訊。 ```shell! $ kubectl -n cattle-neuvector-system get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE neuvector-service-webui NodePort 10.43.183.219 <none> 8443:31152/TCP 7d17h neuvector-svc-admission-webhook ClusterIP 10.43.106.58 <none> 443/TCP 7d17h neuvector-svc-controller ClusterIP None <none> 18300/TCP,18301/TCP,18301/UDP 7d17h neuvector-svc-controller-api NodePort 10.43.244.216 <none> 10443:30584/TCP 3h39m neuvector-svc-controller-fed-managed NodePort 10.43.121.151 <none> 10443:31850/TCP 2d20h neuvector-svc-controller-fed-master NodePort 10.43.187.17 <none> 11443:31265/TCP 2d20h neuvector-svc-crd-webhook ClusterIP 10.43.239.50 <none> 443/TCP 7d19h ``` 目前環境使用NodePort提供服務。 ## 1.2. 指定叢集升級為管理叢集 點選右上角的Multiple Clusters後,點擊Promote。 ![截圖 2024-08-15 13.00.00](https://hackmd.io/_uploads/S12JxzoqC.png) 設定叢集名稱(fed-admin.cluster)、Primary Cluster Server與port。 :::warning Primary Cluster Server可以用ingress指定,只要連得到就可以,Port也是。 ::: ![截圖 2024-08-15 13.02.13](https://hackmd.io/_uploads/ByYleMjqA.png) 設定完成後回到Federation Management,確認啟用。 ![截圖 2024-08-15 13.10.59](https://hackmd.io/_uploads/rJNbeMo50.png) 加入的叢集需要Token, 點擊右邊的鑰匙圖案建立Token。 ![截圖 2024-08-15 13.11.18](https://hackmd.io/_uploads/HJC-gMoqC.png) 右邊按鈕可以複製Token,請點擊複製。 ![截圖 2024-08-15 13.11.27](https://hackmd.io/_uploads/Sy8zefsc0.png) :::info 初始化階段告一段落,接下來就是到指定的叢集執行加入動作。 ::: ## 2. 環境設定 - join cluster ## 2.1. 取得neuvector-svc-controller-fed-managed連線資訊。 ```shell! $ kubectl -n cattle-neuvector-system get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE neuvector-service-webui NodePort 10.43.22.130 <none> 8443:31277/TCP 102m neuvector-svc-admission-webhook ClusterIP 10.43.171.209 <none> 443/TCP 102m neuvector-svc-controller ClusterIP None <none> 18300/TCP,18301/TCP,18301/UDP 102m neuvector-svc-controller-api NodePort 10.43.156.146 <none> 10443:30819/TCP 102m neuvector-svc-controller-fed-managed NodePort 10.43.50.169 <none> 10443:31659/TCP 102m neuvector-svc-controller-fed-master NodePort 10.43.97.185 <none> 11443:31709/TCP 102m neuvector-svc-crd-webhook ClusterIP 10.43.135.232 <none> 443/TCP 2d22h $ kubectl get no NAME STATUS ROLES AGE VERSION demo-all-in-one Ready control-plane,etcd,master,worker 2d23h v1.28.11+k3s2 $ kubectl get no -owide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME demo-all-in-one Ready control-plane,etcd,master,worker 2d23h v1.28.11+k3s2 192.168.11.107 <none> SUSE Linux Enterprise Server 15 SP6 6.4.0-150600.21-default containerd://1.7.17-k3s1.28 ``` 同樣點擊右上角,尋找Multiple Clusters。 ![截圖 2024-08-15 13.11.52](https://hackmd.io/_uploads/r1k7gzocA.png) 點選右邊Join圖示。 ![截圖 2024-08-15 13.12.00](https://hackmd.io/_uploads/rJ6mlGj90.png) 先輸入Token,會自動帶出Primary Cluster、port相關資訊,接著輸入Controller Server位置與port。 ![截圖 2024-08-15 13.14.21](https://hackmd.io/_uploads/rJrIlMs9A.png) 確認加入,開始同步。 ![截圖 2024-08-15 13.14.33](https://hackmd.io/_uploads/r1kvgMj90.png) ## 3.1 檢查環境狀況 加入完成後會看到已同步。 ![截圖 2024-08-15 13.28.16](https://hackmd.io/_uploads/S10MMfi5R.png) 在管理叢集會看到多出可以選擇的叢集。 ![截圖 2024-08-15 13.29.35](https://hackmd.io/_uploads/HyUIGMj50.png) 也可以管理相關的規則囉。 ![截圖 2024-08-15 14.07.40](https://hackmd.io/_uploads/ryeBiMs9C.png) ## 後記與參考檔案 :::warning 各叢集版本在新版本(5.4)要維持一致。 ::: 相關service要自行expose,以下提供sample, 請依據環境進行調整。 **neuvector-svc-controller-fed-managed YAML** ```yaml! apiVersion: v1 kind: Service metadata: name: neuvector-svc-controller-fed-managed namespace: cattle-neuvector-system spec: clusterIP: 10.43.121.151 clusterIPs: - 10.43.121.151 externalTrafficPolicy: Cluster internalTrafficPolicy: Cluster ipFamilies: - IPv4 ipFamilyPolicy: SingleStack ports: - appProtocol: HTTPS name: fed nodePort: 31850 port: 10443 protocol: TCP targetPort: 10443 selector: app: neuvector-controller-pod sessionAffinity: None type: NodePort ``` **neuvector-svc-controller-fed-master YAML** ```yaml! apiVersion: v1 kind: Service metadata: name: neuvector-svc-controller-fed-master namespace: cattle-neuvector-system spec: clusterIP: 10.43.187.17 clusterIPs: - 10.43.187.17 externalTrafficPolicy: Cluster internalTrafficPolicy: Cluster ipFamilies: - IPv4 ipFamilyPolicy: SingleStack ports: - appProtocol: HTTPS name: fed nodePort: 31265 port: 11443 protocol: TCP targetPort: 11443 selector: app: neuvector-controller-pod sessionAffinity: None type: NodePort ```