OpenShift

Openshift之服务网格Istio

什么是服务网格?


服务网络就是指构成应用程序的微服务网络以及应用之间的交互。随着规模和复杂性的增长,服务网格越来越难以理解和管理。它的需求包括服务发现、负载均衡、故障恢复、指标收集和监控以及通常更加复杂的运维需求,例如 A/B 测试、金丝雀发布、限流、访问控制和端到端认证等。

Istio是什么?


Istio 是一个用来连接、管理和保护微服务的开放平台。Istio 提供一种简单的方式来为已部署的服务建立网络,该网络具有负载均衡、服务间认证、监控等功能,而不需要对服务的代码做任何改动。想要让服务支持 Istio,只需要在您的环境中部署一个特殊的 sidecar,使用 Istio 控制平面功能配置和管理代理,拦截微服务之间的所有网络通信。

Istio能做什么?


Istio 提供了一个完整的解决方案,通过为整个服务网格提供行为洞察和操作控制来满足微服务应用程序的多样化需求。它在服务网络中统一提供了许多关键功能:

  • 流量管理。控制服务之间的流量和API调用的流向,使得调用更可靠,并使网络在恶劣情况下更加健壮。
  • 服务身份和安全。为网格中的服务提供可验证身份,并提供保护服务流量的能力,使其可以在不同可信度的网络上流转。
  • 策略执行。将组织策略应用于服务之间的互动,确保访问策略得以执行,资源在消费者之间良好分配。可以通过通过配置网格而不是修改应用程序代码来完成策略的更改。
  • 遥测:了解服务之间的依赖关系,以及它们之间流量的本质和流向,从而提供快速识别问题的能力。

Istio的基本架构


Istio 服务网格逻辑上分为数据平面和控制平面。

  • Envoy(数据平面Proxy)
  • Mixer(负责在服务网格上执行访问控制和使用策略,并从 Envoy 代理和其他服务收集遥测数据。)
  • Pilot(Envoy sidecar 提供服务发现功能,为智能路由(例如 A/B 测试、金丝雀部署等)和弹性(超时、重试、熔断器等)提供流量管理功能。)
  • Citadel(通过内置身份和凭证管理可以提供强大的服务间和最终用户身份验证。)

什么是Red Hat OpenShift服务网格?


  • Red Hat OpenShift服务网格是一个平台,它提供了对服务网格的行为监控和操作,提供了连接、保护和监控微服务应用程序的统一方式。
  • 基于开源Istio项目,Red Hat OpenShift服务网格在现有的应用程序上添加了一个透明层,而不需要对服务代码进行任何更改。通过在整个环境中部署一个特殊的sidecar proxy,拦截微服务之间的所有网络通信,通过使用控制平面的配置,管理服务网格,可以达到服务的网络控制。
  • Red Hat OpenShift Service Mesh能够简单地实现服务发现、负载均衡、服务间的认证、故障恢复、统计、监控,同时也提供了复杂的功能,包括A/B测试、金丝雀发布、速率限制、访问控制和端到端认证。
  • 当前最新版本的Openshift Service Mesh为 Technology Preview 7(技术预览版7)。它增了3scale Istio Adapter,同时相关软件服务版本为Istio 1.11、Kiali 0.13.x、Jaeger 1.9.0

Red Hat OpenShift Service Mesh当前问题


  • Red Hat OpenShift Service Mesh不支持网络多租户
  • Red Hat OpenShift Service Mesh不支持IPV6
  • istio-init容器需要有privileged权限,或者至少需要root并具有NET管理功能。因为istio-init需要配置Pod中的iptable规则来拦截网络连接。

安装 OpenShift Service Mesh 和相关依赖 Operator


一套完整的 Service Mesh 环境不但需要安装 OpenShift Service Mesh Operator 以提供 Istio 运行环境,还需要安装 Elasticsearch Operator、Jaeger Operator(OpenShift distributed tracing platform)、Kiali Operator,以提供对 Service Mesh 应用的监控跟踪功能。

下面将使用OpenShift集群管理员身份登录OpenShift控制台,然后按照顺序安装Elasticsearch Operator、Jaeger Operator、Kiali Operator和Service Mesh Operator。

安装配置 Elasticsearch Operator


1.在控制台的Administrator视图中,进入Operators → OperatorHub,然后搜索出下图的“OpenShift Elasticsearch Operator”,点击进入。

2.在右滑的“OpenShift Elasticsearch Operator”页面中点击“Install”按钮。

3.在“Install Operator”页面中接受默认选项,点击“Install”按钮。

4.安装完成后界面将显示下图(你看到的版本有可能更新)。

