在不同網路上安裝多主控平面
依照本指南在 cluster1
和 cluster2
上安裝 Istio 控制平面,使每個叢集都成為主要叢集。叢集 cluster1
位於 network1
網路上,而 cluster2
位於 network2
網路上。這表示跨越叢集邊界的 Pod 之間沒有直接連線。
在繼續之前,請務必完成開始之前下的步驟。
在此配置中,cluster1
和 cluster2
都會觀察每個叢集中的 API 伺服器以獲取端點。
跨叢集邊界的服務工作負載透過專用於東西向流量的專用閘道間接通信。每個叢集中的閘道必須可以從另一個叢集連線。
設定 cluster1
的預設網路
如果已建立 istio-system 命名空間,我們需要在其中設定叢集的網路
$ kubectl --context="${CTX_CLUSTER1}" get namespace istio-system && \
kubectl --context="${CTX_CLUSTER1}" label namespace istio-system topology.istio.io/network=network1
將 cluster1
設定為主控
為 cluster1
建立 Istio 配置
$ cat <<EOF > cluster1.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
values:
global:
meshID: mesh1
multiCluster:
clusterName: cluster1
network: network1
EOF
將配置套用至 cluster1
$ istioctl install --context="${CTX_CLUSTER1}" -f cluster1.yaml
在 cluster1
中安裝東西向閘道
在 cluster1
中安裝一個專用於東西向流量的閘道。預設情況下,此閘道將在網際網路上公開。生產系統可能需要額外的存取限制(例如,透過防火牆規則)以防止外部攻擊。請諮詢您的雲端供應商,了解有哪些選項可供使用。
$ @samples/multicluster/gen-eastwest-gateway.sh@ \
--network network1 | \
istioctl --context="${CTX_CLUSTER1}" install -y -f -
等待東西向閘道被分配一個外部 IP 位址
$ kubectl --context="${CTX_CLUSTER1}" get svc istio-eastwestgateway -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-eastwestgateway LoadBalancer 10.80.6.124 34.75.71.237 ... 51s
在 cluster1
中公開服務
由於叢集位於不同的網路上,我們需要在兩個叢集中的東西向閘道上公開所有服務 (*.local)。雖然此閘道在網際網路上公開,但只有具有信任的 mTLS 憑證和工作負載 ID 的服務才能存取其後面的服務,就像它們在同一個網路上一樣。
$ kubectl --context="${CTX_CLUSTER1}" apply -n istio-system -f \
@samples/multicluster/expose-services.yaml@
設定 cluster2
的預設網路
如果已建立 istio-system 命名空間,我們需要在其中設定叢集的網路
$ kubectl --context="${CTX_CLUSTER2}" get namespace istio-system && \
kubectl --context="${CTX_CLUSTER2}" label namespace istio-system topology.istio.io/network=network2
將 cluster2 設定為主控
為 cluster2
建立 Istio 配置
$ cat <<EOF > cluster2.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
values:
global:
meshID: mesh1
multiCluster:
clusterName: cluster2
network: network2
EOF
將配置套用至 cluster2
$ istioctl install --context="${CTX_CLUSTER2}" -f cluster2.yaml
在 cluster2
中安裝東西向閘道
如同我們在上面的 cluster1
中所做的那樣,在 cluster2
中安裝一個專用於東西向流量的閘道。
$ @samples/multicluster/gen-eastwest-gateway.sh@ \
--network network2 | \
istioctl --context="${CTX_CLUSTER2}" install -y -f -
等待東西向閘道被分配一個外部 IP 位址
$ kubectl --context="${CTX_CLUSTER2}" get svc istio-eastwestgateway -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-eastwestgateway LoadBalancer 10.0.12.121 34.122.91.98 ... 51s
在 cluster2
中公開服務
如同我們在上面的 cluster1
中所做的那樣,透過東西向閘道公開服務。
$ kubectl --context="${CTX_CLUSTER2}" apply -n istio-system -f \
@samples/multicluster/expose-services.yaml@
啟用端點探索
在 cluster2
中安裝一個遠端密鑰,以提供對 cluster1
的 API 伺服器的存取權限。
$ istioctl create-remote-secret \
--context="${CTX_CLUSTER1}" \
--name=cluster1 | \
kubectl apply -f - --context="${CTX_CLUSTER2}"
在 cluster1
中安裝一個遠端密鑰,以提供對 cluster2
的 API 伺服器的存取權限。
$ istioctl create-remote-secret \
--context="${CTX_CLUSTER2}" \
--name=cluster2 | \
kubectl apply -f - --context="${CTX_CLUSTER1}"
恭喜! 您已成功在不同網路上的多個主叢集中安裝了 Istio 網格!
下一步
您現在可以驗證安裝。
清理
在
cluster1
中解除安裝 Istio$ istioctl uninstall --context="${CTX_CLUSTER1}" -y --purge $ kubectl delete ns istio-system --context="${CTX_CLUSTER1}"
在
cluster2
中解除安裝 Istio$ istioctl uninstall --context="${CTX_CLUSTER2}" -y --purge $ kubectl delete ns istio-system --context="${CTX_CLUSTER2}"