$ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:6443
一个项目包含服务;但是,只有在您将项目添加到服务网格后,这些服务才可用。
安装 Operators 并创建ServiceMeshControlPlane
资源后,将一个或多个项目添加到服务网格。
在 Red Hat OpenShift Service on AWS 中,项目本质上是具有附加注释的 Kubernetes 命名空间,例如项目中可使用的用户 ID 范围。通常,Red Hat OpenShift Service on AWS Web 控制台使用术语“项目”,而 CLI 使用术语“命名空间”,但这两个术语基本相同。 |
您可以使用 Red Hat OpenShift Service on AWS 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。
要添加到服务网格的现有项目列表。
登录到 Red Hat OpenShift Service on AWS 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
)。
登录到 Red Hat OpenShift Service on AWS 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 示例应用程序教程。
您可以使用带有 Red Hat OpenShift Service on AWS Web 控制台的ServiceMeshMemberRoll
资源向网格添加或从中移除项目。您可以添加任意数量的项目,但一个项目只能属于一个网格。
当其对应的ServiceMeshControlPlane
资源被删除时,ServiceMeshMemberRoll
资源也会被删除。
已安装并验证的 Red Hat OpenShift Service Mesh Operator。
一个现有的ServiceMeshMemberRoll
资源。
具有ServiceMeshMemberRoll
资源的项目的名称。
您想要添加到网格或从网格中移除的项目的名称。
登录到 Red Hat OpenShift Service on AWS 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
)。
登录到 Red Hat OpenShift Service on AWS 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
资源。当服务网格操作员处理ServiceMeshMember
对象时,该项目将出现在ServiceMeshMemberRoll
资源的status.members
列表中。然后,驻留在该项目中的服务将可用于网格。
网格管理员必须授予每个网格用户权限,以便在ServiceMeshMember
资源中引用ServiceMeshControlPlane
资源。有了此权限,即使网格用户无权直接访问服务网格项目或ServiceMeshMemberRoll
资源,也可以将项目添加到网格。有关更多信息,请参阅创建 Red Hat OpenShift Service Mesh 成员。
您可以使用带有 Red Hat OpenShift Service on AWS Web 控制台的ServiceMeshMember
资源向网格添加一个或多个项目。
您已安装 Red Hat OpenShift Service Mesh Operator。
您知道ServiceMeshControlPlane
资源的名称以及该资源所属项目的名称。
您知道要添加到网格的项目的名称。
服务网格管理员必须明确授予对服务网格的访问权限。管理员可以使用RoleBinding
或ClusterRoleBinding
分配mesh-user
Role
来授予用户访问网格的权限。有关更多信息,请参阅 *创建 Red Hat OpenShift Service Mesh 成员*。
登录到 Red Hat OpenShift Service on AWS Web 控制台。
导航到Operators → 已安装的 Operators。
单击**项目**菜单,并从下拉列表中选择要添加到网格的项目。例如,istio-system
。
单击 Red Hat OpenShift Service Mesh Operator。
单击**Istio Service Mesh Member**选项卡。
单击**创建 ServiceMeshMember**
接受ServiceMeshMember
的默认名称。
单击展开**ControlPlaneRef**。
在**命名空间**字段中,选择ServiceMeshControlPlane
资源所属的项目。例如,istio-system
。
在**名称**字段中,输入此命名空间所属的ServiceMeshControlPlane
资源的名称。例如,basic
。
单击创建。
请按照以下步骤确认ServiceMeshMember
资源已创建并且项目已添加到网格中
单击资源名称,例如default
。
查看屏幕末尾显示的**条件**部分。
确认Reconciled
和Ready
条件的状态
为True
。
如果状态
为False
,请参阅原因
和消息
列以了解更多信息。
您可以使用CLI和ServiceMeshMember
资源向网格添加一个或多个项目。
您已安装 Red Hat OpenShift Service Mesh Operator。
您知道ServiceMeshControlPlane
资源的名称及其所属项目的名称。
您知道要添加到网格的项目的名称。
服务网格管理员必须明确授予对服务网格的访问权限。管理员可以使用RoleBinding
或ClusterRoleBinding
分配mesh-user
Role
来授予用户访问网格的权限。有关更多信息,请参阅 *创建 Red Hat OpenShift Service Mesh 成员*。
登录到 Red Hat OpenShift Service on AWS 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
资源中指定的标签选择器使服务网格操作员能够根据命名空间标签向网格添加或从中移除命名空间。与您可以用来指定单个标签选择器的其他标准 Red Hat OpenShift Service on AWS 资源不同,您可以使用ServiceMeshMemberRoll
资源来指定多个标签选择器。
如果命名空间的标签与ServiceMeshMemberRoll
资源中指定的任何选择器匹配,则该命名空间将包含在网格中。
在 AWS 上的 Red Hat OpenShift Service 中,项目本质上是一个 Kubernetes 命名空间,并带有额外的注解,例如项目中可用的用户 ID 范围。通常,AWS 上的 Red Hat OpenShift Service Web 控制台使用术语项目,而 CLI 使用术语命名空间,但这两个术语基本上是同义词。 |
您可以使用标签选择器通过 AWS 上的 Red Hat OpenShift Service Web 控制台将项目添加到服务网格。
您已安装 Red Hat OpenShift Service Mesh Operator。
部署具有现有的ServiceMeshMemberRoll
资源。
您已以具有dedicated-admin
角色的用户身份登录到 AWS 上的 Red Hat OpenShift Service 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
角色的用户身份登录到 AWS 上的 Red Hat OpenShift Service。
登录到 Red Hat OpenShift Service on AWS 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 示例应用程序允许您在 AWS 上的 Red Hat OpenShift Service 上测试您的 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 应用程序部署到该项目以及在服务网格中查看正在运行的应用程序来创建示例应用程序的过程。
已安装 AWS 上的 Red Hat OpenShift Service 4.1 或更高版本。
已安装 Red Hat OpenShift Service Mesh 2.6.4。
访问 OpenShift CLI (oc
)。
您已以具有dedicated-admin
角色的用户身份登录到 AWS 上的 Red Hat OpenShift Service。
本节中的命令假定服务网格控制平面项目为 |
单击**主页**→**项目**。
单击**创建项目**。
输入bookinfo
作为**项目名称**,输入**显示名称**和**描述**,然后单击**创建**。
或者,您可以从 CLI 运行此命令来创建bookinfo
项目。
$ oc new-project bookinfo
单击**运算符**→**已安装的运算符**。
单击**项目**菜单并使用服务网格控制平面命名空间。在此示例中,使用istio-system
。
单击**Red Hat OpenShift Service Mesh**运算符。
单击Istio Service Mesh 成员角色选项卡。
如果您已经创建了 Istio 服务网格成员角色,请单击名称,然后单击 YAML 选项卡以打开 YAML 编辑器。
如果您尚未创建ServiceMeshMemberRoll
,请单击**创建 ServiceMeshMemberRoll**。
单击**成员**,然后在**值**字段中输入您的项目名称。
单击**创建**以保存更新后的服务网格成员角色。
或者,将以下示例保存到 YAML 文件。
apiVersion: maistra.io/v1
kind: ServiceMeshMemberRoll
metadata:
name: default
spec:
members:
- bookinfo
运行以下命令以上传该文件并在istio-system
命名空间中创建ServiceMeshMemberRoll
资源。在此示例中,istio-system
是服务网格控制平面项目的名称。
$ 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.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
角色的用户身份登录到 AWS 上的 Red Hat OpenShift Service。
使用此命令验证所有 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"
复制并粘贴输出到网页浏览器中,以验证 Bookinfo 产品页面是否已部署。
获取 Kiali Web 控制台的地址。
登录到 Red Hat OpenShift Service on AWS Web 控制台。
导航到 **网络** → **路由**。
在 **路由** 页面上,从 **命名空间** 菜单中选择服务网格控制平面项目,例如 `istio-system`。
**位置** 列显示每个路由的链接地址。
单击 Kiali 的 **位置** 列中的链接。
单击 **使用 OpenShift 登录**。Kiali 的 **概述** 屏幕将显示每个项目命名空间的图块。
在 Kiali 中,单击 **图形**。
从 **命名空间** 列表中选择 bookinfo,从 **图形类型** 列表中选择应用程序图形。
单击 **显示空闲节点**(在 **显示** 菜单中)。
这将显示已定义但未接收或发送请求的节点。这可以确认应用程序已正确定义,但尚未报告任何请求流量。
使用 **持续时间** 菜单增加时间段,以帮助确保捕获较旧的流量。
使用 **刷新率** 菜单更频繁或更不频繁地刷新流量,或者根本不刷新。
单击 **服务**、**工作负载** 或 **Istio 配置** 以查看 bookinfo 组件的列表视图,并确认它们是健康的。
请按照以下步骤删除 Bookinfo 应用程序。
已安装 AWS 上的 Red Hat OpenShift Service 4.1 或更高版本。
已安装 Red Hat OpenShift Service Mesh 2.6.4。
访问 OpenShift CLI (oc
)。
登录到 Red Hat OpenShift Service on AWS Web 控制台。
单击 **主页** → **项目**。
单击 `bookinfo` 菜单 ,然后单击 **删除项目**。
在确认对话框中输入 `bookinfo`,然后单击 **删除**。
或者,您可以使用 CLI 运行此命令来创建 `bookinfo` 项目。
$ oc delete project bookinfo
登录到 Red Hat OpenShift Service on AWS Web 控制台。
单击**运算符**→**已安装的运算符**。
单击 **项目** 菜单,并从列表中选择 `istio-system`。
单击 **Red Hat OpenShift 服务网格** 运算符的 **提供的 API** 下的 **Istio 服务网格成员角色** 链接。
单击 `ServiceMeshMemberRoll` 菜单 并选择 **编辑服务网格成员角色**。
编辑默认的服务网格成员角色 YAML 并从 **成员** 列表中移除 `bookinfo`。
或者,您可以使用 CLI 运行此命令以从 `ServiceMeshMemberRoll` 中移除 `bookinfo` 项目。在此示例中,`istio-system` 是服务网格控制平面项目的名称。
$ oc -n istio-system patch --type='json' smmr default -p '[{"op": "remove", "path": "/spec/members", "value":["'"bookinfo"'"]}]'
单击 **保存** 以更新服务网格成员角色。
要继续安装过程,您必须启用 sidecar 注射。