5.此时查看Operators → Installed Operators,其中Status会显示Successed。

安装配置 Jaeger Operator(OpenShift distributed tracing)


1.在控制台的Administrator视图中,进入Operators → OperatorHub,然后搜索出下图的“Jaeger”(注意,不是“Community Jaeger Operator”),点击进入。

2.在右滑的“Red Hat OpenShift distributed tracing platform”页面中点击“Install”按钮。

3.在“Install Operator”页面中接受默认选项,点击“Install”按钮。

4.安装完成后界面将显示下图(你看到的版本有可能更新)。

5.此时查看Operators → Installed Operators,其中Status会显示Successed。

安装配置 Kiali Operator


1.在控制台的Administrator视图中,进入Operators → OperatorHub,然后搜索出下图的“Kiali Operator”。选择下图进入(而不是“Community的Kiali Operator”)。

2.在右滑的“Kiali Operator”页面中点击“Install”按钮。

3.在“Install Operator”页面中接受默认选项,点击“Install”按钮。

4.安装完成后界面将显示下图(你看到的版本有可能更新)。

5.此时查看Operators → Installed Operators,其中Status会显示Successed。

安装配置 OpenShift Service Mesh Operator


1.在控制台的Administrator视图中,进入Operators → OperatorHub,然后搜索出下图的“Red Hat OpenShift Service Mesh”。

2.在右滑的“Red Hat OpenShift Service Mesh”页面中点击“Install”按钮。

3.在“Install Operator”页面中接受默认选项,点击“Install”按钮。

4.安装完成后界面将显示下图(你看到的版本有可能更新)。

5.此时查看Operators → Installed Operators,其中Status会显示Successed。

为OpenShift项目配置Service Mesh运行环境


准备项目资源

可以用非集群管理员创建以下2个项目,其中istio-system项目用来运行Service Mesh的Control Plane的,而istio-app项目是用来运行Istio应用的。

$ ISTIO_SYSTEM=istio-system
$ ISTIO_APP=istio-app
$ oc new-project $ISTIO_SYSTEM
$ oc new-project $ISTIO_APP

创建Service Mesh Control Plane

Control Plane是Service Mesh 的核心管理环境。在OpenShift集群中我们按照以下说明创建一个Service Mesh Control Plane运行环境。

1.用以上用户登录控制台,向切换到istio-system项目,然后进入Operators → Installed Operators菜单,然后在进入上一步安装的“Red Hat OpenShift Service Mesh”。

2.在Red Hat OpenShift Service Mesh的Overivew页面中的“Istio Service Mesh Control Plane”区域点击Create Instance链接。

3.在“Create ServiceMeshControlPlane”页面中接受默认的配置,然后点击Create按钮。

4.执行命令查看进度创建进度,完成后会在istio-system项目中运行7个Pod。可以通过命令或在Console的Developer视图的Topology中查看部署的资源。

$ oc get smcp -n $ISTIO_SYSTEM
NAME    READY   STATUS            PROFILES      VERSION   AGE
basic   9/9     ComponentsReady   ["default"]   2.3.0     3m36s
 
$ oc get pods -n $ISTIO_SYSTEM
NAME                                    READY   STATUS    RESTARTS   AGE
grafana-57df5c94b7-d6tpv                2/2     Running   0          3m37s
istio-egressgateway-cff975474-2jrhn     1/1     Running   0          3m38s
istio-ingressgateway-84ddcb8699-48kvz   1/1     Running   0          3m38s
istiod-basic-568667df69-62fnj           1/1     Running   0          4m8s
jaeger-7db698cb5c-sz4rn                 2/2     Running   0          3m38s
kiali-59c95c68f-6w456                   1/1     Running   0          2m43s
prometheus-b54d9974d-4vppp              2/2     Running   0          3m52s
wasm-cacher-basic-577d7d9665-ltgls      1/1     Running   0          3m16s

创建Service Mesh Member Roll,并关联Istio应用项目


1.在控制台上切换到istio-system项目,然后进入Operators → Installed Operators菜单,然后在进入上一步安装好的“Red Hat OpenShift Service Mesh”。

2.在Red Hat OpenShift Service Mesh的 Overivew 页面中点击“Istio Service Mesh Member Roll”区域的Create Instance链接。

3.在Create ServiceMeshMemberRoll页面中的Members区域提供用来运行 Istio 的项目名“istio-app”,然后点击 Create。如果还有其他项目,都可添加到该Members列表中

4.查看名为default的ServiceMeshMemberRoll状态,正常完成后是Ready状态。

完成以上操作后,我们就准备好OpenShift Service Mesh运行所需要的所有资源了,然后就可以在istio-app项目中部署Istio的服务了。