This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.1.18. 连接服务网格
Federation(联邦) 是一种部署模型,可让您在不同管理域中管理的单独网格间共享服务和工作负载。
1.18.1. 联邦概述 复制链接链接已复制到粘贴板!
Federation(联邦)是一组可让您在独立网格间连接服务的功能,允许在多个不同的管理域中使用 Service Mesh 功能,如身份验证、授权和流量管理。
通过实施联邦网格,您可以运行、管理和观察在多个 OpenShift 集群中运行的单个服务网格。Red Hat OpenShift Service Mesh 联邦针对 Service Mesh 的多集群实施,该方法假设网格之间的信任最小。
Service Mesh federation 假设每个网格都单独管理,并保留自己的管理员。默认的行为是不允许任何通信,且网格之间没有共享信息。在网格间共享信息是基于明确选择的。联邦网格中的任何内容都不是共享的,除非为共享进行了配置。证书生成、指标和追踪集合等支持功能在其各自网格中保持本地。
您可以在每个服务网格中配置 ServiceMeshControlPlane,以创建专用于联合的入口和出口网关,并为网格指定信任域。
联邦还包括创建额外的联邦文件。以下资源用于在两个或多个网格间配置联合。
- ServiceMeshPeer 资源声明一对服务网格之间的联邦。
- ExportedServiceSet 资源声明网格中的一个或多个服务可供对等网格使用。
- ImportedServiceSet 资源声明对等网格导出的服务将导入到网格中。
1.18.2. 联邦特性 复制链接链接已复制到粘贴板!
Red Hat OpenShift Service Mesh 联邦方法加入网格的功能包括:
- 支持每个网格的通用 root 证书。
- 支持每个网格的不同根证书。
- Mesh 管理员必须手动配置证书链、服务发现端点、信任域等,以用于 RU mesh 之外的网格。
仅导出/导入您要在网格间共享的服务。
- 默认为不与联邦中其他网格共享已部署的工作负载的信息。可以 导出 服务使其对其他网格可见,并允许来自其自身网格外的工作负载的请求。
- 已导出的服务可以被导入到另一个网格中,使网格上的工作负载能够将请求发送到导入的服务。
- 对网格之间的通信进行加密。
- 支持在本地部署的工作负载和在联邦中部署的另一个网格中部署的工作负载之间配置负载平衡。
当网格加入到另一个网格时,它可以执行以下操作:
- 向联邦网格提供有关自身的信任详情。
- 发现联邦网格的信任详情。
- 向联邦网格提供有关其自身导出服务的信息。
- 发现联邦网格导出的服务的信息。
1.18.3. 联邦安全 复制链接链接已复制到粘贴板!
Red Hat OpenShift Service Mesh 联邦针对 Service Mesh 的多集群实施,该方法假设网格之间的信任最小。数据安全性作为联邦功能的一部分而建立。
- 每个网格被视为唯一租户,具有独特的管理。
- 您可以在联邦中为每个网格创建一个唯一的信任域。
- 联邦网格之间的流量使用 mutual Transport Layer Security(mTLS)自动加密。
- Kiali 图仅显示您导入的网格和服务。您无法看到还没有导入到网格中的其他网格或服务。
1.18.4. 联邦限制 复制链接链接已复制到粘贴板!
Red Hat OpenShift Service Mesh 联邦方法加入网格有以下限制:
- OpenShift Dedicated 不支持网格绑定。
1.18.5. 联邦先决条件 复制链接链接已复制到粘贴板!
Red Hat OpenShift Service Mesh 联邦方法加入网格需要以下先决条件:
- 两个或多个 OpenShift Container Platform 4.6 或更高版本的集群。
- 联邦(Federation)是在 Red Hat OpenShift Service Mesh 2.1 或更高版本中引入的。您必须已在您要联合的每个网格上安装了 Red Hat OpenShift Service Mesh 2.1 或更高的 Operator。
-
您必须在您要联邦的每个网格上部署 2.1 或更高版本的
ServiceMeshControlPlane。 - 您必须配置支持与联邦网关关联的服务的负载均衡器,以支持原始 TLS 流量。联合流量包括用于发现的 HTTPS 和用于服务流量的原始加密 TCP。
-
在导出并导入它们前,您应该部署要公开给另一个网格的服务。但这不是严格的要求。您可以指定导出/导入尚不存在的服务名称。当您部署在
ExportedServiceSet和ImportedServiceSet中命名的的服务时,它们会自动提供给导出/导入。
1.18.6. 规划网格联邦 复制链接链接已复制到粘贴板!
在开始配置网格联邦前,您应该需要一些时间来规划您的实施。
- 您计划将多少网格加入到联邦?您可能想从有限数量的网格开始,可能是两个或三个网格。
您计划为每个网格使用哪些命名约定?使用预定义的命名约定有助于配置和故障排除。本文档中的示例为每个网格使用不同的颜色。您应该决定一个命名约定,它可帮助您确定谁拥有和管理每个网格,以及以下联合资源:
- 集群名称
- 集群网络名称
- Mesh 名称和命名空间
- Federation ingress 网关
- Federation egress 网关
安全信任域
注意联邦中的每个网格都必须有自己的唯一信任域。
您计划从每个网格中导出哪些服务到联邦网格?每个服务都可以单独导出,也可以指定标签或使用通配符。
- 是否要将别名用于服务命名空间?
- 是否要将别名用于导出的服务?
每个网格计划导入哪些导出的服务?每个网格只导入它所需的服务。
- 是否要将别名用于导入的服务?
1.18.7. 集群间的 Mesh 联合 复制链接链接已复制到粘贴板!
要将 OpenShift Service Mesh 的一个实例与在不同集群中运行的实例连接,这个过程与连接同一集群中部署的两个网格的过程有很大不同。但是,一个网格的 ingress 网关必须可以被另一个网格访问。确保这一点的一种方法是,如果集群支持这种类型的服务,将网关服务配置为 LoadBalancer 服务。
该服务必须通过在 OSI 模型的第 4 层运行的负载平衡器公开。
1.18.7.1. 在裸机上运行的集群上公开联合入口 复制链接链接已复制到粘贴板!
如果集群在裸机上运行并完全支持 LoadBalancer 服务,则 ingress 网关 Service 对象的 .status.loadBalancer.ingress.ip 字段中的 IP 地址应指定为 ServiceMeshPeer 对象的 .spec.remote.addresses 字段中的条目之一。
如果集群不支持 LoadBalancer 服务,则如果节点可从运行其他网格的集群访问,则可以使用 NodePort 服务。在 ServiceMeshPeer 对象中,在 .spec.remote.addresses 字段中指定节点的 IP 地址,并在 .spec.remote.discoveryPort 和 .spec.remote.servicePort 字段中指定服务的节点端口。
如果集群在 IBM Power 或 IBM Z 基础架构上运行,且完全支持 LoadBalancer 服务,则 ingress 网关 Service 对象的 .status.loadBalancer.ingress.ip 字段中应当指定为 ServiceMeshPeer 对象的 .spec.remote.addresses 字段中的条目之一。
如果集群不支持 LoadBalancer 服务,则如果节点可从运行其他网格的集群访问,则可以使用 NodePort 服务。在 ServiceMeshPeer 对象中,在 .spec.remote.addresses 字段中指定节点的 IP 地址,并在 .spec.remote.discoveryPort 和 .spec.remote.servicePort 字段中指定服务的节点端口。
1.18.7.3. 在 Amazon Web Services(AWS)上公开联邦入口。 复制链接链接已复制到粘贴板!
默认情况下,在 AWS 上运行的集群中的 LoadBalancer 服务不支持 L4 负载均衡。为了使 Red Hat OpenShift Service Mesh 联邦可以正常工作,必须在 ingress 网关服务中添加以下注解:
service.beta.kubernetes.io/aws-load-balancer-type: nlb
在 ingress 网关 Service 对象的 .status.loadBalancer.ingress.hostname 字段中的完全限定域名应指定为 ServiceMeshPeer 对象的 .spec.remote.addresses 字段中的条目之一。
1.18.7.4. 在 Azure 上公开联邦入口 复制链接链接已复制到粘贴板!
在 Microsoft Azure 中,仅仅将服务类型设置为 LoadBalancer 就足以让网格联邦正确运行。
ingress 网管 Service 对象 .status.loadBalancer.ingress.ip 字段中找到的 IP 地址应指定为 ServiceMeshPeer 对象的 .spec.remote.addresses 字段中的条目之一。
1.18.7.5. 在 Google Cloud Platform(GCP)上公开联邦入口. 复制链接链接已复制到粘贴板!
在 Google Cloud Platform 上,只要将服务类型设置为 LoadBalancer,网格联邦就可以正常工作。
ingress 网管 Service 对象 .status.loadBalancer.ingress.ip 字段中找到的 IP 地址应指定为 ServiceMeshPeer 对象的 .spec.remote.addresses 字段中的条目之一。
1.18.8. 联邦实施清单 复制链接链接已复制到粘贴板!
联邦服务网格包括以下活动:
❏ 在您要联邦的集群间配置网络。
- ❏ 配置支持与联邦网关关联的服务的负载均衡器,以支持原始 TLS 流量。
- ❏ 在集群中安装 Red Hat OpenShift Service Mesh 版本 2.1 或更高版本的 Operator。
-
❏ 为每个集群部署版本 2.1 或更高版本的
ServiceMeshControlPlane。 ❏ 为您要联邦的每个网格配置 SMCP:
- ❏ 为您要联邦的每个网格创建一个联邦出口网关
- ❏ 为您要联邦的每个网格创建一个联邦入口网关
- ❏ 配置唯一的信任域。
-
❏ 通过为每个网格对创建
ServiceMeshPeer资源来联邦两个或多个网格。 -
❏ 通过创建一个
ExportedServiceSet资源导出服务,使等网网格可以访问这些服务。 -
❏ 通过创建一个
ImportedServiceSet资源来导入服务,导入网格对等点共享的服务。
1.18.9. 为联邦配置 Service Mesh control plane 复制链接链接已复制到粘贴板!
在网格可以被联邦前,您必须为网格联邦配置 ServiceMeshControlPlane。因为属于联邦成员的所有网格都是相等的,并且每个网格都独立管理,所以您必须 为每个 加入联邦的网格配置 SMCP。
在以下示例中,red-mesh 的管理员将配置 SMCP 以同时使用 green-mesh 和 blue-mesh 进行联邦。
Red-mesh 的 SMCP 示例
| 参数 | 描述 | 值 | 默认值 |
|---|---|---|---|
spec:
cluster:
name:
| 集群的名称。您不需要指定集群名称,但有助于进行故障排除。 | 字符串 | N/A |
spec:
cluster:
network:
| 集群网络的名称。您不必为网络指定名称,但对配置和故障排除很有帮助。 | 字符串 | N/A |
1.18.9.1. 了解联邦网关 复制链接链接已复制到粘贴板!
您可以使用 网关 来管理入站和出站流量,允许您指定您要进入或离开网格的流量。
您可以使用入口和出口网关来管理进入和离开服务网格(North-South 流量)的流量。当您创建联邦网格时,您可以创建额外的入口/出口网关,以便联邦网格间的服务发现、联邦网格之间的通信,以及管理服务网格(East-West 流量)之间的流量流。
为了避免网格间的命名冲突,您必须为每个网格创建单独的出口和入口网关。例如,red-mesh 将具有单独的出口网关,用于发送到 green-mesh 和 blue-mesh 的流量。
| 参数 | 描述 | 值 | 默认值 |
|---|---|---|---|
spec:
gateways:
additionalEgress:
<egressName>:
| 在联邦中为每个网格对等点定义额外的出口网关。 | ||
spec:
gateways:
additionalEgress:
<egressName>:
enabled:
| 这个参数启用或禁用联邦出口。 |
|
|
spec:
gateways:
additionalEgress:
<egressName>:
requestedNetworkView:
| 与导出的服务关联的网络。 |
设置为网格 SMCP 中的 | |
spec:
gateways:
additionalEgress:
<egressName>:
routerMode:
| 网关要使用的路由器模式。 |
| |
|
| 为网关指定一个唯一标签,以防止联邦流量通过集群的默认系统网关流。 | ||
|
|
指定用于 TLS 和服务发现的 |
将 TLS 服务请求发送到联邦中的其他网格需要端口 | |
spec:
gateways:
additionalIngress:
| 在联邦中为每个 网格对等点定义额外的入口网关网关。 | ||
spec:
gateways:
additionalIgress:
<ingressName>:
enabled:
| 此参数启用或禁用联邦入口。 |
|
|
spec:
gateways:
additionalIngress:
<ingressName>:
routerMode:
| 网关要使用的路由器模式。 |
| |
|
| 入口网关服务必须通过在 OSI 模型的第 4 层运行并公开可用的负载均衡器公开。 |
| |
|
|
如果集群不支持 |
| |
|
| 为网关指定一个唯一标签,以防止联邦流量通过集群的默认系统网关流。 | ||
|
|
指定用于 TLS 和服务发现的 |
在向联邦中的其他网格接收 TLS 服务请求时,需要端口 | |
|
|
用于指定 |
如果指定,除了 |
在以下示例中,管理员使用 NodePort 服务与 green-mesh 来配置 SMCP。
NodePort 的 SMCP 示例
1.18.9.2. 了解联邦信任域参数 复制链接链接已复制到粘贴板!
联邦中的每个网格都必须有自己的唯一信任域。这个值用于在 ServiceMeshPeer 资源中配置 mesh federation。
| 参数 | 描述 | 值 | 默认值 |
|---|---|---|---|
spec:
security:
trust:
domain:
| 用于为网格指定信任域的唯一名称。域对于联邦中的每个网格都必须是唯一的。 |
| N/A |
控制台的步骤
按照以下步骤,使用 OpenShift Container Platform Web 控制台编辑 ServiceMeshControlPlane。本例使用 red-mesh 作为示例。
- 以具有 cluster-admin 角色的用户身份登录到 OpenShift Container Platform Web 控制台。
-
导航到 Operators
Installed Operators。 -
点 Project 菜单,选择安装 Service Mesh control plane 的项目。例如:
red-mesh-system。 - 点 Red Hat OpenShift Service Mesh Operator。
-
在 Istio Service Mesh Control Plane 选项卡中,点击
ServiceMeshControlPlane的名称,如red-mesh。 -
在 Create ServiceMeshControlPlane Details 页中,点
YAML修改您的配置。 -
修改
ServiceMeshControlPlane以添加联合入口和出口网关,并指定信任域。 - 点 Save。
通过 CLI 操作的步骤
按照以下步骤使用命令行创建或编辑 ServiceMeshControlPlane。本例使用 red-mesh 作为示例。
以具有
cluster-admin角色的用户身份登录 OpenShift Container Platform CLI。输入以下命令。然后在提示时输入您的用户名和密码。oc login --username=<NAMEOFUSER> https://<HOSTNAME>:6443
$ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:6443Copy to Clipboard Copied! Toggle word wrap Toggle overflow 切换到安装 Service Mesh control plane 的项目,如 red-mesh-system。
oc project red-mesh-system
$ oc project red-mesh-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
编辑
ServiceMeshControlPlane文件,添加联合入口和出口网关,并指定信任域。 运行以下命令编辑 Service Mesh control plane,其中
red-mesh-system是系统命名空间,red-mesh是ServiceMeshControlPlane对象的名称:oc edit -n red-mesh-system smcp red-mesh
$ oc edit -n red-mesh-system smcp red-meshCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令,其中
red-mesh-system是系统命名空间,以查看 Service Mesh control plane 安装的状态。oc get smcp -n red-mesh-system
$ oc get smcp -n red-mesh-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 当 READY 列指出所有组件都已就绪时,安装成功完成。
NAME READY STATUS PROFILES VERSION AGE red-mesh 10/10 ComponentsReady ["default"] 2.1.0 4m25s
NAME READY STATUS PROFILES VERSION AGE red-mesh 10/10 ComponentsReady ["default"] 2.1.0 4m25sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.18.10. 加入联邦网格 复制链接链接已复制到粘贴板!
您可以通过创建 ServiceMeshPeer 资源来声明两个网格之间的联邦。ServiceMeshPeer 资源定义了两个网格之间的联邦,您可以使用它为对等网格配置发现功能,访问对等网格网格,以及用于验证其他网格客户端的证书。
网格以一对一为基础联邦,因此每对等点都需要一对 ServiceMeshPeer 资源指定与其他服务网格的联邦连接。例如,联合名为 red 和 green 的两个网格需要两个 ServiceMeshPeer 文件。
-
在 red-mesh-system 上,为绿色网格创建一个
ServiceMeshPeer。 -
在 green-mesh-system 上,为红色网格创建一个
ServiceMeshPeer。
对名为 red, blue, 和 green 的三个网格进行联邦会需要六个 ServiceMeshPeer 文件。
-
在 red-mesh-system 上,为绿色网格创建一个
ServiceMeshPeer。 -
在 red-mesh-system 上,为蓝网格创建一个
ServiceMeshPeer。 -
在 green-mesh-system 上,为红色网格创建一个
ServiceMeshPeer。 -
在 green-mesh-system 上,为蓝网格创建一个
ServiceMeshPeer。 -
在 blue-mesh-system 上,为红色网格创建一个
ServiceMeshPeer。 -
在 blue-mesh-system 上,为绿色网格创建一个
ServiceMeshPeer。
ServiceMeshPeer 资源中的配置包括以下:
- 其他网格的 ingress 网关的地址,用于发现和服务请求。
- 用于与指定对等网格交互的本地入口和出口网关名称。
- 将请求发送到此网格时由其他网格使用的客户端 ID。
- 其他网格使用的信任域。
-
包含根证书的
ConfigMap名称,用于验证由其他网格使用的信任域中的客户端证书。
在以下示例中,red-mesh 的管理员使用 green-mesh 配置联邦。
red-mesh 的 ServiceMeshPeer 资源示例
| 参数 | 描述 | 值 |
|---|---|---|
metadata: name:
| 此资源配置联合的对等网格名称。 | 字符串 |
metadata: namespace:
| 此网格的系统命名空间,即安装了 Service Mesh control plane。 | 字符串 |
spec:
remote:
addresses:
| 对等网格提供请求的 ingress 网关的公共地址列表。 | |
spec:
remote:
discoveryPort:
| 地址处理发现请求的端口。 | 默认值为 8188 |
spec:
remote:
servicePort:
| 地址处理服务请求的端口。 | 默认值为 15443 |
spec:
gateways:
ingress:
name:
|
此网格上为从 peer 网格接收的请求提供服务的网格的 ingress 名称。例如: | |
spec:
gateways:
egress:
name:
|
此网格上为发送到 peer 网格的请求提供服务的出口名称。例如, | |
spec:
security:
trustDomain:
| peer 网格使用的信任域。 | <peerMeshName>.local |
spec:
security:
clientID:
| 对等网格在调用此网格时使用的客户端 ID。 | <peerMeshTrustDomain>/ns/<peerMeshSystem>/sa/<peerMeshEgressGatewayName>-service-account |
spec:
security:
certificateChain:
kind: ConfigMap
name:
|
包含根证书的资源的 kind(如 ConfigMap)和名称,用于验证由 peer 网格提供给这个网格的客户端和服务器证书。包含证书的配置映射条目的密钥应当是 | kind: ConfigMap name: <peerMesh>-ca-root-cert |
1.18.10.1. 创建 ServiceMeshPeer 资源 复制链接链接已复制到粘贴板!
先决条件
- 两个或多个 OpenShift Container Platform 4.6 或更高版本的集群。
- 集群必须已经联网。
- 支持与联邦网关关联的服务的负载均衡器必须配置为支持原始 TLS 流量。
-
每个集群都必须配置 2.1 或更高版本的
ServiceMeshControlPlane来支持部署的联邦。 -
具有
cluster-admin角色的帐户。
通过 CLI 操作的步骤
按照以下步骤,从命令行创建 ServiceMeshPeer 资源。本例演示,red-mesh 为 green-mesh 创建一个对等资源。
以具有
cluster-admin角色的用户身份登录 OpenShift Container Platform CLI。输入以下命令。然后在提示时输入您的用户名和密码。oc login --username=<NAMEOFUSER> <API token> https://<HOSTNAME>:6443
$ oc login --username=<NAMEOFUSER> <API token> https://<HOSTNAME>:6443Copy to Clipboard Copied! Toggle word wrap Toggle overflow 切换到安装 control plane 的项目,如
red-mesh-system。oc project red-mesh-system
$ oc project red-mesh-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 根据以下示例为您要联合的两个网格创建一个
ServiceMeshPeer文件。red-mesh 到 green-mesh 的 ServiceMeshPeer 资源示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来部署资源,其中
red-mesh-system是系统命名空间,servicemeshpeer.yaml包含您编辑的文件的完整路径:oc create -n red-mesh-system -f servicemeshpeer.yaml
$ oc create -n red-mesh-system -f servicemeshpeer.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要确认在红色网格和绿色网格间建立了连接,请在 red-mesh-system命名空间中检查 green-mesh
ServiceMeshPeer的状态:oc -n red-mesh-system get servicemeshpeer green-mesh -o yaml
$ oc -n red-mesh-system get servicemeshpeer green-mesh -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow red-mesh 和 green-mesh 之间的 ServiceMeshPeer 连接示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow status.discoveryStatus.active.remotes字段显示 peer mesh 中的 istiod(在本例中为绿色网格)连接到当前网格中的 istiod(本例中为红色网格)。status.discoveryStatus.active.watch字段显示当前网格中的 istiod 连接到对等网格中的 istiod。如果在
green-mesh-system中检查名为red-mesh的servicemeshpeer,您会从绿色网格的角度找到有关同一两个连接的信息。当两个网格之间没有建立连接时,
ServiceMeshPeshPeer状态在status.discoveryStatus.inactive字段中显示此状态。有关连接尝试失败的更多信息,请检查 Istiod 日志,访问日志处理对等网络中的出口流量,以及处理对等网格中当前网格的入口流量的 ingress 网关。
例如,如果红色网格无法连接到绿色网格,请检查以下日志:
- red-mesh-system 中的 Istiod-red-mesh
- red-mesh-system 中的 egress-green-mesh
- green-mesh-system 中的 ingress-red-mesh
1.18.11. 从联邦网格导出服务 复制链接链接已复制到粘贴板!
导出服务允许网格与联邦网格的另一个成员共享一个或多个服务。
您可以使用 ExportedServiceSet 资源,在一个网格中声明您要提供给联邦网格中的另一个对等点的服务。您必须明确声明每个服务要与同级服务器共享。
- 您可以根据命名空间或名称选择服务。
- 您可以使用通配符来选择服务;例如,导出命名空间中的所有服务。
-
您可以使用别名导出服务。例如,您可以将
foo/bar服务导出为custom-ns/bar。 -
您只能导出对网格系统命名空间可见的服务。例如:在另一个命名空间中,将
networking.istio.io/exportTo标签设置为 '.' 的服务不会是导出的候选者。 - 对于导出的服务,它们的目标服务将只看到来自入口网关的流量,而不是原始请求者(即,它们不会看到来自其他网格的出口网关的客户端 ID 或源自请求的工作负载)
以下示例是 red-mesh 导出至 green-mesh 的服务。
ExportedServiceSet 资源示例
| 参数 | 描述 | 值 |
|---|---|---|
metadata: name:
| 将此服务公开给的 ServiceMeshPeshPeer 的名称。 |
必须与 |
metadata: namespace:
| 包含此资源的项目/命名空间的名称(应该是网格的系统命名空间)。 | |
spec: exportRules: - type:
| 监管此服务的导出的规则类型。为服务找到的第一个匹配规则将用于导出。 |
|
|
|
要创建 | |
|
|
要在为服务创建使用别名的 | |
|
|
要创建 | |
|
|
要为服务创建使用别名的 |
使用名称"勘误"的服务从红色的所有命名空间导出到 blue-mesh。
将 west-data-center 命名空间中的所有服务导出到 green-mesh
1.18.11.1. 创建 ExportedServiceSet 复制链接链接已复制到粘贴板!
您可以创建一个 ExportedServiceSet 资源来显式声明您要提供给网格对等的服务。
服务导出为 <export-name>.<export-namespace>.svc.<ServiceMeshPeer.name>-exports.local,它将自动路由到目标服务。这是导出的服务在导出网格中已知的名称。当入口网关收到用于此名称的请求时,它将被路由到要导出的实际服务。例如,如果名为 ratings.red-mesh-info 的服务导出至 green-mesh 作为 ratings.bookinfo,则服务将在名称 ratings.bookinfo.svc.green-mesh-exports.local 下导出,由该主机名的 ingress 网关接收的流量将路由到 ratings.red-mesh-bookinfo 服务。
前提条件
-
为网格联邦配置了集群和
ServiceMeshControlPlane。 -
具有
cluster-admin角色的帐户。
您可以配置服务以进行导出,即使这些服务尚不存在。当部署与 ExportedServiceSet 中指定的值匹配的服务时,将自动导出该服务。
通过 CLI 操作的步骤
按照以下步骤,从命令行创建 ExportedServiceSet。
以具有
cluster-admin角色的用户身份登录 OpenShift Container Platform CLI。输入以下命令。然后在提示时输入您的用户名和密码。oc login --username=<NAMEOFUSER> <API token> https://<HOSTNAME>:6443
$ oc login --username=<NAMEOFUSER> <API token> https://<HOSTNAME>:6443Copy to Clipboard Copied! Toggle word wrap Toggle overflow 切换到安装 Service Mesh control plane 的项目,如
red-mesh-system。oc project red-mesh-system
$ oc project red-mesh-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 根据以下示例创建
ExportedServiceSet文件,其中red-mesh将服务导出到green-mesh。从 red-mesh 到 green-mesh 的 ExportedServiceSet 资源示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,在 red-mesh-system 命名空间中上传并创建
ExportedServiceSet资源。oc create -n <ControlPlaneNamespace> -f <ExportedServiceSet.yaml>
$ oc create -n <ControlPlaneNamespace> -f <ExportedServiceSet.yaml>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
oc create -n red-mesh-system -f export-to-green-mesh.yaml
$ oc create -n red-mesh-system -f export-to-green-mesh.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
根据需要为联合网格中的每个网格对等创建额外的
ExportedServiceSets。 要验证您从
red-mesh导出的服务以使用green-mesh共享的服务,请运行以下命令:oc get exportedserviceset <PeerMeshExportedTo> -o yaml
$ oc get exportedserviceset <PeerMeshExportedTo> -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
oc get exportedserviceset green-mesh -o yaml
$ oc get exportedserviceset green-mesh -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来验证红色导出与 green-mesh 共享的服务:
oc get exportedserviceset <PeerMeshExportedTo> -o yaml
$ oc get exportedserviceset <PeerMeshExportedTo> -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
oc -n red-mesh-system get exportedserviceset green-mesh -o yaml
$ oc -n red-mesh-system get exportedserviceset green-mesh -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从红色网格导出的服务验证与绿色网格共享的示例。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow status.exportedServices数组列出了当前导出的服务(这些服务与ExportedServiceSet 对象中的导出规则匹配)。数组中的每个条目都指明导出的服务的名称,以及所导出的本地服务的详细信息。如果缺少您要导出的服务,请确认 Service 对象存在,其名称或标签与
ExportedServiceSet对象中定义的exportRules匹配,并且 Service 对象的命名空间被配置为使用ServiceMeshMemberRoll或ServiceMeshMember对象作为服务网格的成员。
1.18.12. 将服务导入到联邦网格中 复制链接链接已复制到粘贴板!
导入服务可让您明确指定从另一个网格导出的服务应在服务网格内访问。
您可以使用 ImportedServiceSet 资源来选择导入的服务。网格只可使用由网格 peer 导出并明确导入的服务。您没有显式导入的服务不会在网格中提供。
- 您可以根据命名空间或名称选择服务。
- 您可以使用通配符来选择服务,例如,将导出的所有服务导入到命名空间。
- 您可以使用标签选择器(可以是全局到网格)或作用于特定成员命名空间来选择用于导出的服务。
-
您可以使用别名导入服务。例如,您可以将
custom-ns/bar服务导入为other-mesh/bar。 -
您可以指定一个自定义域后缀,该后缀将附加到所导入服务的
name.namespace的完全限定域名中;例如bar.other-mesh.imported.local。
以下示例是 green-mesh 导入 通过 red-mesh 导出的服务。
ImportedServiceSet 示例
| 参数 | 描述 | 值 |
|---|---|---|
metadata: name:
| 将服务导出到联邦网格的 ServiceMeshPeer 的名称。 | |
metadata: namespace:
| 包含 ServiceMeshPeer 资源(网格系统命名空间)的命名空间名称。 | |
spec: importRules: - type:
| 监管该服务导入的规则类型。为服务找到的第一个匹配规则将用于导入。 |
|
|
|
要创建 | |
spec:
importRules:
- type: NameSelector
importAsLocal:
|
设置为 |
|
|
|
要在为服务创建使用别名的 |
将"info/ratings"服务从红色导入到 blue-mesh
将 red-mesh 的 west-data-center 命名空间中的所有服务导入到 green-mesh 命名空间中。这些服务可作为 <name>.west-data-center.svc.red-mesh-imports.local 访问
1.18.12.1. 创建 ImportedServiceSet 复制链接链接已复制到粘贴板!
您可以创建一个 ImportedServiceSet 资源来显式声明您要导入到网格中的服务。
服务使用名称 <exported-name>.<exported-namespace>.svc.<ServiceMeshPeer.name>.remote 导入,它是一个"hidden"服务,仅在出口网关命名空间中可见,并与导出的服务主机名相关联。默认情况下,该服务将本地作为 <export-name>.<export-namespace>.<domainSuffix> 提供,其中 domainSuffix 是 svc.<ServiceMeshPeshPeer.name>-imports.local, 除非 importAsLocal 设置为 true,否则 domainSuffix 为 svc.cluster.local。如果 importAsLocal 设为 false,则会应用导入规则中的域后缀。您可以像网格中的任何其他服务一样对待本地导入。它通过出口网关自动路由,它将重定向到导出服务的远程名称。
前提条件
-
为网格联邦配置了集群和
ServiceMeshControlPlane。 -
具有
cluster-admin角色的帐户。
您可以配置用于导入的服务,即使它们尚未导出。当部署并导出与 ImportedServiceSet 中指定的值匹配的服务时,它会被自动导入。
通过 CLI 操作的步骤
按照以下步骤,通过命令行创建 ImportedServiceSet。
以具有
cluster-admin角色的用户身份登录 OpenShift Container Platform CLI。输入以下命令。然后在提示时输入您的用户名和密码。oc login --username=<NAMEOFUSER> <API token> https://<HOSTNAME>:6443
$ oc login --username=<NAMEOFUSER> <API token> https://<HOSTNAME>:6443Copy to Clipboard Copied! Toggle word wrap Toggle overflow 切换到安装 Service Mesh control plane 的项目,如
green-mesh-system。oc project green-mesh-system
$ oc project green-mesh-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 根据以下示例创建一个
ImportedServiceSet文件,其中green-mesh导入之前通过red-mesh导出的服务。从 red-mesh 到 green-mesh 的 ImportedServiceSet 资源示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令在 green-mesh-system 命名空间中上传并创建
ImportedServiceSet资源。oc create -n <ControlPlaneNamespace> -f <ImportedServiceSet.yaml>
$ oc create -n <ControlPlaneNamespace> -f <ImportedServiceSet.yaml>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
oc create -n green-mesh-system -f import-from-red-mesh.yaml
$ oc create -n green-mesh-system -f import-from-red-mesh.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
根据需要为联邦网格中的每个网格对等创建额外的
ImportedServiceSet资源。 要验证已导入到
green-mesh中的服务,请运行以下命令:oc get importedserviceset <PeerMeshImportedInto> -o yaml
$ oc get importedserviceset <PeerMeshImportedInto> -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
oc get importedserviceset green-mesh -o yaml
$ oc get importedserviceset green-mesh -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令以验证导入到网格中的服务。
oc get importedserviceset <PeerMeshImportedInto> -o yaml
$ oc get importedserviceset <PeerMeshImportedInto> -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
importedserviceset/red-mesh' object in the 'green-mesh-system命名空间中的 status 部分验证从红色网格导出的服务是否已导入到绿色网格中 :oc -n green-mesh-system get importedserviceset/red-mesh -o yaml
$ oc -n green-mesh-system get importedserviceset/red-mesh -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在上例中,仅导入 ratings 服务,如
localService下的填充字段所示。reviews 服务可用于导入,但目前并不导入,因为它与ImportedServiceSet对象中的任何importRules不匹配。
1.18.13. 为故障转移配置一个联邦网格 复制链接链接已复制到粘贴板!
故障转移功能可以实现自动、无缝地切换到可靠的备份系统,例如切换到另一台服务器。如果是联邦网格,您可以在一个网格中配置服务,以便在另一个网格中切换到服务。
您可以通过在 ImportedServiceSet 资源中设置 importAsLocal 和 locality 设置来配置故障转移的联邦,然后配置 DestinationRule,将服务被配置为 ImportedServiceSet 中指定的本地性。
先决条件
- 两个或多个 OpenShift Container Platform 4.6 或更高版本的集群已进行了联网和联邦。
-
已为联邦网格中的每个网格中的网格对等点创建
ExportedServiceSet资源。 -
已为联邦网格中的每个网格中的网格对等点创建
ImportedServiceSet资源。 -
具有
cluster-admin角色的帐户。
1.18.13.1. 为故障转移配置 ImportedServiceSet 复制链接链接已复制到粘贴板!
管理员可以利用本地方式管理负载平衡,根据流量的来源和终止位置控制流量到端点的分布。这些本地设置使用任意标签指定,它以 {region}/{zone}/{sub-zone} 的形式指定了一个分层级结构的本地设置。
在本节示例中,green-mesh 位于 us-east 地区,而 red-mesh 位于 us-west 区域。
从 red-mesh 到 green-mesh 的ImportedServiceSet 资源示例
| 名称 | 描述 | 类型 |
|---|---|---|
| 区域: | 导入的服务所在的区域。 | 字符串 |
| 子区: | 导入服务的子区(zone)位于其中。I Subzone 被指定,还必须指定 Zone。 | 字符串 |
| zone: | 导入的服务所在的区。如果指定了 Zone,还必须指定 Region。 | 字符串 |
流程
以具有
cluster-admin角色的用户身份登录 OpenShift Container Platform CLI,请输入以下命令:oc login --username=<NAMEOFUSER> <API token> https://<HOSTNAME>:6443
$ oc login --username=<NAMEOFUSER> <API token> https://<HOSTNAME>:6443Copy to Clipboard Copied! Toggle word wrap Toggle overflow 进入到安装 Service Mesh control plane 的项目,请输入以下命令:
oc project <smcp-system>
$ oc project <smcp-system>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
green-mesh-system。oc project green-mesh-system
$ oc project green-mesh-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑
ImportedServiceSet文件,其中<ImportedServiceSet.yaml>包含您要编辑的文件的完整路径,请输入以下命令:oc edit -n <smcp-system> -f <ImportedServiceSet.yaml>
$ oc edit -n <smcp-system> -f <ImportedServiceSet.yaml>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如,如果要将从 red-mesh-system 导入到 green-mesh-system 的文件(如前面的
ImportedServiceSet示例所示)。oc edit -n green-mesh-system -f import-from-red-mesh.yaml
$ oc edit -n green-mesh-system -f import-from-red-mesh.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 修改该文件:
-
将
spec.importRules.importAsLocal设置为true。 -
将
spec.locality设置为region,zone, 或subzone。 - 保存您的更改。
-
将
1.18.13.2. 为故障转移配置 DestinationRule 复制链接链接已复制到粘贴板!
创建配置以下内容的 DestinationRule 资源:
- 服务的 Outlier 检测。需要此项才能使故障转移正常工作。特别是,它会配置 sidecar 代理,以获知服务端点处于不健康状态,并最终触发对下一个位置的故障转移。
- 各地区之间的故障转移策略。这样可确保除区域边界外的故障切换将具有可预见的。
流程
以具有
cluster-admin角色的用户身份登录到 OpenShift Container Platform CLI。输入以下命令。然后在提示时输入您的用户名和密码。oc login --username=<NAMEOFUSER> <API token> https://<HOSTNAME>:6443
$ oc login --username=<NAMEOFUSER> <API token> https://<HOSTNAME>:6443Copy to Clipboard Copied! Toggle word wrap Toggle overflow 切换到安装 Service Mesh control plane 的项目。
oc project <smcp-system>
$ oc project <smcp-system>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
green-mesh-system。oc project green-mesh-system
$ oc project green-mesh-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 根据以下示例创建一个
DestinationRule文件,如果 green-mesh 不可用,则流量应从us-east区域中的 green-mesh 路由到us-west中的 red-mesh。DestinationRule示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 部署
DestinationRule,其中<DestinationRule>包含到您的文件的完整路径,请输入以下命令:oc create -n <application namespace> -f <DestinationRule.yaml>
$ oc create -n <application namespace> -f <DestinationRule.yaml>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
oc create -n info -f green-mesh-us-west-DestinationRule.yaml
$ oc create -n info -f green-mesh-us-west-DestinationRule.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.18.14. 从联邦网格中删除服务 复制链接链接已复制到粘贴板!
如果您需要从联邦网格中删除服务,例如,如果服务已过时或者已被其他服务替换,您可以这样做。
1.18.14.1. 从单个网格中删除服务 复制链接链接已复制到粘贴板!
从不再应该访问该服务的网格对等点的 ImportedServiceSet 资源中删除服务条目。
1.18.14.2. 从整个联邦网格中删除服务 复制链接链接已复制到粘贴板!
从拥有该服务的网格的 ExportedServiceSet 资源中删除服务条目。
1.18.15. 从联邦网格中删除网格 复制链接链接已复制到粘贴板!
如果您需要从联邦中删除网格,您可以这样做。
-
编辑删除的网格的
ServiceMeshControlPlane资源,以删除所有对等网格的联邦入口网关。 对于已删除网格的每个网格对等点,请执行以下操作:
-
删除链接两个网格的
ServiceMeshPeer资源。 -
编辑 peer mesh 的
ServiceMeshControlPlane资源,以删除服务已删除网格的出口网关。
-
删除链接两个网格的