$ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:6443
一个项目包含服务;但是,只有在您将项目添加到服务网格后,这些服务才可用。
安装操作符并创建ServiceMeshControlPlane
资源后,请将一个或多个项目添加到服务网格。
在 OpenShift Dedicated 中,项目本质上是具有附加注释的 Kubernetes 命名空间,例如项目中可用的用户 ID 范围。通常,OpenShift Dedicated Web 控制台使用术语“项目”,而 CLI 使用术语“命名空间”,但这两个术语基本同义。 |
您可以使用 OpenShift Dedicated Web 控制台或 CLI 将项目添加到现有服务网格。有三种方法可以将项目添加到服务网格
在ServiceMeshMemberRoll
资源中指定项目名称。
在ServiceMeshMemberRoll
资源的spec.memberSelectors
字段中配置标签选择器。
在项目中创建ServiceMeshMember
资源。
如果您使用第一种方法,则必须创建ServiceMeshMemberRoll
资源。
ServiceMeshMemberRoll
列出了属于 Service Mesh 控制平面的项目。只有列在 ServiceMeshMemberRoll
中的项目才会受到控制平面的影响。除非您将项目添加到特定控制平面部署的成员列表中,否则该项目不属于服务网格。
您必须在与 ServiceMeshControlPlane
相同的项目(例如 istio-system
)中创建名为 default
的 ServiceMeshMemberRoll
资源。
您可以从 Web 控制台向 Service Mesh 成员列表添加一个或多个项目。在此示例中,istio-system
是 Service Mesh 控制平面项目的名称。
已安装并验证的 Red Hat OpenShift Service Mesh Operator。
要添加到服务网格的现有项目列表。
登录到 OpenShift Dedicated Web 控制台。
如果您还没有网格的服务,或者您是从头开始,请为您的应用程序创建一个项目。它必须与您安装 Service Mesh 控制平面的项目不同。
导航到 **主页** → **项目**。
在 **名称** 字段中输入名称。
单击 **创建**。
导航到 **Operators** → **已安装的 Operators**。
单击 **项目** 菜单,然后从列表中选择部署 ServiceMeshControlPlane
资源的项目,例如 istio-system
。
单击 Red Hat OpenShift Service Mesh Operator。
单击 **Istio Service Mesh 成员列表** 选项卡。
单击 **创建 ServiceMeshMemberRoll**
单击 **成员**,然后在 **值** 字段中输入您的项目名称。您可以添加任意数量的项目,但一个项目只能属于一个 ServiceMeshMemberRoll
资源。
单击 **创建**。
您可以从命令行向 ServiceMeshMemberRoll
添加项目。
已安装并验证的 Red Hat OpenShift Service Mesh Operator。
要添加到服务网格的项目列表。
访问 OpenShift CLI (oc
)。
登录到 OpenShift Dedicated CLI。
$ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:6443
如果您还没有网格的服务,或者您是从头开始,请为您的应用程序创建一个项目。它必须与您安装 Service Mesh 控制平面的项目不同。
$ oc new-project <your-project>
要将您的项目添加为成员,请修改以下示例 YAML。您可以添加任意数量的项目,但一个项目只能属于一个 ServiceMeshMemberRoll
资源。在此示例中,istio-system
是 Service Mesh 控制平面项目的名称。
apiVersion: maistra.io/v1
kind: ServiceMeshMemberRoll
metadata:
name: default
namespace: istio-system
spec:
members:
# a list of projects joined into the service mesh
- your-project-name
- another-project-name
运行以下命令以上传并在 istio-system
命名空间中创建 ServiceMeshMemberRoll
资源。
$ oc create -n istio-system -f servicemeshmemberroll-default.yaml
运行以下命令以验证 ServiceMeshMemberRoll
是否已成功创建。
$ oc get smmr -n istio-system default
当 STATUS
列为 Configured
时,安装已成功完成。
使用 ServiceMeshMemberRoll
资源是将项目添加到服务网格的最简单方法。要添加项目,请在 ServiceMeshMemberRoll
资源的 spec.members
字段中指定项目名称。ServiceMeshMemberRoll
资源指定哪些项目受 ServiceMeshControlPlane
资源控制。
使用此方法添加项目需要用户在要添加的项目中拥有 |
如果您已经有要添加到服务网格的应用程序、工作负载或服务,请参见以下内容
使用 Web 控制台和 ServiceMeshMemberRoll
资源添加或删除网格中的项目
使用 CLI 和 ServiceMeshMemberRoll
资源添加或删除网格中的项目
或者,要安装名为 Bookinfo 的示例应用程序并将其添加到 ServiceMeshMemberRoll
资源,请参阅 Bookinfo 示例应用程序教程。
您可以使用 OpenShift Dedicated Web 控制台和 ServiceMeshMemberRoll
资源添加或删除网格中的项目。您可以添加任意数量的项目,但一个项目只能属于一个网格。
当其对应的 ServiceMeshControlPlane
资源被删除时,ServiceMeshMemberRoll
资源将被删除。
已安装并验证的 Red Hat OpenShift Service Mesh Operator。
现有的 ServiceMeshMemberRoll
资源。
具有 ServiceMeshMemberRoll
资源的项目的名称。
您想要添加或删除到网格中的项目的名称。
登录到 OpenShift Dedicated Web 控制台。
导航到 **Operators** → **已安装的 Operators**。
单击 **项目** 菜单,然后从列表中选择部署 ServiceMeshControlPlane
资源的项目。例如 istio-system
。
单击 Red Hat OpenShift Service Mesh Operator。
单击 **Istio Service Mesh 成员列表** 选项卡。
单击 default
链接。
单击 YAML 选项卡。
修改 YAML 以添加项目作为成员(或删除它们以删除现有成员)。您可以添加任意数量的项目,但一个项目只能属于一个 ServiceMeshMemberRoll
资源。
apiVersion: maistra.io/v1
kind: ServiceMeshMemberRoll
metadata:
name: default
namespace: istio-system #control plane project
spec:
members:
# a list of projects joined into the service mesh
- your-project-name
- another-project-name
单击 **保存**。
单击 **重新加载**。
您可以使用 CLI 和 ServiceMeshMemberRoll
资源向网格添加一个或多个项目。您可以添加任意数量的项目,但一个项目只能属于一个网格。
当其对应的 ServiceMeshControlPlane
资源被删除时,ServiceMeshMemberRoll
资源将被删除。
已安装并验证的 Red Hat OpenShift Service Mesh Operator。
现有的 ServiceMeshMemberRoll
资源。
具有 ServiceMeshMemberRoll
资源的项目的名称。
您想要添加或删除到网格中的项目的名称。
访问 OpenShift CLI (oc
)。
登录到 OpenShift Dedicated CLI。
编辑 ServiceMeshMemberRoll
资源。
$ oc edit smmr -n <controlplane-namespace>
修改 YAML 以添加或删除项目作为成员。您可以添加任意数量的项目,但一个项目只能属于一个 ServiceMeshMemberRoll
资源。
apiVersion: maistra.io/v1
kind: ServiceMeshMemberRoll
metadata:
name: default
namespace: istio-system #control plane project
spec:
members:
# a list of projects joined into the service mesh
- your-project-name
- another-project-name
保存文件并退出编辑器。
ServiceMeshMember
资源提供了一种在不修改 ServiceMeshMemberRoll
资源的情况下将项目添加到服务网格的方法。要添加项目,请在要添加到服务网格的项目中创建一个 ServiceMeshMember
资源。当 Service Mesh Operator 处理 ServiceMeshMember
对象时,该项目将出现在 ServiceMeshMemberRoll
资源的 status.members
列表中。然后,驻留在该项目中的服务将可用于网格。
网格管理员必须授予每个网格用户在 ServiceMeshMember
资源中引用 ServiceMeshControlPlane
资源的权限。有了此权限,即使网格用户没有服务网格项目或 ServiceMeshMemberRoll
资源的直接访问权限,也可以将项目添加到网格。有关更多信息,请参见创建 Red Hat OpenShift Service Mesh 成员。
您可以使用 OpenShift Dedicated Web 控制台和 ServiceMeshMember
资源向网格添加一个或多个项目。
您已安装 Red Hat OpenShift Service Mesh Operator。
您知道 ServiceMeshControlPlane
资源的名称以及该资源所属项目的名称。
您知道要添加到网格的项目的名称。
服务网格管理员必须明确授予对服务网格的访问权限。管理员可以使用 RoleBinding
或 ClusterRoleBinding
将 mesh-user
Role
分配给用户,从而授予用户访问网格的权限。有关更多信息,请参见《创建 Red Hat OpenShift Service Mesh 成员》。
登录到 OpenShift Dedicated Web 控制台。
导航到 **Operators** → **已安装的 Operators**。
点击**项目**菜单,然后从下拉列表中选择要添加到网格的项目。例如,istio-system
。
单击 Red Hat OpenShift Service Mesh Operator。
点击**Istio 服务网格成员**选项卡。
点击**创建 ServiceMeshMember**。
接受ServiceMeshMember
的默认名称。
点击展开**ControlPlaneRef**。
在**命名空间**字段中,选择ServiceMeshControlPlane
资源所属的项目。例如,istio-system
。
在**名称**字段中,输入此命名空间所属的ServiceMeshControlPlane
资源的名称。例如,basic
。
单击 **创建**。
使用以下步骤确认已创建ServiceMeshMember
资源并将项目添加到网格。
点击资源名称,例如default
。
查看屏幕末尾显示的**条件**部分。
确认Reconciled
和Ready
条件的状态
为True
。
如果状态
为False
,请参阅原因
和消息
列以获取更多信息。
您可以使用ServiceMeshMember
资源和 CLI 将一个或多个项目添加到网格。
您已安装 Red Hat OpenShift Service Mesh Operator。
您知道ServiceMeshControlPlane
资源的名称及其所属项目的名称。
您知道要添加到网格的项目的名称。
服务网格管理员必须明确授予对服务网格的访问权限。管理员可以使用 RoleBinding
或 ClusterRoleBinding
将 mesh-user
Role
分配给用户,从而授予用户访问网格的权限。有关更多信息,请参见《创建 Red Hat OpenShift Service Mesh 成员》。
登录到 OpenShift Dedicated CLI。
创建ServiceMeshMember
清单的 YAML 文件。该清单将my-application
项目添加到由部署在istio-system
命名空间中的ServiceMeshControlPlane
资源创建的服务网格。
apiVersion: maistra.io/v1
kind: ServiceMeshMember
metadata:
name: default
namespace: my-application
spec:
controlPlaneRef:
namespace: istio-system
name: basic
应用 YAML 文件以创建ServiceMeshMember
资源。
$ oc apply -f <file-name>
运行以下命令验证命名空间是否属于网格的一部分。确认READY
列中显示的值为True
。
$ oc get smm default -n my-application
NAME CONTROL PLANE READY AGE
default istio-system/basic True 2m11s
或者,查看ServiceMeshMemberRoll
资源以确认my-application
命名空间显示在ServiceMeshMemberRoll
资源的status.members
和status.configuredMembers
字段中。
$ oc describe smmr default -n istio-system
Name: default
Namespace: istio-system
Labels: <none>
# ...
Status:
# ...
Configured Members:
default
my-application
# ...
Members:
default
my-application
对于集群范围的部署,您可以使用标签选择器将项目添加到网格。在ServiceMeshMemberRoll
资源中指定的标签选择器使服务网格操作员能够根据命名空间标签将命名空间添加到网格或从网格中移除命名空间。与您可以用来指定单个标签选择器的其他标准 OpenShift Dedicated 资源不同,您可以使用ServiceMeshMemberRoll
资源指定多个标签选择器。
如果命名空间的标签与ServiceMeshMemberRoll
资源中指定的任何选择器匹配,则该命名空间将包含在网格中。
在 OpenShift Dedicated 中,项目本质上是具有附加注释的 Kubernetes 命名空间,例如项目中可以使用的一个用户 ID 范围。通常,OpenShift Dedicated Web 控制台使用术语项目,而 CLI 使用术语命名空间,但这两个术语基本同义。 |
您可以使用标签选择器通过 OpenShift Dedicated Web 控制台将项目添加到服务网格。
您已安装 Red Hat OpenShift Service Mesh Operator。
部署具有现有的ServiceMeshMemberRoll
资源。
您已以具有dedicated-admin
角色的用户身份登录到 OpenShift Dedicated Web 控制台。
导航到 **Operators** → **已安装的 Operators**。
点击**项目**菜单,然后从下拉列表中选择部署ServiceMeshMemberRoll
资源的项目。例如,**istio-system**。
单击 Red Hat OpenShift Service Mesh Operator。
单击 **Istio Service Mesh 成员列表** 选项卡。
点击**创建 ServiceMeshMember Roll**。
接受ServiceMeshMemberRoll
的默认名称。
在**标签**字段中,输入键值对以定义标识哪些命名空间包含在服务网格中的标签。如果项目命名空间具有选择器指定的任何标签,则项目命名空间将包含在服务网格中。您无需同时包含这两个标签。
例如,输入mykey=myvalue
将包含所有具有此标签的命名空间作为网格的一部分。当选择器识别匹配项时,项目命名空间将添加到服务网格。
输入myotherkey=myothervalue
将包含所有具有此标签的命名空间作为网格的一部分。当选择器识别匹配项时,项目命名空间将添加到服务网格。
单击 **创建**。
您可以使用 CLI 将项目添加到服务网格(使用标签选择器)。
您已安装 Red Hat OpenShift Service Mesh Operator。
部署具有现有的ServiceMeshMemberRoll
资源。
您已以具有dedicated-admin
角色的用户身份登录到 OpenShift Dedicated。
登录到 OpenShift Dedicated CLI。
编辑 ServiceMeshMemberRoll
资源。
$ oc edit smmr default -n istio-system
您可以将服务网格控制平面部署到任何项目,前提是它与包含您的服务的项目分开。
修改 YAML 文件,以便在ServiceMeshMemberRoll
资源的spec.memberSelectors
字段中包含命名空间标签选择器。
除了使用 |
apiVersion: maistra.io/v1
kind: ServiceMeshMemberRoll
metadata:
name: default
namespace: istio-system
spec:
memberSelectors: (1)
- matchLabels: (2)
mykey: myvalue (2)
- matchLabels: (3)
myotherkey: myothervalue (3)
1 | 包含用于标识哪些项目命名空间包含在服务网格中的标签选择器。如果项目命名空间具有选择器指定的任何标签,则项目命名空间将包含在服务网格中。项目命名空间不需要同时包含这两个标签。 |
2 | 指定所有具有mykey=myvalue 标签的命名空间。当选择器识别匹配项时,项目命名空间将添加到服务网格。 |
3 | 指定所有具有myotherkey=myothervalue 标签的命名空间。当选择器识别匹配项时,项目命名空间将添加到服务网格。 |
Bookinfo 示例应用程序允许您在 OpenShift Dedicated 上测试您的 Red Hat OpenShift Service Mesh 2.6.4 安装。
Bookinfo 应用程序显示有关书籍的信息,类似于在线书店的单个目录条目。该应用程序显示一个页面,其中描述了书籍、书籍详细信息(ISBN、页数和其他信息)和书籍评论。
Bookinfo 应用程序由以下微服务组成:
productpage
微服务调用details
和reviews
微服务来填充页面。
details
微服务包含书籍信息。
reviews
微服务包含书籍评论。它还调用ratings
微服务。
ratings
微服务包含伴随书籍评论的书籍排名信息。
reviews
微服务有三个版本:
版本 v1 不调用ratings
服务。
版本 v2 调用ratings
服务并将每个评分显示为一颗到五颗黑色星。
版本 v3 调用ratings
服务并将每个评分显示为一颗到五颗红色星。
本教程将引导您完成如何通过创建项目、将 Bookinfo 应用程序部署到该项目以及在服务网格中查看正在运行的应用程序来创建示例应用程序的过程。
已安装 OpenShift Dedicated 4.1 或更高版本。
已安装 Red Hat OpenShift Service Mesh 2.6.4。
访问 OpenShift CLI (oc
)。
您已以具有dedicated-admin
角色的用户身份登录到 OpenShift Dedicated。
Bookinfo 示例应用程序无法安装在 IBM Z® 和 IBM Power® 上。 |
本节中的命令假设服务网格控制平面项目为 |
点击**主页** → **项目**。
点击**创建项目**。
输入bookinfo
作为**项目名称**,输入**显示名称**和**描述**,然后点击**创建**。
或者,您可以从 CLI 运行以下命令来创建bookinfo
项目。
$ oc new-project bookinfo
点击操作员 → 已安装的操作员。
点击项目菜单并使用 Service Mesh 控制平面命名空间。在本例中,使用istio-system
。
点击Red Hat OpenShift Service Mesh 操作员。
单击 **Istio Service Mesh 成员列表** 选项卡。
如果您已经创建了 Istio Service Mesh 成员角色,请点击名称,然后点击 YAML 选项卡打开 YAML 编辑器。
如果您尚未创建ServiceMeshMemberRoll
,请点击创建 ServiceMeshMemberRoll。
点击成员,然后在值字段中输入您的项目名称。
点击创建以保存更新后的 Service Mesh 成员角色。
或者,将以下示例保存到 YAML 文件。
apiVersion: maistra.io/v1
kind: ServiceMeshMemberRoll
metadata:
name: default
spec:
members:
- bookinfo
运行以下命令以上传该文件并在istio-system
命名空间中创建ServiceMeshMemberRoll
资源。在本例中,istio-system
是 Service Mesh 控制平面项目的名称。
$ oc create -n istio-system -f servicemeshmemberroll-default.yaml
运行以下命令以验证 ServiceMeshMemberRoll
是否已成功创建。
$ oc get smmr -n istio-system -o wide
当 STATUS
列为 Configured
时,安装已成功完成。
NAME READY STATUS AGE MEMBERS
default 1/1 Configured 70s ["bookinfo"]
从 CLI 部署 _`bookinfo`_ 项目中的 Bookinfo 应用程序,方法是应用bookinfo.yaml
文件
$ oc apply -n bookinfo -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.6/samples/bookinfo/platform/kube/bookinfo.yaml
您应该看到类似以下的输出
service/details created
serviceaccount/bookinfo-details created
deployment.apps/details-v1 created
service/ratings created
serviceaccount/bookinfo-ratings created
deployment.apps/ratings-v1 created
service/reviews created
serviceaccount/bookinfo-reviews created
deployment.apps/reviews-v1 created
deployment.apps/reviews-v2 created
deployment.apps/reviews-v3 created
service/productpage created
serviceaccount/bookinfo-productpage created
deployment.apps/productpage-v1 created
通过应用bookinfo-gateway.yaml
文件创建入口网关
$ oc apply -n bookinfo -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.6/samples/bookinfo/networking/bookinfo-gateway.yaml
您应该看到类似以下的输出
gateway.networking.istio.io/bookinfo-gateway created
virtualservice.networking.istio.io/bookinfo created
设置GATEWAY_URL
参数的值
$ export GATEWAY_URL=$(oc -n istio-system get route istio-ingressgateway -o jsonpath='{.spec.host}')
在您可以使用 Bookinfo 应用程序之前,必须首先添加默认目标规则。有两个预配置的 YAML 文件,具体取决于您是否启用了相互传输层安全性 (TLS) 身份验证。
要添加目标规则,请运行以下命令之一
如果您没有启用相互 TLS
$ oc apply -n bookinfo -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.6/samples/bookinfo/networking/destination-rule-all.yaml
如果您启用了相互 TLS
$ oc apply -n bookinfo -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.6/samples/bookinfo/networking/destination-rule-all-mtls.yaml
您应该看到类似以下的输出
destinationrule.networking.istio.io/productpage created
destinationrule.networking.istio.io/reviews created
destinationrule.networking.istio.io/ratings created
destinationrule.networking.istio.io/details created
要确认样本 Bookinfo 应用程序已成功部署,请执行以下步骤。
Red Hat OpenShift Service Mesh 已安装。
完成安装 Bookinfo 样本应用程序的步骤。
您已以具有dedicated-admin
角色的用户身份登录到 OpenShift Dedicated。
使用此命令验证所有 Pod 是否已准备好
$ oc get pods -n bookinfo
所有 Pod 的状态都应为正在运行
。您应该看到类似以下的输出
NAME READY STATUS RESTARTS AGE
details-v1-55b869668-jh7hb 2/2 Running 0 12m
productpage-v1-6fc77ff794-nsl8r 2/2 Running 0 12m
ratings-v1-7d7d8d8b56-55scn 2/2 Running 0 12m
reviews-v1-868597db96-bdxgq 2/2 Running 0 12m
reviews-v2-5b64f47978-cvssp 2/2 Running 0 12m
reviews-v3-6dfd49b55b-vcwpf 2/2 Running 0 12m
运行以下命令以检索产品页面的 URL
echo "http://$GATEWAY_URL/productpage"
复制并粘贴输出到 Web 浏览器中,以验证 Bookinfo 产品页面是否已部署。
获取 Kiali Web 控制台的地址。
登录到 OpenShift Dedicated Web 控制台。
导航到网络 → 路由。
在路由页面上,从命名空间菜单中选择 Service Mesh 控制平面项目,例如istio-system
。
位置列显示每个路由的链接地址。
点击 Kiali 的位置列中的链接。
点击使用 OpenShift 登录。Kiali 的概览屏幕显示每个项目命名空间的图块。
在 Kiali 中,点击图表。
从命名空间列表中选择 bookinfo,从图表类型列表中选择应用程序图表。
从显示菜单中点击显示空闲节点。
这将显示已定义但未接收或发送请求的节点。它可以确认应用程序已正确定义,但未报告任何请求流量。
使用持续时间菜单增加时间段,以帮助确保捕获较旧的流量。
使用刷新率菜单更频繁或更不频繁地刷新流量,或者根本不刷新。
点击服务、工作负载或Istio 配置以查看 bookinfo 组件的列表视图,并确认它们是健康的。
按照以下步骤删除 Bookinfo 应用程序。
已安装 OpenShift Dedicated 4.1 或更高版本。
已安装 Red Hat OpenShift Service Mesh 2.6.4。
访问 OpenShift CLI (oc
)。
登录到 OpenShift Dedicated Web 控制台。
点击主页 → 项目。
点击bookinfo
菜单 ,然后点击删除项目。
在确认对话框中键入bookinfo
,然后点击删除。
或者,您可以使用 CLI 运行此命令来创建bookinfo
项目。
$ oc delete project bookinfo
登录到 OpenShift Dedicated Web 控制台。
点击操作员 → 已安装的操作员。
点击项目菜单,然后从列表中选择istio-system
。
点击Red Hat OpenShift Service Mesh 操作员的提供的 API下的Istio Service Mesh 成员角色链接。
点击ServiceMeshMemberRoll
菜单 并选择编辑 Service Mesh 成员角色。
编辑默认的 Service Mesh 成员角色 YAML 并从成员列表中删除bookinfo
。
或者,您可以使用 CLI 运行此命令以从ServiceMeshMemberRoll
中删除bookinfo
项目。在本例中,istio-system
是 Service Mesh 控制平面项目的名称。
$ oc -n istio-system patch --type='json' smmr default -p '[{"op": "remove", "path": "/spec/members", "value":["'"bookinfo"'"]}]'
点击保存以更新 Service Mesh 成员角色。
要继续安装过程,您必须启用 sidecar 注射。