# 主远程 - 单网络平面

在此配置中,集群cluster1将在两个集群中观察端点的API服务器。这样,控制平面将能够为两个集群中的工作负载提供服务发现。

服务工作负载跨集群边界直接(点对点)通信。

集群2中的服务将通过专用于东西方流量的网关到达集群1中的控制平面。

![](https://preliminary.istio.io/latest/docs/setup/install/multicluster/primary-remote/arch.svg)

## 配置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

在上进行安装之前cluster2,我们需要首先将控制平面暴露在其中, cluster1以便其中的服务cluster2将能够访问服务发现:

```
kubectl apply --context="${CTX_CLUSTER1}" -f \
    samples/multicluster/expose-istiod.yaml
```

## 启用API服务器访问权限 cluster2

在配置远程集群之前,我们首先必须在中提供控制平面cluster1访问API服务器的权限cluster2。这将执行以下操作:

使控制平面能够验证来自中运行的工作负载的连接请求cluster2。没有API Server访问权限,控制平面将拒绝请求。

启用发现在中运行的服务端点的功能cluster2。

为了提供对API服务器的访问权限cluster2,我们生成了一个远程机密并将其应用于cluster1:

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

为cluster2创建一个远程配置

```
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
```
