$ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:6443
一个项目包含服务;但是,只有将项目添加到服务网格后,这些服务才可用。
安装 Operators 并创建 ServiceMeshControlPlane
资源后,将一个或多个项目添加到服务网格。
在 OpenShift Container Platform 中,项目本质上是 Kubernetes 命名空间,带有额外的注释,例如项目中可用的用户 ID 范围。通常,OpenShift Container Platform Web 控制台使用术语“项目”,而 CLI 使用术语“命名空间”,但这两个术语基本上是同义词。 |
您可以使用 OpenShift Container Platform 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 Container Platform 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 Container Platform 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 Container Platform Web 控制台使用 ServiceMeshMemberRoll
资源添加或删除网格中的项目。您可以添加任意数量的项目,但一个项目只能属于一个网格。
当其对应的 ServiceMeshControlPlane
资源被删除时,ServiceMeshMemberRoll
资源也会被删除。
已安装并验证的 Red Hat OpenShift Service Mesh Operator。
现有的 ServiceMeshMemberRoll
资源。
具有 ServiceMeshMemberRoll
资源的项目的名称。
您要添加或删除网格中的项目的名称。
登录到 OpenShift Container Platform 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 Container Platform 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
列表中。然后,驻留在项目中的服务将可用于网格。
网格管理员必须授予每个网格用户引用ServiceMeshControlPlane
资源(位于ServiceMeshMember
资源中)的权限。拥有此权限后,即使网格用户没有服务网格项目或ServiceMeshMemberRoll
资源的直接访问权限,也可以将项目添加到网格中。更多信息,请参见创建 Red Hat OpenShift Service Mesh 成员。
您可以使用 OpenShift Container Platform Web 控制台和ServiceMeshMember
资源将一个或多个项目添加到网格。
您已安装 Red Hat OpenShift Service Mesh Operator。
您知道ServiceMeshControlPlane
资源的名称及其所属项目的名称。
您知道要添加到网格的项目的名称。
服务网格管理员必须显式授予对服务网格的访问权限。管理员可以使用RoleBinding
或ClusterRoleBinding
分配mesh-user
Role
来授予用户访问网格的权限。更多信息,请参见创建 Red Hat OpenShift Service Mesh 成员。
登录到 OpenShift Container Platform 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
,请查看原因
和消息
列以获取更多信息。
您可以使用 CLI 和ServiceMeshMember
资源将一个或多个项目添加到网格。
您已安装 Red Hat OpenShift Service Mesh Operator。
您知道ServiceMeshControlPlane
资源的名称及其所属项目的名称。
您知道要添加到网格的项目的名称。
服务网格管理员必须显式授予对服务网格的访问权限。管理员可以使用RoleBinding
或ClusterRoleBinding
分配mesh-user
Role
来授予用户访问网格的权限。更多信息,请参见创建 Red Hat OpenShift Service Mesh 成员。
登录到 OpenShift Container Platform 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
资源中指定的标签选择器使 Service Mesh Operator 能够根据命名空间标签将命名空间添加到网格或从网格中删除命名空间。与您可以用来指定单个标签选择器的其他标准 OpenShift Container Platform 资源不同,您可以使用ServiceMeshMemberRoll
资源来指定多个标签选择器。
如果命名空间的标签与ServiceMeshMemberRoll
资源中指定的任何选择器匹配,则该命名空间将包含在网格中。
在 OpenShift Container Platform 中,项目本质上是具有附加注释的 Kubernetes 命名空间,例如项目中可以使用 的用户 ID 范围。通常,OpenShift Container Platform Web 控制台使用术语项目,而 CLI 使用术语命名空间,但这两个术语基本同义。 |
您可以使用标签选择器将项目添加到 OpenShift Container Platform Web 控制台中的服务网格。
您已安装 Red Hat OpenShift Service Mesh Operator。
部署具有现有的ServiceMeshMemberRoll
资源。
您已以cluster-admin
身份登录到 OpenShift Container Platform 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
资源。
您已以`cluster-admin`身份登录到 OpenShift Container Platform。
登录到 OpenShift Container Platform 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 Container Platform 上测试 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 应用程序部署到该项目以及在 Service Mesh 中查看正在运行的应用程序来创建示例应用程序的过程。
已安装 OpenShift Container Platform 4.1 或更高版本。
已安装 Red Hat OpenShift Service Mesh 2.6.4。
访问 OpenShift CLI (oc
)。
您已以`cluster-admin`身份登录到 OpenShift Container Platform。
Bookinfo 示例应用程序无法安装在 IBM Z® 和 IBM Power® 上。 |
本节中的命令假设 Service Mesh 控制平面项目为 |
点击**主页** → **项目**。
点击**创建项目**。
输入 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 应用程序之前,必须首先添加默认目标规则。根据您是否启用了相互传输层安全 (TLS) 身份验证,有两个预配置的 YAML 文件。
要添加目标规则,请运行以下命令之一:
如果您没有启用相互 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 示例应用程序的步骤。
您已以`cluster-admin`身份登录到 OpenShift Container Platform。
使用以下命令验证所有 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 Container Platform Web 控制台。
导航到**网络** → **路由**。
在**路由**页面上,从**命名空间**菜单中选择 Service Mesh 控制平面项目,例如 istio-system
。
**位置**列显示每个路由的链接地址。
点击 Kiali 的**位置**列中的链接。
点击**使用 OpenShift 登录**。Kiali 的**概述**屏幕显示每个项目命名空间的图块。
在 Kiali 中,点击**图表**。
从**命名空间**列表中选择 bookinfo,从**图表类型**列表中选择应用程序图表。
从**显示**菜单中点击**显示空闲节点**。
这将显示已定义但未接收或发送请求的节点。它可以确认应用程序已正确定义,但尚未报告任何请求流量。
使用**持续时间**菜单增加时间段,以帮助确保捕获较旧的流量。
使用**刷新率**菜单更频繁或更不频繁地刷新流量,或者根本不刷新。
点击**服务**、**工作负载**或**Istio 配置**以查看 bookinfo 组件的列表视图,并确认它们是否健康。
按照以下步骤删除 Bookinfo 应用程序。
已安装 OpenShift Container Platform 4.1 或更高版本。
已安装 Red Hat OpenShift Service Mesh 2.6.4。
访问 OpenShift CLI (oc
)。
登录到 OpenShift Container Platform Web 控制台。
点击**主页** → **项目**。
点击 bookinfo
菜单 ,然后点击**删除项目**。
在确认对话框中输入 bookinfo
,然后点击**删除**。
或者,您可以使用 CLI 运行此命令来创建 bookinfo
项目。
$ oc delete project bookinfo
登录到 OpenShift Container Platform Web 控制台。
点击**操作符** → **已安装的操作符**。
点击**项目**菜单,然后从列表中选择istio-system
。
针对**Red Hat OpenShift Service Mesh** 运营商,点击**提供的APIS**下的**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 注射。