安装 primary-remote 多网络 mesh
在两个集群上以 primary-remote 多网络拓扑安装 Istio。
在本操作步骤中,CLUSTER1 是 东 集群,CLUSTER2 是 西 集群。东 集群是主集群,西 集群是远端集群。
您可以将这些说明适配到跨越两个以上集群的 mesh。
拓扑
跨集群边界的服务工作负载通过专用于东西向流量的 gateway 间接通信。
每个集群中的 gateway 必须可被另一个集群访问。
cluster2 中的服务将通过同一个东西向 gateway 访问 cluster1 中的控制平面。
前提条件
- 您已在构成 mesh 的所有集群上安装了 Alauda Container Platform Networking for Multus 插件,且 kube-ovn 必须为 v4.1.5 或更高版本。
- 您可以访问两个支持外部负载均衡器的集群。
WARNING
在 primary-remote 模式下,如果外部负载均衡器地址是 IP 且为 IPv6,则在 Alauda Service Mesh v2.1.2 之前的版本中不支持 primary-remote 部署。
- 您已在构成 mesh 的所有集群上安装了 Alauda Service Mesh v2 Operator。
- 您已完成为多集群 mesh 创建证书。
- 您已完成将证书应用到多网络多集群 mesh。
- 您已在本地安装
istioctl,以便使用它执行这些操作步骤。
操作步骤
创建一个定义 Istio 版本的 ISTIO_VERSION 环境变量
在 东 集群上安装 IstioCNI
通过运行以下命令,在 东 集群上安装 IstioCNI 资源:
在 东 集群上安装 Istio
-
通过运行以下命令,在 东 集群上创建
Istio资源:将以下
Istio资源保存到istio-external.yaml:- 这使得安装在 东 集群上的控制平面可以作为其他远端集群的外部控制平面。
使用
kubectl应用Istio资源: -
运行以下命令,等待控制平面返回 "Ready" 状态条件:
-
通过运行以下命令,在 东 集群上创建一个东西向 gateway:
WARNING对于运行 Linux 内核版本早于 4.11 的节点(例如 CentOS 7),在安装 gateway 之前需要额外配置。
可选:将东西向 gateway 部署到 基础设施节点(单击展开)
运行以下命令来 patch gateway 部署:
-
通过 gateway 暴露控制平面,以便 西 集群中的服务可以访问控制平面,运行以下命令:
-
通过 gateway 暴露原生应用服务,运行以下命令:
在 西 集群上安装 IstioCNI
通过运行以下命令,在 西 集群上安装 IstioCNI 资源:
在 西 集群上安装 Istio
-
通过运行以下命令,保存运行在 东 集群上的东西向 gateway 的 IP 地址:
-
通过运行以下命令,在西集群上创建
Istio资源: -
通过运行以下命令,为 西 集群中的
istio-system命名空间添加注解,使其由 东 集群中的控制平面管理: -
通过运行以下命令,在 东 集群上安装一个远程 secret,以提供对 西 集群 API server 的访问:
-
通过运行以下命令,等待
Istio资源返回 "Ready" 状态条件: -
通过运行以下命令,在 西 集群上创建一个东西向 gateway:
WARNING对于运行 Linux 内核版本早于 4.11 的节点(例如 CentOS 7),在安装 gateway 之前需要额外配置。
可选:将东西向 gateway 部署到 基础设施节点(单击展开)
运行以下命令来 patch gateway 部署:
NOTE由于 西 集群使用远程 profile 安装,在 东 集群上暴露原生应用服务会将其同时暴露在两个集群的东西向 gateway 上。
验证 primary-remote 拓扑
为了确认您的 primary-remote 拓扑运行正常,您将把示例原生应用部署到两个独立的 Alauda Container Platform 集群上。目标是建立一个基线环境,以便生成和观察跨集群流量。
操作步骤
首先将所需的示例原生应用部署到 East 集群。
该集群将承载 helloworld 服务的 v1 版本。
-
在
East集群上为这些原生应用创建一个专用命名空间。 -
通过应用所需的 label,为
sample命名空间启用 Istio sidecar 自动注入。 -
部署
helloworld原生应用组件。a. 首先,建立
helloworld服务端点。b. 然后,部署
helloworld原生应用的v1实例。 -
部署
sleep原生应用,它将作为发送测试请求的客户端。 -
暂停操作,直到
helloworld-v1部署完全可用并就绪。 -
同样地,等待
sleep部署报告Ready状态。
在 West 集群上复制该设置。
该集群将承载 helloworld 服务的 v2 版本。
-
在
West集群上创建sample命名空间。 -
同样为该命名空间启用 Istio sidecar 注入。
-
部署
helloworld原生应用组件。a. 在
West集群上创建通用的helloworld服务端点。b. 部署
helloworld原生应用的v2实例。 -
在
West集群上部署客户端sleep原生应用。 -
等待
helloworld-v2部署变为完全可用。 -
最后,确保
West集群上的sleep部署已就绪。
验证集群之间的流量流向
在两个集群上部署并运行原生应用后,下一步是发送请求,并确认流量已在整个 service mesh 中正确进行负载均衡。
-
从
East集群中的一个 pod 发送一系列 10 个请求到helloworld服务。预期结果是同时返回来自
helloworld-v1(东)和helloworld-v2(西)的响应,这证明 service mesh 正在跨集群边界路由请求。示例输出
-
在
West集群上执行相同的测试。同样,您应该观察到来自服务
v1和v2的响应,这确认无论请求源自何处,primary-remote 负载均衡都能正常工作。
从开发环境中删除 primary-remote 拓扑
在完成验证和实验之后,您应当拆除 primary-remote 配置,以清理开发环境并释放资源。
操作步骤
-
执行一条命令,从
East集群中删除所有 Istio 组件和示例原生应用。 -
运行相应命令,在
West集群上执行相同的清理操作。