历程回顾
Aliware

Higress 1.3 版本已经正式发布,除了增加的新功能,已有能力也在大量社区用户反馈的过程中不断完善改进,这个版本同时标志着 1.x 进入可以大规模生产使用的状态。
新版本:功能速览
Aliware
新标准:支持最新版本 Gateway API 标准,并且具备从 Ingress 平滑渐进演进,以及对接多种服务发现机制的能力。
新工具:正式 release 了 hgctl (Higress Crontroller) 这个 "All in one" 的新工具,不仅可以替代 Helm 实现更简易的安装,还提供了 WASM 插件开发工具包,以及网关配置检查等丰富功能。
除了这两个核心功能外,还有一些实用功能:
提供了 Higress Admin Java SDK,可以统一对接 K8s 和非 K8s 环境,管理域名/路由等配置
提供了 OIDC 插件,支持对接 Keycloak/Okta 等第三方身份认证系统
Higress Console 的易用性和安全性提升,不再通过路由暴露,支持界面初始化/修改密码
新标准:支持最新版 Gateway API
Aliware
使用 Helm :通过参数 --set global.enableGatewayAPI=true
使用 hgctl :通过命令行参数或者 install.yaml 中配置 global.enableGatewayAPI=true
首先创建 GatewayClass 资源:
apiVersion: gateway.networking.k8s.io/v1kind: GatewayClassmetadata:name: higress-gatewayspec:controllerName: "higress.io/gateway-controller"
apiVersion: gateway.networking.k8s.io/v1kind: Gatewaymetadata:name: higress-gatewaynamespace: higress-systemspec:gatewayClassName: higress-gatewaylisteners:- name: foobarhostname: "*.foobar.com"port: 80protocol: HTTPallowedRoutes:namespaces:from: All- name: foobar-httpshostname: "*.foobar.com"port: 443protocol: HTTPSallowedRoutes:namespaces:from: Alltls:certificateRefs:- kind: Secretname: wildcard-foobar-commode: Terminate
因为上面 Gateway 通过 allowedRoutes 配置了允许所有命名空间的路由来关联,所以这里在 default 命名空间下创建 HTTPRoute,关联上面创建的 Gateway,即可定义域名下的具体路由:
apiVersion: gateway.networking.k8s.io/v1kind: HTTPRoutemetadata:name: foobarnamespace: defaultspec:parentRefs:- name: higress-gatewaynamespace: higress-systemhostnames: ["www.foobar.com"]rules:- matches:- path:type: PathPrefixvalue: /foobackendRefs:- name: foo-serviceport: 5678
以上就是 Gateway API 的一个简单用法示例,Gateway API 还有很多功能和玩法,后面 Higress 公众号/博客会出一个系列进行系统分享和介绍。
# 一键安装, 交互式命令选择第一种安装模式 local-k8s,将默认安装 Gateway API CRDhgctl install
apiVersion: gateway.networking.k8s.io/v1kind: HTTPRoutemetadata:name: httpnamespace: defaultspec:parentRefs:- name: higress-gatewaynamespace: higress-systemrules:- matches:- path:type: PathPrefixvalue: /backendRefs:- name: service-provider.DEFAULT-GROUP.public.nacosgroup: networking.higress.ioport: 8080weight: 90- name: foo-serviceport: 5678weight: 10
大型团队划分了 SRE 角色和业务研发角色,由 SRE 通过 Gateway 资源统一管理站点域名和证书,由业务研发通过 HTTPRoute 资源管理业务路由,实现职责划分,权限收敛
创建的路由和 Service 有不在一个命名空间的需求,可以借助 ReferenceGrant 资源实现
有大量证书需要集中式管理,不希望将证书 Secret 同步到 Ingress 所在命名空间,带来安全风险
Gateway API 的另一个好处是对于更多功能的标准化定义,我们建议遇到实际需要再转换到这个新的标准,而不必盲目跟随。
新工具:AII in one 的 hgctl
Aliware
无法支持非 K8s 场景下的安装/升级
Higress 有很多安装参数,进行升级等操作时不好维护,使用 reuse-values 有一些副作用,且容易误操作
无法管理 CRD 跟随版本更新,需要手动更新
Higress 借鉴了 istio 的 istioctl,提供了 hgctl 这个命令行工具解决了上述问题,通过以下命令即可安装 hgctl。
# 下载最新版 Hgctl:curl -Ls https://raw.githubusercontent.com/alibaba/higress/main/tools/hack/get-hgctl.sh | VERSION=latest bash
hgctl 集成了三种 Higress 安装模式,并统一了升级/运维操作:
本地 K8s 环境(例如 kind/k3s)模式 正式 K8s 环境模式 不依赖 K8s 的纯 Docker 环境模式
直接执行 hgctl install 命令即可选择任意模式进行安装
charts:higress:name: higress# 安装文件的 helm repo 地址url: https://higress.io/helm-charts# 执行 hgctl upgrade 时将自动更新至最新版本version: latestconsole:# 开启可观测组件o11YEnabled: true# 控制台实例数replicas: 1controller:# 控制面组件实例数replicas: 1gateway:# 数据面组件实例数replicas: 1global:# 开启 Gateway APIenableGatewayAPI: true# 开启 Istio APIenableIstioAPI: true# 设置监听的 ingress classingressClass: higress# 安装模式install: local-k8s# 安装命名空间namespace: higress-system# 配置传递给 helm 的 values 参数values: {}profile: local-k8s
修改上面文件的内容后,执行 hgctl upgarde 即可实现参数变更生效,如果只想修改参数,不想触发版本升级,可以将 version 参数固定为当前版本。
hgctl plugin init: 初始化 Golang WASM 插件项目,包括三个文件;
用户编写 WASM 插件逻辑;
hgctl plugin build --output-type files: 构建 WASM 插件,在本地输出构建产物;
hgctl plugin test: 使用 docker compose 在本地测试 WASM 插件,如需修改插件逻辑,则返回第 2 步;
hgctl plugin build --output-type image: 构建 WASM 插件作为 OCI 镜像上传至镜像仓库;
hgctl plugin install: 安装 WASM 插件,可以通过本地的 yaml 文件或插件项目进行安装。
另外,若需要查看已安装的插件,则使用 hgctl plugin ls;若需要操作插件配置,则使用 hgctl plugin config。
hgctl dashboard:用于呼出 UI 界面,例如 Higress 控制台,直接通过 hgctl dashboard console 即可打开
$ hgctl dashboardAccess to Higress web UIsUsage:hgctl dashboard [flags]hgctl dashboard [command]Aliases:dashboard, dash, dAvailable Commands:console Open Console web UIcontroller Open Controller debug web UIenvoy Open Envoy admin web UIgrafana Open Grafana web UIprometheus Open Prometheus web UI
hgctl gateway-config:用于查看数据面的 envoy 配置,可以快速验证配置是否正确下发
$ hgctl gateway-configRetrieve information about Higress Gateway Configuration.Usage:hgctl gateway-config [command]Aliases:gateway-config, gcAvailable Commands:all Retrieves all Envoy xDS resources from the specified Higress Gatewaybootstrap Retrieves bootstrap Envoy xDS resources from the specified Higress Gatewaycluster Retrieves cluster Envoy xDS resources from the specified Higress Gatewayendpoint Retrieves endpoint Envoy xDS resources from the specified Higress Gatewaylistener Retrieves listener Envoy xDS resources from the specified Higress Gatewayroute Retrieves route Envoy xDS resources from the specified Higress Gateway
新征程:API Gateway
Aliware
上面说了 Gateway API,接着我们聊聊 API Gateway 😄,API Gateway 有两层定义:
狭义上:满足统一接入,将路由转发到不同服务的运维需求,即可称为 API Gateway;这里 API 的定义是服务的路由 广义上:在实现服务转发的基础上,需要识别带业务语义的接口,将业务能力 API 化管理,统一对外提供服务;这里 API 的定义是业务功能接口
Higress 已经实现了狭义上的 API Gateway 能力,并且是基于 Gateway/Ingress API 这些通用路由标准来实现的。而与服务路由标准不同,业务功能接口的标准是 Swagger/OAS3/RPC IDL 等,做为 API Gateway 需要提供以下关键能力:
支持通过上传 Swagger 等接口定义文件的方式导入 API
对 API 实现精细化策略管理,例如根据出入参定义实现参数映射/转换
实现以 API 方式开放能力时的认证/鉴权,调用量控制/审计能力
Higress 新的开源征程将向具备业务 API 管理能力的 API Gateway 形态进发。在实现方式上,我们将基于 WASM 插件去扩展这一部分能力,这可以降低我们对上游 Envoy 社区的侵入性改造,同时让对 API 的精细化策略管理具备自定义扩展能力。目前社区已经有一些 Proposal ,欢迎了解:
https://github.com/alibaba/higress/issues/535
社区致谢
Aliware
首先要感谢 Envoy 和 Istio 社区,Higress 站在这两个软件的肩膀上演进能力,得以:
通过 WASM 机制扩展 Envoy 数据面能力,持续不断地扩大网关插件生态
通过专注在网关领域,在 Istio 优秀的控制面基础上,进一步做抽象和简化,降低上手和运维门槛
还要感谢参与 Higress 开源贡献的开发者们,这里重点感谢下为 1.3 版本做出核心贡献的开发者:







