首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >高端黑科技系列一:新一代微服务与新一代API管理的集成

高端黑科技系列一:新一代微服务与新一代API管理的集成

作者头像
魏新宇
发布2018-09-30 11:50:42
1.6K0
发布2018-09-30 11:50:42
举报

文章导读

版权说明:本文书写过程中参照了红帽的技术文档;本系列文章中的部分测试代码为红帽公司版权所有,因此不能提供源码文件。

  • 本文的内容仅限于技术探讨,不能作为指导生产环境的素材;
  • 笔者鼓励读者购买红帽培训获得更多系统性的培训。
  • 本文分为系列文章,将会有多篇,初步预计将有5篇。

一、环境展现

Openshift 3.10,Istio1.0:

istio以容器的方式,运行在Openshift的项目中:

登录Openshift console:

实验中用到的应用:

实验中使用的后端业务服务将是一个名为Catalog Service的简单应用程序。

实验室环境中包含的CoolStore Catalog服务连接到MongoDB数据库。这个MongoDB数据库由Kubernetes使用OpenShift DeploymentConfig而不是Kubernetes Deployment进行管理。这样做的原因是OpenShift DeploymentConfig提供了比Kubernetes部署更多的功能。

测试应用的API:

调用Open API Swagger访问应用

OpenAPI规范(以前称为“Swagger规范”)是REST API的API描述格式。 Swagger是一套围绕OpenAPI规范构建的开源工具,可以帮助我们设计、构建、记录和使用REST API。

Swagger文档可用于目录微服务的REST端点:

二、API管理与Istio对比

实验室环境中安装了API Manager。

登录API Manager环境的管理门户,如下所示:

  • API管理促进API使用者和生产者之间的关系。 它降低了交易成本(即:搜索成本,价格发现,警务和执行成本等),否则会阻碍API消费者和生产者之间的互利交换。 通常情况下,这些API生产者和消费者并不亲自相互了解。
  • 服务网格提供了促进微服务架构(MSA)所需的技术弹性和可观察性。

本实验的目的是探讨这两种技术如何相互补充。

下表提供了API Management和Service Mesh之间的功能比较:

在实验中,将配置受支持的3scale API Gateway版本来管理CoolStore目录服务。

API网关将从预先存在的3scale多租户环境中检索代理服务配置。

创建两个API网关:

然后将应用与API集成:

创建服务:

创建应用计划

应用程序计划为API定义访问策略。

创建应用程序

在本节中,将应用程序与API使用者帐户相关联。 这将根据先前在应用程序计划中定义的详细信息为应用程序生成用户密钥。 用户密钥用作HTTP请求的查询参数,以通过内部部署API网关调用业务服务。

Stage服务整合

在API Manager管理员门户中,选择API。从catalog_service中,选择Application Plans。

对于catalog_app_plan并单击Publish链接:

然后进行应用集成:

集成成功。

三、使用启用了stio的路由替代API网关

截至到目前,实验环境现包含API Manager 2.2功能管理的目录RESTful服务。

本小节中,使用Istio的Envoy sidecar代理注入的API网关(把默认API网关绕开了):

在上图中,请注意新pod的引入:prod-apicast-istio。 通过API网关生产路线和服务的 Ingress现在被引导到注入了Istio sidecar的这个新的API Gateway。

prod-apicast-istio pod中的Envoy sidecar将与istio-system命名空间中的服务网格控制平面功能互操作。

API网关将继续使用其$THREESCALE_PORTAL_ENDPOINT环境变量的值从预配置的多租户API Manager中提取服务代理配置。

注入Istio

检索当前API网关生产部署的yaml表示形式:

部署一个启用了Istio的API网关生产网关:

修改prod-apicast服务以路由到新的启用了Istio的apicast

确保设置了$CATALOG_USER_KEY环境变量:

在prod-apicast-istio接管了服务以后,再度发起curl请求,失败:

回应是HTTP 404,原因如下:

