在不同网络上安装多主节点
遵循本指南在 `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}"