Red Hat OpenShift Service Mesh 部署
简介
Service Mesh 基于开源 Istio 项目,为创建部署的服务提供发现、负载均衡、服务对服务身份验证、故障恢复、指标和监控的服务网络提供了便捷的方法。服务网格还提供更复杂的操作功能,其中包括 A/B 测试、canary 发行版本、访问控制以及端到端验证。
核心功能
流量管理 - 控制服务间的流量和 API 调用,提高调用的可靠性,并使网络在条件不好的情况保持稳定。
服务标识和安全性 - 在网格中提供可验证身份的服务,并提供保护服务流量的能力,以便可以通过信任度不同的网络进行传输。
策略强制 - 对服务间的交互应用机构策略,确保实施访问策略,并在用户间分配资源。通过配置网格就可以对策略进行更改,而不需要修改应用程序代码。
遥测 - 了解服务间的依赖关系以及服务间的网络数据流,从而可以快速发现问题。
安装Operator
Red Hat OpenShift Service Mesh 需要使用以下四个 Operator:
OpenShift Elasticsearch -(可选)为使用分布式追踪平台进行追踪和日志记录提供数据库存储。它基于开源 Elasticsearch 项目。
Red Hat OpenShift distributed tracing 平台 - 提供分布式追踪以监控复杂分布式系统中的事务并进行故障排除。它基于开源 Jaeger 项目。
Kiali - 为您的服务网格提供可观察性。允许您在单个控制台中查看配置、监控流量和分析追踪。它基于开源 Kiali 项目。
Red Hat OpenShift Service Mesh - 允许您连接、保护、控制和观察组成应用程序的微服务。Service Mesh Operator 定义并监控管理 ServiceMeshControlPlane 资源,这个资源用来管理 Service Mesh 组件的部署、更新和删除操作。它基于开源 Istio 项目。
创建 ServiceMeshControlPlane控制层面
1.以具有 cluster-admin 角色的用户身份登录 OpenShift Container Platform CLI。如果使用 Red Hat OpenShift Dedicated,则必须有一个具有 dedicated-admin 角色的帐户。
oc login --token=sha256~JSJuR84lf1joH1XStxuLHQX73RVBh4BU4v1kpGPimIw --server=https://api.crc.testing:6443
2.创建一个名为 istio-system 的项目。
oc new-project istio-system
3.使用以下示例,创建一个名为 istio-installation.yaml 的 ServiceMeshControlPlane 文件。control plane 的版本决定了与 Operator 版本无关的可用功能。
istio-installation.yaml 版本示例
apiVersion: maistra.io/v2
kind: ServiceMeshControlPlane
metadata:
name: basic
namespace: istio-system
spec:
version: v2.1
tracing:
type: Jaeger
sampling: 10000
addons:
jaeger:
name: jaeger
install:
storage:
type: Memory
kiali:
enabled: true
name: kiali
grafana:
enabled: true
4.运行以下命令来部署 control plane
oc create -n istio-system -f istio-installation.yaml
5.要观察 pod 部署的进度,请运行以下命令:
oc get pods -n istio-system -w
您应该看到类似如下的输出:
NAME READY STATUS RESTARTS AGE
grafana-b4d59bd7-mrgbr 2/2 Running 0 65m
istio-egressgateway-678dc97b4c-wrjkp 1/1 Running 0 108s
istio-ingressgateway-b45c9d54d-4qg6n 1/1 Running 0 108s
istiod-basic-55d78bbbcd-j5556 1/1 Running 0 108s
jaeger-67c75bd6dc-jv6k6 2/2 Running 0 65m
kiali-6476c7656c-x5msp 1/1 Running 0 43m
prometheus-58954b8d6b-m5std 2/2 Running 0 66m
wasm-cacher-basic-8c986c75-vj2cd 1/1 Running 0 65m
6.使用 CLI 验证 SMCP 安装,运行以下命令验证 control plane 安装,其中 istio-system 是安装服务网格 control plane 的命名空间。
oc get smcp -n istio-syst
当 STATUS 列是 ComponentsReady 时,安装成功完成。
NAME READY STATUS PROFILES VERSION AGE
basic 10/10 ComponentsReady ["default"] 2.1.1 66m
Bookinfo 示例应用程序
Bookinfo 应用程序显示一本书的信息,类似于在线书店的单一目录条目。应用会显示一个页面,其中描述了图书详细信息(ISBN、页数和其他信息)以及图书的评论。
Bookinfo 应用程序由这些微服务组成:
productpage 微服务调用 details 和 reviews 微服务来产生页面信息。
details 微服务包括了书的信息。
review 微服务包括了书的评论。它同时还会调用 ratings 微服务。
ratings微服务包括了带有对本书的评论信息的评分信息。
1.通过 CLI 运行这个命令来创建 bookinfo 项目
oc new-project bookinfo
2.切换到istio-system 项目 因为在这项目安装的SMCP
oc project istio-system
3.创建ServiceMeshMemberRoll (SMMR) 把bookinfo 项目加入到服务网格中。
Bookinfo ServiceMeshMemberRoll 示例 servicemeshmemberroll-default.yaml
apiVersion: maistra.io/v1
kind: ServiceMeshMemberRoll
metadata:
name: default
spec:
members:
- bookinfo
4.创建资源
oc create -n istio-system -f servicemeshmemberroll-default.yaml
5.运行以下命令,以验证 ServiceMeshMemberRoll 是否已成功创建。
oc get smmr -n istio-system -o wide
当 STATUS 列为 Configured 时,安装成功完成。
NAME READY STATUS AGE MEMBERS
default 1/1 Configured 70s ["bookinfo"]
6.在 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
7.通过应用 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
8.设置 GATEWAY_URL 参数的值:
export GATEWAY_URL=$(oc -n istio-system get route istio-ingressgateway -o jsonpath='{.spec.host}')
- 添加默认目的地规则
要添加目的地规则,请运行以下命令之一:
如果没有启用 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
10.验证 Bookinfo 安装
验证所有 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"
http://istio-ingressgateway-istio-system.apps-crc.testing/productpage
访问:http://istio-ingressgateway-istio-system.apps-crc.testing/productpage
访问 Kiali 进入路由获取地址:https://kiali-istio-system.apps-crc.testing
登录账号密码默认与OCP集群一样我用的OCP 4.10.22 账号: kubeadmin 密码:openshift
多次请求bookinfo接口,会现实出来调用链路。
参考资料:
https://access.redhat.com/documentation/zh-cn/openshift_container_platform/4.11/html-single/service_mesh/index#ossm-tutorial-bookinfo-overview_ossm-create-mesh