1.9. 在服务网格中添加服务
安装 Operators 和 ServiceMeshControlPlane
资源后,通过创建一个 ServiceMeshMemberRoll
资源并指定您的内容所在的命名空间,将应用程序、工作负载或服务添加到网格中。如果您已经有一个要添加到 ServiceMeshMemberRoll
资源的应用程序、工作负载或服务,请使用以下步骤。或者,要安装名为 Bookinfo 的示例应用程序并将其添加到 ServiceMeshMemberRoll
资源中,请跳至教程来安装 Bookinfo 示例应用程序,以查看应用程序如何在 Red Hat OpenShift Service Mesh 中工作。
ServiceMeshMemberRoll
资源中列出的项目是由 ServiceMeshControlPlane
资源管理的应用程序和工作流。control plane(包括 Service Mesh Operator、Istiod 和 ServiceMeshControlPlane
)以及 data plane(包括应用程序和 Envoy 代理)必须位于不同的命名空间中。
将命名空间添加到 ServiceMeshMemberRoll
后,服务网格外的调用者将无法访问该命名空间中的服务或 pod。
1.9.1. 创建 Red Hat OpenShift Service Mesh member roll
ServiceMeshMemberRoll
列出属于 Service Mesh control plane 的项目。只有 ServiceMeshMemberRoll
中列出的项目会受到 control plane 的影响。在将项目添加到特定 control plane 部署的 member roll 之前,项目不属于服务网格。
您必须在 ServiceMeshControlPlane
所在的同一个项目中创建一个名为 default
的 ServiceMeshMemberRoll
资源,如 istio-system
。
1.9.1.1. 从 Web 控制台创建 member roll
您可从 web 控制台在 Service Mesh member roll 中添加一个或多个项目。在本例中,istio-system
是 Service Mesh control plane 项目的名称。
先决条件
- 已安装并验证的 Red Hat OpenShift Service Mesh Operator。
- 要添加到服务网格的现存项目列表。
流程
- 登陆到 OpenShift Container Platform Web 控制台。
如果您还没有网格服务,或者您从头开始,请为您的应用程序创建一个项目。它必须与安装 Service Mesh control plane 的项目不同。
-
浏览至 Home
Project。 - 在 Name 字段中输入一个名称。
- 点 Create。
-
浏览至 Home
-
导航到 Operators
Installed Operators。 -
点 Project 菜单,从列表中选择部署
ServiceMeshControlPlane
资源的项目,如istio-system
。 - 点 Red Hat OpenShift Service Mesh Operator。
- 点 Istio Service Mesh Member Roll 选项卡。
- 点 Create ServiceMeshMemberRoll
-
单击 Members,然后在 Value 字段中输入项目名称。您可以添加多个项目,但每个项目只能属于一个
ServiceMeshMemberRoll
资源。 - 点 Create。
1.9.1.2. 通过 CLI 创建 member roll
您可以使用命令行将项目添加到 ServiceMeshMemberRoll
中。
先决条件
- 已安装并验证的 Red Hat OpenShift Service Mesh Operator。
- 要添加到服务网格的项目列表。
-
访问 OpenShift CLI(
oc
)。
流程
登录 OpenShift Container Platform CLI。
$ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:6443
如果您还没有网格服务,或者您从头开始,请为您的应用程序创建一个项目。它必须与安装 Service Mesh control plane 的项目不同。
$ oc new-project <your-project>
要添加项目作为成员,请修改以下示例 YAML:您可以添加多个项目,但每个项目只能属于一个
ServiceMeshMemberRoll
资源。在本例中,istio-system
是 Service Mesh control plane 项目的名称。servicemeshmemberroll-default.yaml 示例
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
时,安装成功完成。
1.9.2. 为服务网格添加或删除项目
您可以使用 web 控制台从现有 Service Mesh ServiceMeshMemberRoll
资源中添加或删除项目。
-
您可以添加多个项目,但每个项目只能属于一个
ServiceMeshMemberRoll
资源。 -
当它对应的
ServiceMeshControlPlane
资源被删除后,ServiceMeshMemberRoll
资源也会被删除。
1.9.2.1. 使用 Web 控制台从 member roll 中添加或删除项目
先决条件
- 已安装并验证的 Red Hat OpenShift Service Mesh Operator。
-
现有
ServiceMeshMemberRoll
资源 -
带有
ServiceMeshMemberRoll
资源的项目名称 。 - 您要为网格添加或删除的项目的名称。
流程
- 登陆到 OpenShift Container Platform Web 控制台。
-
导航到 Operators
Installed Operators。 -
点 Project 菜单,从列表中选择部署
ServiceMeshControlPlane
资源的项目,如istio-system
。 - 点 Red Hat OpenShift Service Mesh Operator。
- 点 Istio Service Mesh Member Roll 选项卡。
-
点
default
链接。 - 点 YAML 标签。
-
修改 YAML 以添加或删除作为成员的项目。您可以添加多个项目,但每个项目只能属于一个
ServiceMeshMemberRoll
资源。 - 点 Save。
- 点 Reload。
1.9.2.2. 使用 CLI 从 member roll 添加或删除项目
您可以使用命令行修改现有 Service Mesh member roll。
先决条件
- 已安装并验证的 Red Hat OpenShift Service Mesh Operator。
-
现有
ServiceMeshMemberRoll
资源 -
带有
ServiceMeshMemberRoll
资源的项目名称 。 - 您要为网格添加或删除的项目的名称。
-
访问 OpenShift CLI(
oc
)。
流程
- 登录 OpenShift Container Platform CLI。
编辑
ServiceMeshMemberRoll
资源。$ oc edit smmr -n <controlplane-namespace>
修改 YAML 以添加或删除作为成员的项目。您可以添加多个项目,但每个项目只能属于一个
ServiceMeshMemberRoll
资源。servicemeshmemberroll-default.yaml 示例
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
1.9.3. Bookinfo 示例应用程序
您可以使用 Bookinfo 示例应用程序来测试 OpenShift Container Platform 中的 Red Hat OpenShift Service Mesh 2.2.3 安装。
Bookinfo 应用程序显示一本书的信息,类似于在线书店的单一目录条目。应用会显示一个页面,其中描述了图书详细信息(ISBN、页数和其他信息)以及图书的评论。
Bookinfo 应用程序由这些微服务组成:
-
productpage
微服务调用details
和reviews
微服务来产生页面信息。 -
details
微服务包括了书的信息。 -
review
微服务包括了书的评论。它同时还会调用ratings
微服务。 -
ratings
微服务包括了带有对本书的评论信息的评分信息。
reviews 微服务有三个版本:
-
版本 v1 不调用
ratings
服务。 -
版本 v2 调用
ratings
服务,并以一到五个黑色星来代表对本书的评分。 -
版本 v3 调用
ratings
服务,并以一到五个红色星来代表对本书的评分。
1.9.3.1. 安装 Bookinfo 应用程序
本教程介绍了如何创建项目、将 Bookinfo 应用程序部署到该项目并在 Service Mesh 中查看正在运行的应用程序来创建示例应用程序。
先决条件
- 安装了 OpenShift Container Platform 4.1 或更高版本。
- 安装了 Red Hat OpenShift Service Mesh 2.2.3。
-
访问 OpenShift CLI(
oc
)。 -
具有
cluster-admin
角色的帐户。
Bookinfo 示例应用程序不能安装在 IBM Z 和 IBM Power Systems 上。
本节中的命令假设 Service Mesh control plane 项目为 istio-system
。如果在另一个命名空间中安装了 control plane,在运行前编辑每个命令。
流程
-
以具有 cluster-admin 权限的用户身份登录到 OpenShift Container Platform web 控制台。如果使用 Red Hat OpenShift Dedicated,则必须有一个具有
dedicated-admin
角色的帐户。 -
点 Home
Projects。 - 点击 Create Project。
在 Project Name 中输入
bookinfo
,输入 Display Name 及 Description,然后点 Create。或者,也可以通过 CLI 运行这个命令来创建
bookinfo
项目。$ oc new-project bookinfo
-
点 Operators
Installed Operators。 -
点 Project 菜单,使用 Service Mesh control plane 命名空间。在这个示例中,使用
istio-system
。 - 点 Red Hat OpenShift Service Mesh Operator。
点 Istio Service Mesh Member Roll 选项卡。
- 如果您已经创建了 Istio Service Mesh Member Roll,请名称,然后点击 YAML 标签来打开 YAML 编辑器。
-
如果您还没有创建
ServiceMeshMemberRoll
,点 Create ServiceMeshMemberRoll。
- 单击 Members,然后在 Value 字段中输入项目名称。
点 Create 保存更新的 Service Mesh Member Roll。
或者,将以下示例保存到 YAML 文件中。
Bookinfo ServiceMeshMemberRoll 示例 servicemeshmemberroll-default.yaml
apiVersion: maistra.io/v1 kind: ServiceMeshMemberRoll metadata: name: default spec: members: - bookinfo
运行以下命令上传该文件,并在
istio-system
命名空间中创建ServiceMeshMemberRoll
资源。在本例中,istio-system
是 Service Mesh control plane 项目的名称。$ 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.yaml
文件在 `bookinfo` 项目中部署 Bookinfo:$ oc apply -n bookinfo -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.2/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.2/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}')
1.9.3.2. 添加默认目的地规则
在使用 Bookinfo 应用程序前,您必须首先添加默认目的地规则。根据您是否启用了 mutual TLS 验证,预先配置两个 YAML 文件。
流程
要添加目的地规则,请运行以下命令之一:
如果没有启用 mutual TLS:
$ oc apply -n bookinfo -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.2/samples/bookinfo/networking/destination-rule-all.yaml
如果启用了 nutual TLS:
$ oc apply -n bookinfo -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.2/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
1.9.3.3. 验证 Bookinfo 安装
要确认示例 Bookinfo 应用程序已被成功部署,请执行以下步骤。
先决条件
- 安装了 Red Hat OpenShift Service Mesh。
- 完成安装 Bookinfo 示例应用程序的步骤。
通过 CLI 的步骤
- 登录 OpenShift Container Platform CLI。
验证所有 pod 是否都与此命令就绪:
$ oc get pods -n bookinfo
所有容器集的状态都应为
Running
。您应该看到类似如下的输出: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"
- 在网页浏览器中复制并粘贴输出以验证是否已部署了 Bookinfo 产品页面。
来自 Kiali web 控制台的步骤
获取 Kiali web 控制台的地址。
-
以具有
cluster-admin
权限的用户身份登录 OpenShift Container Platform web 控制台。如果使用 Red Hat OpenShift Dedicated,则必须有一个具有dedicated-admin
角色的帐户。 -
进入 Networking
Routes。 在 Routes 页面中,从 Namespace 菜单中选择 Service Mesh control plane 项目,如
istio-system
。Location 列显示每个路由的链接地址。
- 点 Kiali 的 Location 列中的链接。
- 单击 Log In With OpenShift。Kiali Overview 屏幕显示每个项目命名空间的标题。
-
以具有
- 在 Kiali 中,点 Graph。
- 从 Namespace 列表中选择 bookinfo,从 Graph Type 列表中选择 App graph。
从 Display 菜单中选择 Display idle nodes。
这将显示定义的节点,但尚未收到或发送请求。它可以确认应用已正确定义,但未报告任何请求流量。
- 使用 Duration 菜单增加时间段,以帮助确保捕获旧的流量。
- 使用 Refresh Rate 菜单刷新流量频率或更小,或者根本不刷新流量。
- 点 Services、Workloads 或 Istio Config 查看 bookinfo 组件列表视图,并确认它们是否正常运行。
1.9.3.4. 删除 Bookinfo 应用程序
按照以下步骤删除 Bookinfo 应用程序。
先决条件
- 安装了 OpenShift Container Platform 4.1 或更高版本。
- 安装了 Red Hat OpenShift Service Mesh 2.2.3。
-
访问 OpenShift CLI(
oc
)。
1.9.3.4.1. 删除 Bookinfo 项目
流程
- 登陆到 OpenShift Container Platform Web 控制台。
-
点 Home
Projects。 -
点
bookinfo
菜单 ,然后点 Delete Project。 在确认对话框中输入
bookinfo
,然后点 Delete。另外,您可以使用 CLI 运行这个命令来创建
bookinfo
项目。$ oc delete project bookinfo
1.9.3.4.2. 从 Service Mesh member roll 中删除 Bookinfo 项目
流程
- 登陆到 OpenShift Container Platform Web 控制台。
-
点 Operators
Installed Operators。 -
点 Project 菜单,从列表中选
istio-system
。 - 为 Red Hat OpenShift Service Mesh Operator 在 Provided APIS 下点 Istio Service Mesh Member Roll 链接。
-
点
ServiceMeshMemberRoll
菜单 并选择 Edit Service Mesh Member Roll。 编辑默认的 Service Mesh Member Roll YAML 并从 members 列表中删除
bookinfo
。另外,您可以使用 CLI 运行这个命令从
ServiceMeshMemberRoll
中删除bookinfo
项目。在本例中,istio-system
是 Service Mesh control plane 项目的名称。$ oc -n istio-system patch --type='json' smmr default -p '[{"op": "remove", "path": "/spec/members", "value":["'"bookinfo"'"]}]'
- 点 Save 更新 Service Mesh Member Roll。
1.9.4. 后续步骤
- 要继续安装过程,您必须启用 sidecar 注入。