# NeuVector 5.3. 多叢集管理設定
在每一個NeuVector環境各自運作的狀況下,如果要派發規則會顯得麻煩,因此NeuVector可以透過Federation功能進行多叢集管理作業。
不論公有雲或地端環境,只要能夠連到,基本就可以進行管理作業。
:::info
還可以透過Proxy呢。
:::
**加入管理的群組**

**Federation Policy**

## 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。

設定叢集名稱(fed-admin.cluster)、Primary Cluster Server與port。
:::warning
Primary Cluster Server可以用ingress指定,只要連得到就可以,Port也是。
:::

設定完成後回到Federation Management,確認啟用。

加入的叢集需要Token, 點擊右邊的鑰匙圖案建立Token。

右邊按鈕可以複製Token,請點擊複製。

:::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。

點選右邊Join圖示。

先輸入Token,會自動帶出Primary Cluster、port相關資訊,接著輸入Controller Server位置與port。

確認加入,開始同步。

## 3.1 檢查環境狀況
加入完成後會看到已同步。

在管理叢集會看到多出可以選擇的叢集。

也可以管理相關的規則囉。

## 後記與參考檔案
:::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
```