在不同网络上安装Primary-Remote
请按照本指南将Istio控制平面安装在cluster1(主集群)并配置(cluster2远程集群)在中使用控制平面。集群cluster1在network1网络上,而cluster2在netowrk2网络上。这意味着跨集群边界的Pod之间没有直接连接.
在开始之前,一定要完成下的步骤 ,然后再开始。
在此配置中,集群cluster1将在两个集群中观察端点的API服务器。这样,控制平面将能够为两个集群中的工作负载提供服务发现。
跨集群边界的服务工作负载通过用于东西方 流量的专用网关间接通信。每个集群中的网关必须可以从另一个集群访问。
服务cluster2将cluster1通过同一东西方网关到达控制平面。
现在,远程配置文件将在远程集群中安装一台istiod服务器,该服务器将用于该集群中的工作负载的CA和Webhook注入。但是,服务发现将定向到主集群中的控制平面。 将来的版本将完全不需要在远程集群中添加一个摘要。敬请关注!
为cluster1设置默认网络
如果已经创建了istio-system命名空间,则需要在此处设置集群的网络:
Copy kubectl --context="${CTX_CLUSTER1}" get namespace istio-system && \
kubectl --context="${CTX_CLUSTER1}" label namespace istio-system topology.istio.io/network=network1
配置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
将配置应用于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
公开cluster1的服务
由于集群位于单独的网络上,因此我们还需要在两个集群中的东西方网关上公开所有用户服务(* .local)。尽管此网关在Internet上是公共的,但只有具有受信任的mTLS证书和工作负载ID的服务才能访问其网关后面的服务,就像它们在同一网络上一样。
Copy kubectl --context="${CTX_CLUSTER1}" apply -n istio-system -f \
samples/multicluster/expose-services.yaml
为cluster2设置默认网络
如果已经创建了istio-system命名空间,则需要在此处设置集群的网络:
Copy kubectl --context="${CTX_CLUSTER2}" get namespace istio-system && \
kubectl --context="${CTX_CLUSTER2}" label namespace istio-system topology.istio.io/network=network2
启用cluster2 API Server的访问权限
在配置远程集群之前,我们首先必须在中提供控制平面cluster1访问cluster2 API Server的权限。这将执行以下操作:
使控制平面能够验证来自中运行的工作负载的连接请求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为远程集群
保存cluster1的东西方网关的地址。
Copy export DISCOVERY_ADDRESS=$(kubectl \
--context="${CTX_CLUSTER1}" \
-n istio-system get svc istio-eastwestgateway \
-o jsonpath='{.status.loadBalancer.ingress[0].ip}')
现在在上创建一个远程配置cluster2。
Copy cat <<EOF > cluster2.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
profile: remote
values:
global:
meshID: mesh1
multiCluster:
clusterName: cluster2
network: network2
remotePilotAddress: ${DISCOVERY_ADDRESS}
EOF
将配置应用于cluster2:
Copy istioctl install --context="${CTX_CLUSTER2}" -f cluster2.yaml
在cluster2中安装东西方网关
与cluster1上面的操作一样,在cluster2其中安装专用于东西向流量的网关并公开用户服务。
Copy samples/multicluster/gen-eastwest-gateway.sh \
--mesh mesh1 --cluster cluster2 --network network2 | \
istioctl --context="${CTX_CLUSTER2}" install -y -f -
等待向东西方网关分配一个外部IP地址:
Copy 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上面的操作一样,通过东西网关公开服务。
Copy kubectl --context="${CTX_CLUSTER2}" apply -n istio-system -f \
samples/multicluster/expose-services.yaml
恭喜你!您已成功跨不同网络上的主集群和远程集群安装了一个Istio网格!