您当前位置:资讯中心 >云计算 >浏览文章

Higress 或许是目前最好的云原生网关?

来源:CTO 日期:2024/4/22 7:28:56 阅读量:(0)

Higress 是基于阿里内部的 Envoy Gateway 实践沉淀、以开源 Istio + Envoy 为核心构建的云原生 API 网关,实现了流量网关 + 微服务网关 + 安全网关三合一的高集成能力,深度集成 Dubbo、Nacos、Sentinel 等微服务技术栈,能够帮助用户极大的降低网关的部署及运维成本;在标准上全面支持 Ingress 与 Gateway API,积极拥抱云原生下的标准 API 规范;同时,Higress Controller 也支持 Nginx Ingress 平滑迁移,帮助用户零成本快速迁移到 Higress。

行业中通常把网关分为两个大类:流量网关与业务网关,流量网关主要提供全局性的、与后端业务无关的策略配置,例如阿里内部的的统一接入网关 Tengine 就是典型的流量网关;业务网关顾名思义主要提供独立业务域级别的、与后端业务紧耦合策略配置,随着应用架构模式从单体演进到现在的分布式微服务,业务网关也有了新的叫法 - 微服务网关。

在虚拟化时期的微服务架构下,业务通常采用流量网关 + 微服务网关的两层架构,流量网关负责南北向流量调度和安全防护,微服务网关负责东西向流量调度和服务治理,而在容器和 K8s 主导的云原生时代,Ingress 成为 K8s 生态的网关标准,赋予了网关新的使命,使得流量网关 + 微服务网关合二为一成为可能。

作为面向南北向的公网网关,使用 Waf 防护异常流量是很常规的需求,而且随着互联网环境变得越来越复杂,用户对防护的诉求是持续增强的,常规做法是将流量先接入 Waf 安全网关,过滤后再将流量转发给流量网关,最后到达微服务网关;Higress 希望通过内置 Waf 模块,使得用户的请求链接只经过 Higress 就可以同时完成 Waf 防护、流量分发、微服务治理,既可以降低链路 RT,也可以降低网关的运维复杂度。因此 Higress 实现了流量网关 + 微服务网关 + 安全网关三合一的高集成能力。

使用场景

Higress 支持多种功能特性,适用于多种场景:

  • Kubernetes Ingress 网关:
    Higress 可以作为 K8s 集群的 Ingress 入口网关, 并且兼容了大量 K8s Nginx Ingress 的注解,可以从 K8s Nginx Ingress 快速平滑迁移到 Higress。
    支持 Gateway API 标准,支持用户从 Ingress API 平滑迁移到 Gateway API。
  • 微服务网关:
    Higress 可以作为微服务网关, 能够对接多种类型的注册中心发现服务配置路由,例如 Nacos, ZooKeeper, Consul, Eureka 等。
    并且深度集成了 Dubbo, Nacos, Sentinel 等微服务技术栈,基于 Envoy C++ 网关内核的出色性能,相比传统 Java 类微服务网关,可以显著降低资源使用率,减少成本。
  • 安全防护网关:
    Higress 可以作为安全防护网关, 提供 WAF 的能力,并且支持多种认证鉴权策略,例如 key-auth, hmac-auth, jwt-auth, basic-auth, oidc 等。

核心优势

  • 生产等级
    脱胎于阿里巴巴 2 年多生产验证的内部产品,支持每秒请求量达数十万级的大规模场景。
    彻底摆脱 reload 引起的流量抖动,配置变更毫秒级生效且业务无感。
  • 平滑演进
    支持 Nacos/Zookeeper/Eureka 等多种注册中心,可以不依赖 K8s Service 进行服务发现,支持非容器架构平滑演进到云原生架构。
    支持从 Nginx Ingress Controller 平滑迁移,支持平滑过渡到 Gateway API,支持业务架构平滑演进到 ServiceMesh。
  • 兼容性强
    兼容 Nginx Ingress Annotation 80%+ 的使用场景,且提供功能更丰富的 Higress Annotation 注解。
    兼容 Ingress API/Gateway API/Istio API,可以组合多种 CRD 实现流量精细化管理。
  • 便于扩展
    提供 Wasm、Lua、进程外三种插件扩展机制,支持多语言编写插件,生效粒度支持全局级、域名级,路由级。
    插件支持热更新,变更插件逻辑和配置都对流量无损。

架构