启用了Istio的API网关无法连接到API Manager(参数:$THREESCALE_PORTAL_ENDPOINT)

API网关需要执行此操作,以从API Manager检索所有策略管理配置数据。而API网关无法连接到3scale API Manager的原因是:$THREESCALE_PORTAL_ENDPOINT引用了外部Internet URL。 默认情况下,Istio会阻止所有对Internet的出站请求。 在下一节中,将定义一个出口路由,以允许API网关与API Manager进行通信。

四、部署自定义的Egress Route规则

在本节中,创建一个自定义Istio ServiceEntry,它允许API网关连接到API Manager.

什么是 ServiceEntry?

Istio 内部会维护一个服务注册表,可以用 ServiceEntry 向其中加入额外的条目。通常这个对象用来启用对 Istio 服务网格之外的服务发出请求。例如下面的 ServiceEntry 可以用来允许外部对 *.foo.com 域名上的服务主机的调用。

实验中,为API网关配置文件创建自定义Istio Egress路由:

请注意,spec - > hosts的值设置为3scale API网关中指定的$ THREESCALE_PORTAL_ENDPOINT的相同值。

这应该允许API网关连接到API Manager的系统提供程序服务的路由。

加载新的出口规则:

查看新的ServiceEntry

现在已添加自定义出口路由,API网关能够从API管理器中提取配置数据。

使用如下命令验证启用了Istio的API网关现在可以轮询API Manager以获取代理服务配置信息

使用curl实用程序,重新尝试通过启用istio的API网关检索目录数据的请求。

这次,我们在响应中看到目录数据。 此请求现在流经启用了istio的API网关。

五、部署Istio Ingress网关

到目前为止,进入生产API网关的Ingress流量是通过Openshift集成的、基于HAProxy的OCP路由器实现的。

Openshift的Router缺乏与Jaeger和Promtheus等服务网格可观察性工具的集成。 Istio包含一个实现这些附加功能的 Ingress 网关。

在本实验的这一部分中,使用Istio Ingress替代Openshift的Router。

创建一个环境变量,该变量定义的是API Manager中配置的目录服务的Production Public Base URL:

$ CATALOG_API_GW_HOST的值将在作为HTTP HOST头的Istio ingress网关的请求中指定。 它应该与API Manager中的目录服务中配置的内容相匹配。

创建定义 ingress gateway配置文件:

创建路由:

创建 virtual service的文件:

在OCP中创建 virtual service:

设置反映Istio Ingress网关服务的主机和端口的环境变量:

通过新配置的Istio Ingress Gateway对目录数据的请求进行冒烟测试:

请注意使用HTTP Host标头。

如果此HOST标头包含在请求中,但其值(以及网关和虚拟服务中的主机属性)与API Manager中目录服务的Production Public Base Url不匹配,会发生什么?

之前的冒烟测试,使用了本地网络上提供的$INGREGRESS_HOST和$ INGRESS_PORT。 使用这个本地$INGRESS_HOST只能工作,因为你的curl客户端恰好与openshift位于同一台机器上。

istio-system命名空间提供了一个名为:istio-ingress gateway的路由。 与所有OCP路由一样,它暴露给外部客户端。

尝试通过此istio-ingress gateway路由调用API网关,而不是使用与内部服务网格相关的$ INGRESS_HOST和$ INGRESS_PORT。 结果是一样的。

要使用的curl命令如下:

curl -v \ -HHost:$CATALOG_API_GW_HOST \ `echo "http://"$(oc get route istio-ingressgateway -n istio-system -o template --template {{.spec.host}})"/products?user_key=$CATALOG_USER_KEY"`

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-09-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大魏分享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
服务网格
服务网格(Tencent Cloud Mesh, TCM),一致、可靠、透明的云原生应用通信网络管控基础平台。全面兼容 Istio,集成腾讯云基础设施,提供全托管服务化的支撑能力保障网格生命周期管理。IaaS 组网与监控组件开箱即用,跨集群、异构应用一致发现管理加速云原生迁移。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档