您可以通过创建 `ServiceMeshPeer` 资源来声明两个网格之间的联邦。`ServiceMeshPeer` 资源定义了两个网格之间的联邦,您可以使用它来配置对等网格的发现、对对等网格的访问以及用于验证其他网格客户端的证书。
网格是一对一进行联邦的,因此每对对等体都需要一对 `ServiceMeshPeer` 资源来指定与其他服务网格的联邦连接。例如,联合名为 `red` 和 `green` 的两个网格需要两个 `ServiceMeshPeer` 文件。
-
在 red-mesh-system 上,为 green 网格创建一个 `ServiceMeshPeer`。
-
在 green-mesh-system 上,为 red 网格创建一个 `ServiceMeshPeer`。
联合名为 `red`、`blue` 和 `green` 的三个网格需要六个 `ServiceMeshPeer` 文件。
-
在 red-mesh-system 上,为 green 网格创建一个 `ServiceMeshPeer`。
-
在 red-mesh-system 上,为 blue 网格创建一个 `ServiceMeshPeer`。
-
在 green-mesh-system 上,为 red 网格创建一个 `ServiceMeshPeer`。
-
在 green-mesh-system 上,为 blue 网格创建一个 `ServiceMeshPeer`。
-
在 blue-mesh-system 上,为 red 网格创建一个 `ServiceMeshPeer`。
-
在 blue-mesh-system 上,为 green 网格创建一个 `ServiceMeshPeer`。
`ServiceMeshPeer` 资源中的配置包括以下内容
在以下示例中,`red-mesh` 的管理员正在配置与 `green-mesh` 的联邦。
red-mesh 的 ServiceMeshPeer 资源示例
kind: ServiceMeshPeer
apiVersion: federation.maistra.io/v1
metadata:
name: green-mesh
namespace: red-mesh-system
spec:
remote:
addresses:
- ingress-red-mesh.green-mesh-system.apps.domain.com
gateways:
ingress:
name: ingress-green-mesh
egress:
name: egress-green-mesh
security:
trustDomain: green-mesh.local
clientID: green-mesh.local/ns/green-mesh-system/sa/egress-red-mesh-service-account
certificateChain:
kind: ConfigMap
name: green-mesh-ca-root-cert
表 4. ServiceMeshPeer 配置参数
参数 |
描述 |
值 |
|
|
|
|
此网格的系统命名空间,即安装 Service Mesh 控制平面的位置。
|
|
|
对等网格入口网关的公共地址列表,这些网关正在处理来自此网格的请求。
|
|
spec:
remote:
discoveryPort: |
|
|
spec:
remote:
servicePort: |
|
|
spec:
gateways:
ingress:
name: |
此网格上正在处理从对等网格接收到的请求的入口的名称。例如,`ingress-green-mesh`。
|
|
spec:
gateways:
egress:
name: |
此网格上正在处理发送到对等网格的请求的出口的名称。例如,`egress-green-mesh`。
|
|
spec:
security:
trustDomain: |
|
|
spec:
security:
clientID: |
|
<peerMeshTrustDomain>/ns/<peerMeshSystem>/sa/<peerMeshEgressGatewayName>-service-account
|
spec:
security:
certificateChain:
kind: ConfigMap
name: |
包含用于验证对等网格向此网格提供的客户端和服务器证书的根证书的资源的种类(例如,ConfigMap)和名称。包含证书的 configmap 条目的密钥应为 `root-cert.pem`。
|
kind: ConfigMap name: <peerMesh>-ca-root-cert
|
创建 ServiceMeshPeer 资源
先决条件
-
两个或多个 Red Hat OpenShift Service on AWS 4.6 或更高版本的集群。
-
集群必须已经联网。
-
支持与联邦网关关联的服务的负载均衡器必须配置为支持原始 TLS 流量。
-
每个集群都必须部署了已配置为支持联邦的 2.1 或更高版本的 `ServiceMeshControlPlane`。
-
具有 `cluster-admin` 角色的帐户。
CLI 操作步骤
请按照以下步骤从命令行创建ServiceMeshPeer
资源。此示例展示了red-mesh
如何为green-mesh
创建对等资源。
-
以具有 `cluster-admin` 角色的用户身份登录 Red Hat OpenShift Service on AWS CLI。输入以下命令。然后,在系统提示时输入您的用户名和密码。
$ oc login --username=<NAMEOFUSER> <API token> https://<HOSTNAME>:6443
-
切换到安装控制平面的项目,例如,red-mesh-system
。
$ oc project red-mesh-system
-
基于以下示例,为要联合的两个网格创建ServiceMeshPeer
文件。
red-mesh到green-mesh的ServiceMeshPeer资源示例
kind: ServiceMeshPeer
apiVersion: federation.maistra.io/v1
metadata:
name: green-mesh
namespace: red-mesh-system
spec:
remote:
addresses:
- ingress-red-mesh.green-mesh-system.apps.domain.com
gateways:
ingress:
name: ingress-green-mesh
egress:
name: egress-green-mesh
security:
trustDomain: green-mesh.local
clientID: green-mesh.local/ns/green-mesh-system/sa/egress-red-mesh-service-account
certificateChain:
kind: ConfigMap
name: green-mesh-ca-root-cert
-
运行以下命令来部署资源,其中red-mesh-system
是系统命名空间,servicemeshpeer.yaml
包含您编辑的文件的完整路径
$ oc create -n red-mesh-system -f servicemeshpeer.yaml
-
要确认red-mesh和green-mesh之间的连接是否已建立,请检查red-mesh-system命名空间中green-mesh的ServiceMeshPeer
的状态。
$ oc -n red-mesh-system get servicemeshpeer green-mesh -o yaml
red-mesh和green-mesh之间ServiceMeshPeer连接示例
status:
discoveryStatus:
active:
- pod: istiod-red-mesh-b65457658-9wq5j
remotes:
- connected: true
lastConnected: "2021-10-05T13:02:25Z"
lastFullSync: "2021-10-05T13:02:25Z"
source: 10.128.2.149
watch:
connected: true
lastConnected: "2021-10-05T13:02:55Z"
lastDisconnectStatus: 503 Service Unavailable
lastFullSync: "2021-10-05T13:05:43Z"
status.discoveryStatus.active.remotes
字段显示对等网格(在此示例中为green-mesh)中的istiod已连接到当前网格(在此示例中为red-mesh)中的istiod。
status.discoveryStatus.active.watch
字段显示当前网格中的istiod已连接到对等网格中的istiod。
如果您检查green-mesh-system
中名为red-mesh
的servicemeshpeer
,您可以从green-mesh的角度找到关于这两个连接的相同信息。
当两个网格之间的连接未建立时,ServiceMeshPeer
状态会在status.discoveryStatus.inactive
字段中指示这一点。
有关连接尝试失败原因的更多信息,请检查Istiod日志、处理对等方出站流量的出站网关的访问日志以及对等方中处理当前网格入站流量的入站网关。
例如,如果red-mesh无法连接到green-mesh,请检查以下日志:
-
red-mesh-system中的istiod-red-mesh
-
red-mesh-system中的egress-green-mesh
-
green-mesh-system中的ingress-red-mesh