$ oc create configmap --from-file=<templates-directory> smcp-templates -n openshift-operators
您可以使用 `ServiceMeshControlPlane` 模板创建可重用的配置。各个用户可以使用他们自己的配置扩展他们创建的模板。模板还可以从其他模板继承配置信息。例如,您可以为会计团队创建一个会计控制平面,为营销团队创建一个营销控制平面。如果您创建了一个开发模板和一个生产模板,则营销团队和会计团队的成员可以使用团队特定的自定义来扩展开发和生产模板。
配置控制平面模板时,它们遵循与 `ServiceMeshControlPlane` 相同的语法,用户以分层方式继承设置。Operator 附带一个带有 Red Hat OpenShift Service Mesh 默认设置的 `default` 模板。要添加自定义模板,您必须在 `openshift-operators` 项目中创建一个名为 `smcp-templates` 的 ConfigMap,并将 ConfigMap 挂载到 Operator 容器的 `/usr/local/share/istio-operator/templates` 位置。
请按照此步骤创建 ConfigMap。
已安装并验证的 Service Mesh Operator。
具有 `cluster-admin` 角色的帐户。
Operator 部署位置。
访问 OpenShift CLI(`oc`)。
以集群管理员身份登录到 OpenShift Container Platform CLI。
从 CLI 中,运行以下命令在 `openshift-operators` 项目中创建名为 `smcp-templates` 的 ConfigMap,并将 `
$ oc create configmap --from-file=<templates-directory> smcp-templates -n openshift-operators
找到 Operator ClusterServiceVersion 名称。
$ oc get clusterserviceversion -n openshift-operators | grep 'Service Mesh'
maistra.v1.0.0 Red Hat OpenShift Service Mesh 1.0.0 Succeeded
编辑 Operator 集群服务版本以指示 Operator 使用 `smcp-templates` ConfigMap。
$ oc edit clusterserviceversion -n openshift-operators maistra.v1.0.0
向 Operator 部署添加卷挂载和卷。
deployments:
- name: istio-operator
spec:
template:
spec:
containers:
volumeMounts:
- name: discovery-cache
mountPath: /home/istio-operator/.kube/cache/discovery
- name: smcp-templates
mountPath: /usr/local/share/istio-operator/templates/
volumes:
- name: discovery-cache
emptyDir:
medium: Memory
- name: smcp-templates
configMap:
name: smcp-templates
...
保存更改并退出编辑器。
您现在可以在 `ServiceMeshControlPlane` 中使用 `template` 参数来指定模板。
apiVersion: maistra.io/v1
kind: ServiceMeshControlPlane
metadata:
name: minimal-install
spec:
template: default
部署应用程序时,必须通过在 `deployment` 对象的 `spec.template.metadata.labels` 中将标签 `sidecar.istio.io/inject` 配置为 `true` 来选择加入注入。选择加入可确保 sidecar 注入不会干扰其他 OpenShift Container Platform 功能,例如 OpenShift Container Platform 生态系统中众多框架使用的构建器 Pod。
确定属于服务网格的命名空间以及需要自动 sidecar 注射的部署。
要查找您的部署,请使用 `oc get` 命令。
$ oc get deployment -n <namespace>
例如,要查看 `bookinfo` 命名空间中 'ratings-v1' 微服务的 `Deployment` YAML 文件,请使用以下命令以 YAML 格式查看资源。
oc get deployment -n bookinfo ratings-v1 -o yaml
在编辑器中打开应用程序的 `Deployment` YAML 文件。
将 `spec.template.metadata.labels.sidecar.istio/inject` 添加到您的 Deployment YAML 文件,并将 `sidecar.istio.io/inject` 设置为 `true`,如下例所示。
apiVersion: apps/v1
kind: Deployment
metadata:
name: ratings-v1
namespace: bookinfo
labels:
app: ratings
version: v1
spec:
template:
metadata:
labels:
sidecar.istio.io/inject: 'true'
启用自动 sidecar 注射时使用 |
保存Deployment
YAML 文件。
将文件添加回包含您的应用程序的项目。
$ oc apply -n <namespace> -f deployment.yaml
在此示例中,bookinfo
是包含ratings-v1
应用程序的项目名称,deployment-ratings-v1.yaml
是您编辑的文件。
$ oc apply -n bookinfo -f deployment-ratings-v1.yaml
要验证资源是否已成功上传,请运行以下命令。
$ oc get deployment -n <namespace> <deploymentName> -o yaml
例如:
$ oc get deployment -n bookinfo ratings-v1 -o yaml
Envoy sidecar 代理的配置由ServiceMeshControlPlane
管理。
您可以通过向injection-template.yaml
文件中的部署添加 Pod 注释来为应用程序设置 sidecar 代理的环境变量。环境变量将注入到 sidecar 中。
apiVersion: apps/v1
kind: Deployment
metadata:
name: resource
spec:
replicas: 7
selector:
matchLabels:
app: resource
template:
metadata:
annotations:
sidecar.maistra.io/proxyEnv: "{ \"maistra_test_env\": \"env_value\", \"maistra_test_env_2\": \"env_value_2\" }"
创建您自己的自定义资源时,绝不应包含 |
在早期版本的 Red Hat OpenShift Service Mesh 中,Mixer 的策略执行默认启用。现在,Mixer 策略执行默认禁用。您必须在运行策略任务之前启用它。
访问 OpenShift CLI(`oc`)。
这些示例使用 |
登录到 OpenShift Container Platform CLI。
运行以下命令以检查当前的 Mixer 策略执行状态
$ oc get cm -n istio-system istio -o jsonpath='{.data.mesh}' | grep disablePolicyChecks
如果disablePolicyChecks: true
,请编辑服务网格 ConfigMap
$ oc edit cm -n istio-system istio
找到 ConfigMap 中的disablePolicyChecks: true
并将值更改为false
。
保存配置并退出编辑器。
重新检查 Mixer 策略执行状态,确保其设置为false
。
服务网格在服务网格控制平面和成员命名空间中创建网络策略,以允许它们之间进行流量传输。在部署之前,请考虑以下条件,以确保您服务网格中以前通过 OpenShift Container Platform 路由公开的服务。
为了 Istio 能够正常工作,进入服务网格的流量必须始终通过 ingress-gateway。
将服务网格外部的服务部署到不在任何服务网格中的单独命名空间中。
需要在服务网格已注册命名空间内部署的非网格服务应在其部署中添加标签maistra.io/expose-route: "true"
,这可确保这些服务的 OpenShift Container Platform 路由仍然有效。
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 应用程序部署到该项目以及在服务网格中查看正在运行的应用程序来创建示例应用程序。
已安装 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® 上安装。 |
本节中的命令假设服务网格控制平面项目是 |
单击主页 → 项目。
单击创建项目。
输入bookinfo
作为项目名称,输入显示名称和描述,然后单击创建。
或者,您可以从 CLI 运行此命令来创建bookinfo
项目。
$ oc new-project bookinfo
单击Operators → 已安装的 Operators。
单击项目菜单并使用服务网格控制平面命名空间。在此示例中,使用istio-system
。
单击Red Hat OpenShift Service Mesh Operator。
单击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
是服务网格控制平面项目的名称。
$ 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
文件来创建 ingress gateway
$ 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 控制台。
单击Operators → 已安装的 Operators。
单击项目菜单,并从列表中选择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 成员角色。
Jaeger 是一个开源分布式跟踪系统。使用 Jaeger,您可以执行跟踪,该跟踪会跟踪请求通过构成应用程序的各种微服务的路径。Jaeger 默认情况下作为 Service Mesh 的一部分安装。
本教程使用 Service Mesh 和 Bookinfo 示例应用程序来演示如何使用 Jaeger 执行分布式跟踪。
已安装 OpenShift Container Platform 4.1 或更高版本。
已安装 Red Hat OpenShift Service Mesh 2.6.4。
在安装过程中启用了 Jaeger。
已安装 Bookinfo 示例应用程序。
安装 Bookinfo 示例应用程序后,向网格发送流量。多次输入以下命令。
$ curl "http://$GATEWAY_URL/productpage"
此命令模拟用户访问应用程序的productpage
微服务。
在 OpenShift Container Platform 控制台中,导航到网络→路由并搜索 Jaeger 路由,该路由是位置下列出的 URL。
或者,使用 CLI 查询路由的详细信息。在此示例中,istio-system
是 Service Mesh 控制平面命名空间
$ export JAEGER_URL=$(oc get route -n istio-system jaeger -o jsonpath='{.spec.host}')
输入以下命令以显示 Jaeger 控制台的 URL。将结果粘贴到浏览器中并导航到该 URL。
echo $JAEGER_URL
使用与访问 OpenShift Container Platform 控制台相同的用户名和密码登录。
在 Jaeger 仪表板的左窗格中,从服务菜单中选择productpage.bookinfo,然后单击窗格底部的查找跟踪。将显示跟踪列表。
单击列表中的一个跟踪以打开该跟踪的详细视图。如果您单击列表中的第一个跟踪(最新的跟踪),您将看到与/productpage
的最新刷新相对应的详细信息。