在此配置中,集群cluster1将在两个集群中观察端点的API服务器。这样,控制平面将能够为两个集群中的工作负载提供服务发现。
服务工作负载跨集群边界直接(点对点)通信。
集群2中的服务将通过专用于东西方流量的网关到达集群1中的控制平面。
配置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
在上进行安装之前cluster2,我们需要首先将控制平面暴露在其中, cluster1以便其中的服务cluster2将能够访问服务发现:
Copy kubectl apply --context="${CTX_CLUSTER1}" -f \
samples/multicluster/expose-istiod.yaml
启用API服务器访问权限 cluster2
在配置远程集群之前,我们首先必须在中提供控制平面cluster1访问API服务器的权限cluster2。这将执行以下操作:
使控制平面能够验证来自中运行的工作负载的连接请求cluster2。没有API Server访问权限,控制平面将拒绝请求。
启用发现在中运行的服务端点的功能cluster2。
为了提供对API服务器的访问权限cluster2,我们生成了一个远程机密并将其应用于cluster1:
Copy istioctl x create-remote-secret \
--context="${CTX_CLUSTER2}" \
--name=cluster2 | \
kubectl apply -f - --context="${CTX_CLUSTER1}"
为cluster2创建一个远程配置
Copy cat <<EOF > cluster2.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
profile: remote
values:
global:
meshID: mesh1
multiCluster:
clusterName: cluster2
network: network1
remotePilotAddress: ${DISCOVERY_ADDRESS}
EOF
istioctl install --context="${CTX_CLUSTER2}" -f cluster2.yaml