Red Hat OpenShift Service Mesh 安装一个默认配置为多租户的ServiceMeshControlPlane
。Red Hat OpenShift Service Mesh 使用多租户 Operator 来管理服务网格控制平面的生命周期。在网格内,命名空间用于租户。
Red Hat OpenShift Service Mesh 使用ServiceMeshControlPlane
资源来管理网格安装,其范围默认限制为包含该资源的命名空间。您可以使用ServiceMeshMemberRoll
和ServiceMeshMember
资源将其他命名空间包含到网格中。一个命名空间只能包含在一个网格中,并且可以在单个 OpenShift 集群中安装多个网格。
典型的服务网格部署使用单个服务网格控制平面来配置网格中服务之间的通信。Red Hat OpenShift Service Mesh 支持“软多租户”,其中每个租户只有一个控制平面和一个网格,并且集群中可以存在多个独立的控制平面。多租户部署指定可以访问服务网格的项目,并将服务网格与其他控制平面实例隔离。
集群管理员可以控制和查看所有 Istio 控制平面,而租户管理员只能控制其特定的服务网格、Kiali 和 Jaeger 实例。
您可以授予团队权限,使其只能将工作负载部署到给定的命名空间或一组命名空间。如果服务网格管理员授予了mesh-user
角色,用户可以创建ServiceMeshMember
资源以将命名空间添加到ServiceMeshMemberRoll
。
关于迁移到集群范围网格
在集群范围网格中,一个ServiceMeshControlPlane
(SMCP) 监视整个集群的所有命名空间。您可以使用 Red Hat OpenShift Service Mesh 2.5 或更高版本将现有集群从多租户网格迁移到集群范围网格。
|
如果集群必须具有多个 SMCP,则无法迁移到集群范围网格。
|
默认情况下,集群范围网格会发现构成集群的所有命名空间。但是,您可以将网格配置为访问有限的命名空间集。命名空间默认不接收 sidecar 注入。您必须指定哪些命名空间接收 sidecar 注入。
同样,您必须指定哪些 Pod 接收 sidecar 注入。存在于接收 sidecar 注入的命名空间中的 Pod 不会继承 sidecar 注入。将 sidecar 注入应用于命名空间和 Pod 是单独的操作。
如果在迁移到集群范围网格时更改 Istio 版本,则必须重新启动应用程序。如果您使用相同的 Istio 版本,应用程序代理将连接到集群范围网格的新 SMCP,并且工作方式与多租户网格相同。
使用 Web 控制台包含和排除集群范围网格中的命名空间
使用 Red Hat OpenShift Service on AWS Web 控制台,您可以将发现选择器添加到集群范围网格中的ServiceMeshControlPlane
资源。发现选择器定义控制平面可以发现的命名空间。控制平面会忽略与任何发现选择器都不匹配的任何命名空间,这会将命名空间从网格中排除。
|
如果在控制平面命名空间中安装入口或出口网关,则必须在发现选择器中包含控制平面命名空间。
|
先决条件
-
您已安装 Red Hat OpenShift Service Mesh Operator。
-
您已部署ServiceMeshControlPlane
资源。
-
您已登录为具有cluster-admin
角色的用户。如果您使用 Red Hat OpenShift Dedicated,则您已登录为具有dedicated-admin
角色的用户。
步骤
-
登录到 Red Hat OpenShift Service on AWS Web 控制台。
-
导航到**Operators** → **Installed Operators**。
-
单击 Red Hat OpenShift Service Mesh Operator。
-
单击**Istio Service Mesh Control Plane**。
-
单击控制平面的名称。
-
单击**YAML**。
-
修改 YAML 文件,以便ServiceMeshControlPlane
资源的spec.meshConfig
字段包含发现选择器。
|
配置Istiod 服务可以发现的命名空间时,请排除可能包含不应公开到网格其余部分的敏感服务的命名空间。
|
在以下示例中,Istiod
服务会发现任何标记为istio-discovery: enabled
的命名空间,或任何名称为bookinfo
、httpbin
或istio-system
的命名空间。
apiVersion: maistra.io/v2
kind: ServiceMeshControlPlane
metadata:
name: basic
spec:
mode: ClusterWide
meshConfig:
discoverySelectors:
- matchLabels:
istio-discovery: enabled (1)
- matchExpressions:
- key: kubernetes.io/metadata.name (2)
operator: In
values:
- bookinfo
- httpbin
- istio-system
1 |
确保网格发现包含标签istio-discovery: enabled 的命名空间。 |
2 |
确保网格发现命名空间bookinfo 、httpbin 和istio-system 。 |
如果命名空间与任何发现选择器匹配,则网格会发现该命名空间。网格会排除与任何发现选择器都不匹配的命名空间。
-
保存文件。
使用 CLI 包含和排除集群范围网格中的命名空间
使用 Red Hat OpenShift Service on AWS CLI,您可以将发现选择器添加到集群范围网格中的ServiceMeshControlPlane
资源。发现选择器定义控制平面可以发现的命名空间。控制平面会忽略与任何发现选择器都不匹配的任何命名空间,这会将命名空间从网格中排除。
|
如果在控制平面命名空间中安装入口或出口网关,则必须在发现选择器中包含控制平面命名空间。
|
先决条件
-
您已安装 Red Hat OpenShift Service Mesh Operator。
-
您已部署ServiceMeshControlPlane
资源。
-
您已登录为具有cluster-admin
角色的用户。如果您使用 Red Hat OpenShift Dedicated,则您已登录为具有dedicated-admin
角色的用户。
步骤
-
登录到 Red Hat OpenShift Service on AWS CLI。
-
通过运行以下命令打开ServiceMeshControlPlane
资源作为 YAML 文件
$ oc -n istio-system edit smcp <name> (1)
1 |
<name> 代表ServiceMeshControlPlane 资源的名称。 |
-
修改 YAML 文件,以便ServiceMeshControlPlane
资源的spec.meshConfig
字段包含发现选择器。
|
配置Istiod 服务可以发现的命名空间时,请排除可能包含不应公开到网格其余部分的敏感服务的命名空间。
|
在以下示例中,Istiod
服务会发现任何标记为istio-discovery: enabled
的命名空间,或任何名称为bookinfo
、httpbin
或istio-system
的命名空间。
apiVersion: maistra.io/v2
kind: ServiceMeshControlPlane
metadata:
name: basic
spec:
mode: ClusterWide
meshConfig:
discoverySelectors:
- matchLabels:
istio-discovery: enabled (1)
- matchExpressions:
- key: kubernetes.io/metadata.name (2)
operator: In
values:
- bookinfo
- httpbin
- istio-system
1 |
确保网格发现包含标签istio-discovery: enabled 的命名空间。 |
2 |
确保网格发现命名空间bookinfo 、httpbin 和istio-system 。 |
如果命名空间与任何发现选择器匹配,则网格会发现该命名空间。网格会排除与任何发现选择器都不匹配的命名空间。
-
保存文件并退出编辑器。
使用 Web 控制台定义集群范围网格中哪些命名空间接收 sidecar 注入
默认情况下,Red Hat OpenShift Service Mesh Operator 使用成员选择器来识别哪些命名空间接收 sidecar 注入。在ServiceMeshMemberRoll
资源中定义的与istio-injection=enabled
标签不匹配的命名空间不会接收 sidecar 注入。
|
使用发现选择器来确定网格可以发现哪些命名空间,不会影响 sidecar 注射。发现命名空间和配置 sidecar 注射是两个独立的操作。
|
先决条件
-
您已安装 Red Hat OpenShift Service Mesh Operator。
-
您已部署了一个带有 `mode: ClusterWide` 注解的 `ServiceMeshControlPlane` 资源。
-
您已登录为具有cluster-admin
角色的用户。如果您使用 Red Hat OpenShift Dedicated,则您已登录为具有dedicated-admin
角色的用户。
步骤
-
登录到 Red Hat OpenShift Service on AWS Web 控制台。
-
导航到**Operators** → **Installed Operators**。
-
单击 Red Hat OpenShift Service Mesh Operator。
-
点击 **Istio 服务网格成员角色**。
-
点击 `ServiceMeshMemberRoll` 资源。
-
单击**YAML**。
-
通过添加匹配 `inject` 标签的成员选择器来修改 `ServiceMeshMemberRoll` 资源中的 `spec.memberSelectors` 字段。以下示例使用 `istio-injection: enabled`
apiVersion: maistra.io/v1
kind: ServiceMeshMemberRoll
metadata:
name: default
spec:
memberSelectors:
- matchLabels:
istio-injection: enabled (1)
-
保存文件。
使用 CLI 在集群范围的网格中定义哪些命名空间接收 sidecar 注射
默认情况下,Red Hat OpenShift Service Mesh Operator 使用成员选择器来识别哪些命名空间接收 sidecar 注入。在ServiceMeshMemberRoll
资源中定义的与istio-injection=enabled
标签不匹配的命名空间不会接收 sidecar 注入。
|
使用发现选择器来确定网格可以发现哪些命名空间,不会影响 sidecar 注射。发现命名空间和配置 sidecar 注射是两个独立的操作。
|
先决条件
-
您已安装 Red Hat OpenShift Service Mesh Operator。
-
您已部署了一个带有 `mode: ClusterWide` 注解的 `ServiceMeshControlPlane` 资源。
-
您已登录为具有cluster-admin
角色的用户。如果您使用 Red Hat OpenShift Dedicated,则您已登录为具有dedicated-admin
角色的用户。
步骤
-
登录到 Red Hat OpenShift Service on AWS CLI。
-
编辑 `ServiceMeshMemberRoll` 资源。
$ oc edit smmr -n <controlplane-namespace>
-
通过添加匹配 `inject` 标签的成员选择器来修改 `ServiceMeshMemberRoll` 资源中的 `spec.memberSelectors` 字段。以下示例使用 `istio-injection: enabled`
apiVersion: maistra.io/v1
kind: ServiceMeshMemberRoll
metadata:
name: default
spec:
memberSelectors:
- matchLabels:
istio-injection: enabled (1)
-
保存文件并退出编辑器。
使用 Web 控制台从集群范围的网格中排除单个 Pod
如果 Pod 应用了 `sidecar.istio.io/inject: true` 注解,并且该 Pod 存在于与 `ServiceMeshMemberRoll` 资源中定义的标签选择器或成员列表匹配的命名空间中,则该 Pod 将接收 sidecar 注射。
如果 Pod 未应用 `sidecar.istio.io/inject` 注解,则无法接收 sidecar 注射。
先决条件
-
您已安装 Red Hat OpenShift Service Mesh Operator。
-
您已部署了一个带有 `mode: ClusterWide` 注解的 `ServiceMeshControlPlane` 资源。
-
您已登录为具有cluster-admin
角色的用户。如果您使用 Red Hat OpenShift Dedicated,则您已登录为具有dedicated-admin
角色的用户。
步骤
-
登录到 Red Hat OpenShift Service on AWS Web 控制台。
-
导航到 **工作负载** → **部署**。
-
点击部署的名称。
-
单击**YAML**。
-
修改 YAML 文件以部署一个接收 sidecar 注射的应用程序和一个不接收 sidecar 注射的应用程序,如下例所示
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
annotations:
sidecar.istio.io/inject: 'true' (1)
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-without-sidecar
spec:
selector:
matchLabels:
app: nginx-without-sidecar
template:
metadata:
labels:
app: nginx-without-sidecar (2)
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
1 |
此 Pod 应用了 `sidecar.istio.io/inject` 注解,因此它接收 sidecar 注射。 |
2 |
此 Pod 没有该注解,因此它不接收 sidecar 注射。 |
-
保存文件。
使用 CLI 从集群范围的网格中排除单个 Pod
如果 Pod 应用了 `sidecar.istio.io/inject: true` 注解,并且该 Pod 存在于与 `ServiceMeshMemberRoll` 资源中定义的标签选择器或成员列表匹配的命名空间中,则该 Pod 将接收 sidecar 注射。
如果 Pod 未应用 `sidecar.istio.io/inject` 注解,则无法接收 sidecar 注射。
先决条件
-
您已安装 Red Hat OpenShift Service Mesh Operator。
-
您已部署了一个带有 `mode: ClusterWide` 注解的 `ServiceMeshControlPlane` 资源。
-
您已登录为具有cluster-admin
角色的用户。如果您使用 Red Hat OpenShift Dedicated,则您已登录为具有dedicated-admin
角色的用户。
步骤
-
登录到 Red Hat OpenShift Service on AWS CLI。
-
通过运行以下命令编辑部署
$ oc edit deployment -n <namespace> <deploymentName>
-
修改 YAML 文件以部署一个接收 sidecar 注射的应用程序和一个不接收 sidecar 注射的应用程序,如下例所示
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
annotations:
sidecar.istio.io/inject: 'true' (1)
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-without-sidecar
spec:
selector:
matchLabels:
app: nginx-without-sidecar
template:
metadata:
labels:
app: nginx-without-sidecar (2)
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
1 |
此 Pod 应用了 `sidecar.istio.io/inject` 注解,因此它接收 sidecar 注射。 |
2 |
此 Pod 没有该注解,因此它不接收 sidecar 注射。 |
-
保存文件。