多主- 单网络平面

按照本指南安装上都Istio控制平面cluster1和 cluster2,使每一个主集群。集群 在网络上,而在 网络上。这意味着跨集群边界的Pod之间没有直接连接。cluster1network1cluster2network2

在开始之前,一定要完成下的步骤 ,然后再开始。

在这种配置中,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为主

为创建Istio配置cluster1:

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专用于 东西方流量的网关。默认情况下,此网关将在Internet上公开。生产系统可能需要其他访问限制(例如,通过防火墙规则),以防止外部攻击。与您的云供应商联系以查看可用的选项。

samples/multicluster/gen-eastwest-gateway.sh \
    --mesh mesh1 --cluster cluster1 --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)。尽管此网关在Internet上是公共的,但只有具有受信任的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配置为主

为创建Istio配置cluster2:

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 \
    --mesh mesh1 --cluster cluster2 --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 x create-remote-secret \
  --context="${CTX_CLUSTER1}" \
  --name=cluster1 | \
  kubectl apply -f - --context="${CTX_CLUSTER2}"

在其中安装cluster1可访问cluster2的API服务器的远程机密。

istioctl x create-remote-secret \
  --context="${CTX_CLUSTER2}" \
  --name=cluster2 | \
  kubectl apply -f - --context="${CTX_CLUSTER1}"

恭喜你!您已成功跨不同网络上的多个主集群安装了一个Istio网格!

Last updated