主-从架构的安装
继续安装之前,请先确认完成了准备工作中的步骤。
如果您使用 kind
测试多集群,您可以使用 让 LoadBalancer
服务使用 EXTERNAL-IP
。
在此配置中,集群 cluster1
将监测两个集群 API Server 的服务端点。 以这种方式,控制平面就能为两个集群中的工作负载提供服务发现。
服务的工作负载( Pod 到 Pod )可跨集群边界直接通讯。
cluster2
中的服务将通过专用的东西向网关流量访问 cluster1
的控制平面。
为 cluster1
创建 Istio 配置文件:
将配置文件应用到 cluster1
:
$ istioctl install --set values.pilot.env.EXTERNAL_ISTIOD=true --context="${CTX_CLUSTER1}" -f cluster1.yaml
需要注意的是,当 被设置为 true
时,安装在 cluster1
上的控制平面也可以作为其他远程集群的外部控制平面。 当这个功能被启用时,istiod
将试图获得领导权锁,并因此管理将附加到它的并且带有 远程集群 (本例中为 cluster2
)。
在 cluster1
安装东西向网关
在 cluster1
中安装东西向流量专用网关,默认情况下,此网关将被公开到互联网上。 生产环境可能需要增加额外的准入限制(即:通过防火墙规则)来防止外部攻击。 咨询你的云供应商,了解可用的选项。
$ @samples/multicluster/gen-eastwest-gateway.sh@ \
istioctl --context="${CTX_CLUSTER1}" install -y -f -
如果随着版本修正已经安装控制面板,在 gen-eastwest-gateway.sh
命令中添加 --revision rev
标志。
在安装 cluster2
之前,我们需要开放 cluster1
的控制平面, 以便 cluster2
中的服务能访问到服务发现:
$ kubectl apply --context="${CTX_CLUSTER1}" -f \
@samples/multicluster/expose-istiod.yaml@
设置集群 cluster2
的控制平面
我们需要通过注释 istio-system 命名空间来识别应该管理集群 的外部控制平面:
$ kubectl --context="${CTX_CLUSTER2}" create namespace istio-system
$ kubectl --context="${CTX_CLUSTER2}" annotate namespace istio-system topology.istio.io/controlPlaneClusters=cluster1
保存 cluster1
东西向网关的地址。
现在,为 cluster2
创建一个从集群配置:
$ cat <<EOF > cluster2.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
profile: remote
values:
global:
meshID: mesh1
multiCluster:
clusterName: cluster2
network: network1
remotePilotAddress: ${DISCOVERY_ADDRESS}
将此配置应用到
$ istioctl install --context="${CTX_CLUSTER2}" -f cluster2.yaml
后续步骤
现在,你可以。