首页 > 其他分享 >使用istio服务网格作为api网关

使用istio服务网格作为api网关

时间:2024-05-27 19:30:49浏览次数:26  
标签:网关 Kubernetes api Ingress istio Istio API Gateway

API网关作为客户端访问后端的入口由来已久,主要是管理“南北”流量,近几年开始流行Service Mesh架构,主要是管理内部系统,(即“东西”流量),而像 Istio 这样的服务网格也有内置网关,可以将系统内外的流量置于统一控制之下。这通常会给 Istio 的初次用户带来困惑。 Service Mesh 和 API Gateway 是什么关系? Istio 的网关是如何工作的?在 Istio 网格中暴露服务的方式有哪些?这篇文章给你答案。

Istio 服务网格的关键见解
  • 服务网格最初是为了解决管理分布式系统内部流量的问题而创建的,但 API 网关早在它之前就存在了。
  • 虽然网关内置于 Istio 中,但您仍然可以使用自定义 Ingress Controller 来代理外部流量。
  • API 网关和服务网格正在融合
如何在 Istio 服务网格中公开服务?

下图显示了使用 Istio Gateway、Kubernetes Ingress、API Gateway 和 NodePort/LB 在 Istio 服务网格中公开服务的四种方法。

在这里插入图片描述

Istio 网格以阴影表示,网格中的流量是内部(东西向)流量,而来自 Kubernetes 集群内的客户端访问服务的流量是外部(南北向)流量。

方法控制器特征
NodePort/LoadBalancerkubernetes负载均衡
Kubernetes Ingressingress-controller负载均衡、TLS、虚拟主机、流量路由
Istio Gatewayistio负载均衡、TLS、虚拟主机、高级流量路由、其他高级 Istio 功能
API GatewayAPI Gateway负载均衡、TLS、虚拟主机、高级流量路由、API 生命周期管理、计费、速率限制、策略执行、数据聚合

由于 NodePort/LoadBalancer 是公开 Kubernetes 内置服务的基本方式,本文不会讨论该选项。下面将描述其他三种方法中的每一种。

使用 Kubernetes Ingress 暴露流量

我们都知道,Kubernetes 集群的客户端无法直接访问 Pod 的 IP 地址,因为 Pod 处于 Kubernetes 内置的网络平面中。我们可以使用 NodePort 或 Load Balancer Kubernetes 服务类型在集群外公开 Kubernetes 内的服务。为了支持虚拟托管、隐藏和保存 IP 地址,您可以使用 Ingress 资源在 Kubernetes 中公开服务。

在这里插入图片描述

Ingress是一个Kubernetes资源,它控制一个做流量巡回的ingress controller的行为,相当于一个负载均衡的定向代理服务器,比如Nginx、Apache等,其中还包括规则定义,即路由信息对于 URL,由 Ingress 控制器提供。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: istio
  name: ingress