整体上 Higress 网关由控制面组件 higress-controller 和数据面组件 higress-gateway 组成。higress-gateway 负责承载数据流量,higress-controller 负责管理配置下发。

Higress

数据面组件 higress-gateway 是基于 Envoy 开发的网关组件,负责接收和处理流量,支持 HTTP/1.1、HTTP/2、gRPC 等协议,支持 TLS、mTLS、WAF、限流、熔断、重试、负载均衡、路由、转发、重定向、跨域等功能,也就是说真正的流量处理都是在 higress-gateway 中完成的。

控制面组件 higress-controller 负责管理配置下发,支持 Ingress API、Gateway API、Istio API,支持多种注册中心,支持多种认证鉴权策略,支持多种插件扩展机制,支持多种 CRD 实现流量精细化管理,也就是说所有的配置都是通过 higress-controller 下发到 higress-gateway 中的。

安装

Higress 的安装非常简单,只需要通过 Helm 安装即可,如果想要根据自己的需求进行定制,可以通过修改 Helm 的参数来实现,完整参数介绍可以查看运维参数说明,常用的一些可定制参数如下所示:

参数名

参数说明

默认值

全局参数



global.local

如果要安装至本地 K8s 集群(如 Kind、Rancher Desktop 等),请设置为 true

false

global.ingressClass

用于过滤被 Higress Controller 监听的 Ingress 资源的 IngressClass。 在集群内部署了多个网关时,可以使用这一参数来区分每个网关的职责范围。 IngressClass 有一些特殊的取值: 1. 如果设置为“nginx”,Higress Controller 将监听 Ingress 为 nginx 或为空的 Ingress 资源。 2. 如果设为空,Higress Controller 将监听 K8s 集群内的全部 Ingress 资源。

higress

global.watchNamespace

如果值不为空,Higress Controller 将只会监听指定命名空间下的资源。 当基于 K8s 命名空间进行业务系统隔离时,若需要对每个命名空间部署一套独立的网关,可以通过这一参数来限制 Higress 监听指定命名空间内的 Ingress。

""

global.disableAlpnH2

是否在 ALPN 中禁用 HTTP/2 协议

true

global.enableStatus

若为true, Higress Controller 将会更新 Ingress 资源的 status 字段。 为避免从 Nginx Ingress 迁移过程中,覆盖 Ingress 对象的 status 字段,可以将这一参数设置为false,这样 Higress 默认就不会将入口 IP 写入 Ingress 的 status 字段。

true

global.enableIstioAPI

若为true,Higress Controller 将同时监听 istio 资源

false

global.enableGatewayAPI

若为true,Higress Controller 将同时监听 Gateway API 资源

false

global.onlyPushRouteCluster

若为true,Higress Controller 将会只推送被路由关联的服务

true

核心组件参数



higress-core.gateway.replicas

Higress Gateway 的 pod 数量

2

higress-core.controller.replicas

Higress Controller 的 pod 数量

1

控制台参数



higress-console.replicaCount

Higress Console 的 pod 数量

1

higress-console.service.type

Higress Console 所使用的 K8s Service 类型

ClusterIP

higress-console.web.login.prompt

登录页面上显示的提示信息

""

higress-console.o11y.enabled

若为 true,将同时安装可观测性套件(Grafana + Promethues)

false

higress-console.pvc.rwxSupported

标识目标 K8s 集群是否支持 PersistentVolumeClaim 的 ReadWriteMany 操作方式。

true

默认情况下 ingress-gateway 会通过一个 LoadBalancer Service 暴露出来,如果你的集群不支持 LoadBalancer 类型的 Service,可以通过修改 higress-core.gateway.service.type 参数来修改 Service 类型,或者通过修改 higress-core.gateway.hostNetwork 参数来直接使用宿主机网络,比如我们这里就使用 hostNetwork 来直接使用宿主机网络:

helm repo add higress.io https://higress.io/helm-charts
helm upgrade --install higress -n higress-system higress.io/higress --set higress-core.gateway.hostNetwork=true,higress-core.gateway.service.type=ClusterIP --create-namespace
关键字:
声明:我公司网站部分信息和资讯来自于网络,若涉及版权相关问题请致电(63937922)或在线提交留言告知,我们会第一时间屏蔽删除。
有价值
0% (0)
无价值
0% (10)

分享转发:

发表评论请先登录后发表评论。愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。