按照本指南安装上都Istio控制平面cluster1和 cluster2,使每一个主集群。集群 在网络上,而在 网络上。这意味着跨集群边界的Pod之间没有直接连接。cluster1network1cluster2network2
在开始之前,一定要完成下的步骤 ,然后再开始。
在这种配置中,cluster1并cluster2在每个集群的端点观察API服务器。
跨集群边界的服务工作负载通过用于东西方 流量的专用网关间通信。每个集群中的网关必须可以从另一个集群访问。
为cluster1设置默认网络
如果已经创建了istio-system命名空间,则需要在此处设置集群的网络:
Copy kubectl --context="${CTX_CLUSTER1}" get namespace istio-system && \
kubectl --context="${CTX_CLUSTER1}" label namespace istio-system topology.istio.io/network=network1
配置cluster1为主
为创建Istio配置cluster1:
Copy cat <<EOF > cluster1.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
values:
global:
meshID: mesh1
multiCluster:
clusterName: cluster1
network: network1
EOF
将配置应用于cluster1:
Copy istioctl install --context="${CTX_CLUSTER1}" -f cluster1.yaml
在cluster1中安装东西方网关
安装cluster1专用于 东西方流量的网关。默认情况下,此网关将在Internet上公开。生产系统可能需要其他访问限制(例如,通过防火墙规则),以防止外部攻击。与您的云供应商联系以查看可用的选项。
Copy samples/multicluster/gen-eastwest-gateway.sh \
--mesh mesh1 --cluster cluster1 --network network1 | \
istioctl --context="${CTX_CLUSTER1}" install -y -f -
等待向东西方网关分配一个外部IP地址:
Copy 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)。尽管此网关在Internet上是公共的,但只有具有受信任的mTLS证书和工作负载ID的服务才能访问其网关后面的服务,就像它们在同一网络上一样。
Copy kubectl --context="${CTX_CLUSTER1}" apply -n istio-system -f \
samples/multicluster/expose-services.yaml
设置cluster2的默认网络
如果已经创建了istio-system命名空间,则需要在此处设置集群的网络:
Copy kubectl --context="${CTX_CLUSTER2}" get namespace istio-system && \
kubectl --context="${CTX_CLUSTER2}" label namespace istio-system topology.istio.io/network=network2
将cluster2配置为主
为创建Istio配置cluster2:
Copy cat <<EOF > cluster2.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
values:
global:
meshID: mesh1
multiCluster:
clusterName: cluster2
network: network2
EOF
将配置应用于cluster2:
Copy istioctl install --context="${CTX_CLUSTER2}" -f cluster2.yaml
在cluster2 中安装东西方网关
与cluster1上面的操作一样,在cluster2其中安装专用于东西向流量的网关。
Copy samples/multicluster/gen-eastwest-gateway.sh \
--mesh mesh1 --cluster cluster2 --network network2 | \
istioctl --context="${CTX_CLUSTER2}" install -y -f -
等待向东西方网关分配一个外部IP地址:
Copy 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上面的操作一样,通过东西网关公开服务。
Copy kubectl --context="${CTX_CLUSTER2}" apply -n istio-system -f \
samples/multicluster/expose-services.yaml
启用端点发现
在其中安装cluster2可访问cluster1的API服务器的远程机密。
Copy istioctl x create-remote-secret \
--context="${CTX_CLUSTER1}" \
--name=cluster1 | \
kubectl apply -f - --context="${CTX_CLUSTER2}"
在其中安装cluster1可访问cluster2的API服务器的远程机密。
Copy istioctl x create-remote-secret \
--context="${CTX_CLUSTER2}" \
--name=cluster2 | \
kubectl apply -f - --context="${CTX_CLUSTER1}"
恭喜你!您已成功跨不同网络上的多个主集群安装了一个Istio网格!