spec:
  rules:
  - host: httpbin.example.com
    http:
      paths:
      - path: /status/*
        backend:
          serviceName: httpbin
          servicePort: 8000

上面示例中的 kubernetes.io/ingress.class: istio 注解表明 Ingress 使用 Istio Ingress Controller,而 Istio Ingress Controller 实际上使用了 Envoy 代理。

使用 Istio Gateway 暴露服务

Istio 是一种流行的服务网格实现,它从 Kubernetes 发展而来,它实现了 Kubernetes 没有的一些功能。 (请参阅什么是 Istio 以及为什么 Kubernetes 需要 Istio?)它使流量管理对应用程序透明,将此功能从应用程序转移到平台层并成为云原生基础设施。

Istio 在 Istio 0.8 之前的版本中使用 Kubernetes Ingress 作为流量入口,其中使用 Envoy 作为 Ingress Controller。从 Istio 0.8 及更高版本开始,Istio 创建了 Gateway 对象。 Gateway 和 VirtualService 用于表示 Istio Ingress 的配置模型,Istio Ingress 的默认实现使用相同的 Envoy 代理。通过这种方式,Istio 控制平面以一致的配置模型控制入口网关和内部 sidecar 代理。这些配置包括路由规则、策略实施、遥测和其他服务控制功能。

Istio Gateway 资源本身只能为 L4 到 L6 配置,例如暴露的端口、TLS 设置等;但是,网关可以绑定到 VirtualService,其中可以在 L7 上配置路由规则,例如版本化流量路由、故障注入、HTTP 重定向、HTTP 重写以及网格内支持的所有其他路由规则。

下面是网关绑定到 VirtualService 的示例。带有“istio: ingressgateway”标签的 pod 将充当 Ingress 控制器并将 HTTP 流量路由到 httpbin.example.com 虚拟主机的端口 80。这个和使用Kubernetes Ingress最大的区别是需要我们手动将VirtualService绑定到Gateway上,并指定Gateway所在的pod。这个配置相当于给Kubernetes开了一个入口,供外部访问。

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: httpbin-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "httpbin.example.com"

下面的 VirtualService 通过网关绑定到上面的网关,以接受来自该网关的流量。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: httpbin
spec:
  hosts:
  - "httpbin.example.com"
  gateways:
  - httpbin-gateway
  http:
  - match:
    - uri:
        prefix: /status
    route:
    - destination:
        port:
          number: 8000
        host: httpbin
使用 API 网关

API 网关是位于客户端和后端服务之间的 API 管理工具,广泛用于微服务中,作为将客户端接口与后端实现分离的一种方式。当客户端发出请求时,API 网关将其分解为多个请求,然后将它们路由到正确的位置,生成响应并跟踪所有内容。

API网关是微服务架构中的一类特殊服务,作为所有微服务的入口,负责执行路由请求、协议转换、聚合数据、鉴权、限速、熔断等功能。大多数企业 API 都是通过 API 网关部署的,API 网关通常处理跨 API 服务系统的常见任务,例如 TLS 终止、身份验证和授权、速率限制和统计信息。

网格中可以有一个或多个 API 网关。 API网关的职责是

  • 请求路由和版本控制
  • 促进单体应用程序向微服务的过渡
  • 权限认证
  • 数据聚合:监控和计费
  • 协议转换
  • 消息传递和缓存
  • 安全和警报

上面的路由、权限认证等很多基础功能也可以通过Istio Gateway来实现,但是一些成熟的API网关在功能丰富性和可扩展性上可能更有优势。

  • API Gateway的引入需要考虑API Gateway自身的部署、运维、负载均衡等场景,增加了后端服务的复杂度。
  • API Gateway承载了大量的接口适配,维护难度大。
  • 对于某些场景,增加一跳可能会导致性能下降。

目前,一些 API 网关模仿正在通过将它们部署在 sidecar 中来构建自己的服务网格。

概括

在 Istio 服务网格中,可以使用各种 Kubernetes Ingress Controller 作为入口网关,当然也可以直接使用 Istio 内置的 Istio Gateway,进行策略控制、流量管理、使用监控等。这样做的好处是可以直接通过 Istio 的控制平面来管理网关,而不需要额外的工具。但对于API语句周期管理、复杂计费、协议转换、鉴权等功能,传统的API网关可能更适合你。因此,您可以根据需要进行选择,也可以组合使用。

一些传统的反向代理也在走向Service Mesh,比如Nginx的Nginx Service Mesh和Traefik的Traefik Mesh,还有一些API网关产品也在走向Service Mesh,比如Kong和Kuma,未来我们会看到API 网关、反向代理和服务网格的更多融合。

标签:网关,Kubernetes,api,Ingress,istio,Istio,API,Gateway
From: https://blog.csdn.net/fuxily/article/details/139222698

相关文章

  • 亚马逊API实时数据接口,亚马逊商品详情数据接口采集助力高效查找采购低价货源
    亚马逊通过其API接口,为开发者提供了实时获取商品详情数据的能力,从而助力高效地查找和采购低价货源。在当今的电子商务领域,能够快速准确地获取产品信息是至关重要的。亚马逊API不仅使得这一过程自动化,还提高了操作的效率和准确性。下面将详细探究这些API如何工作以及它们如何帮......
  • 亚马逊API实时数据接口丨关键词搜索亚马逊商品列表数据接口丨亚马逊商品数据采集接口
    关键词搜索亚马逊商品列表数据接口通常涉及以下步骤11:关键词研究:首先,需要确定与您的产品相关的关键词。这可以通过使用亚马逊的自动搜索建议功能、GoogleAdwords、MerchantWords、KTD等关键词研究工具来完成。您还可以参考同类产品大卖家的详情页面,从他们的标题、描述、评论......
  • JSON里包含的数组中的值 (List数组或对象)转换出来并读取, 通过 hutool 中的API 方法
    hutool 是一个Java工具包,它提供了很多实用的功能,包括JSON的处理。在 hutool 中,你可以使用 cn.hutool.json.JSONUtil 类来解析和处理JSON数据。如果你想要获取JSON中的数组(JSONArray),并遍历读取其中的值(无论是基本类型还是对象),你可以按照以下步骤操作:首先,确保你的项目......
  • Python调用科大讯飞在线语音合成API --内附完整项目
    一,注册讯飞账号,并实名制。讯飞开放平台-以语音交互为核心的人工智能开放平台(xfyun.cn)二、找到音频合成,按页面提示申请免费试用。在线语音合成_免费试用-讯飞开放平台(xfyun.cn)三、申请免费使用后,找到API信息如下:​ 四、找到开发者文档,仔细阅读语音合成(流式版)WebAP......
  • java调用科大讯飞在线语音合成API --内附完整项目
    科大讯飞语音开放平台基础环境搭建1.用户注册 注册科大讯飞开放平台账号2.注册好后先创建一个自己的应用创建完成后进入应用可以看到我们开发需要的三个参数:APPID,APISecret,APIKey3.因为平台提供的SDK中只支持了简单的中英两种语言语音合成,所以这里我们不会用提供的Jav......
  • .net 8 api部署到iis出现500.19
    1.先下载了.net8sdk包,sdk包自带运行时。2.通过文件发布api到iis3.点击运行出现500.19,已经程序池改为无托管代码,并无效果4.点击模块发现core的api无法展示模块列表,framework可以展示 5.下载dotnet-hosting-2.2.5-win 问题解决链接:https://download.visualstudio.microsoft.com......
  • 流媒体内网穿透/组网/视频协议转换EasyNTS上云网关如何更改密码?
    EasyNTS上云网关的主要作用是解决异地视频共享/组网/上云的需求,网页对域名进行添加映射时,添加成功后会生成一个外网访问地址,在浏览器中输入外网访问地址,即可查看内网应用。无需开放端口,EasyNTS上云网关平台会向EasyNTS硬件发送端口组网的指令,短时间内组网成功,并形成云端能力对外发......
  • ​腾讯云全面下调混元大模型价格 字节豆包、阿里千问、百度API接口费用对比入口
         大家好,我是AI科技智库(www.aigchouse.com),国内Top10计算机博士毕业,创办了一站式AI工具、资料、课程资源学习平台,每日持续更新。通过分享最新AI工具、资源、变现指南等,帮助更多人了解使用AI,提升工作和学习效率。这里有海量AI工具整合包、AI变现指南、AI学习资料、AI免......
  • Web Service和Web API理解和使用场景
    WebService理解:WebService是一种基于网络的服务,它使用标准化的消息传递协议,最典型的是基于SOAP(SimpleObjectAccessProtocol)协议。SOAP使用XML格式封装数据,定义了消息的结构和传输方式,因此它是一个重量级的解决方案。WebService支持跨平台、跨语言的通信,常用于企业内......