Higress 社区周会记要(2022/11/26)
发布时间 2022-11-29
Higress 是遵循开源 Ingress/Gateway API 标准,提供流量调度、服务治理、安全防护三合一的高集成、易使用、易扩展、热更新的下一代云原生网关。
本次(2022/11/26)是 Higress 社区第一次周会,参会成员 50+,会议过程进行了录屏,已经发布在 Higress 开发者钉钉群,可以搜索钉群号(30565000871)入群。下面是会议过程的记录:
一、分享 Higress 基于 Istio/Envoy 架构的技术实现原理
Listener 和 Cluster 是实现网关请求转发能力的最小化模型,Envoy 可以基于 xDS 协议从 gRPC server 获取 LIstener 和 Cluster 的配置,实现这两部分配置独立更新互不影响,如 Cluster 重建不影响 Listener 上客户端连接断开。
Listener 中的证书、路由、过滤器都可以实现基于 xDS 协议独立更新,Cluster 基于 EDS 类型实现后端节点独立更新。这是 Envoy 和 Nginx 最明显的区别:
- Nginx: 基于 nginx.conf,整个配置跟 worker 进程的生命周期绑定,任何配置变更 reload,进程都要重建,跟 downstream 和 upstream 的连接都会断开
- **Envoy:**举例来说,Listener 的生命周期只跟 Listener 的配置绑定,路由的生命周期只跟路由的配置绑定,并且都可以基于 xDS 协议独立地热更新
Istio 抽象了 API 用于生成各类 xDS 配置,下图虚线箭头是 Istio API 和 xDS 配置间较直接的映射关系。Istio API 的配置来源可以是 K8s CRD,也可以是基于 xDS 协议(MCP-over-xDS)的 gRPC Server。
Higress 实现了将 K8s Ingress 转换为 Istio API 的逻辑,并通过上述 gRPC Server 向 Istio 提供配置。
以通过 Ingress 配置跨域访问为例:
将被转换为:
从这个例子可以看到,Ingress 最大的优势就是简单,只用一个注解就实现了跨域这个路由策略。
Higress 也支持 Ingress 和 Istio API 进行混用,对于 Ingress 无法满足的需求场景,也可以选择使用 Istio API (K8s CRD)来实现。Higress 会按照以 Istio API 创建的配置优先为原则,在生成最终的路由配置时进行合并。
二、开源社区最新进展同步
感谢张海彬(@NameHaibinZhang)提供了一个名为 McpBridge 的 API 实现,可以用于对接 Nacos/ZK 等注册中心实现服务发现。并且是直接基于 Nacos/ZK 的 go client 获取服务 ip,无需 Nacos/ZK 等支持 Istio MCP 协议。这也是 McpBridge 这个名字的由来。
配置方式为创建 McpBridge 资源,指定注册中心的地址和类型:
然后在 Ingress 中通过 backend.resource 引用这个 McpBridge 资源,并通过 higress.io/destination 注解指定目标服务地址,下面这个 Nacos 类型的服务,其服务地址格式为:服务名.服务分组.命名空间.nacos
(备注:这个配置方式目前暂未完全定稿,欢迎小伙伴参与讨论,完整的使用文档将在这部分代码正式 release 之后提供)
三、支持非 K8s 部署的架构探讨
最后探讨了社区小伙伴最为关心的,如何支持非 K8s 场景使用的问题。实现的方式如下图所示,Higress 会借鉴 Istio 对于配置来源的抽象方式,支持从 Nacos/Etcd 等配置中心获取 Ingress/Gateway 等 API。这部分实现将作为 Higress 社区后续的重点工作进行推进。欢迎有兴趣的小伙伴一起参与共建。
**Higress 开源贡献小组正在火热招募贡献者。**如果您有时间,有热情,有意愿,欢迎联系社区加入开源贡献小组,一起共同完善 Higress,一起主导下一代云原生网关的设计和实现。
社区官网(点击“阅读原文”跳转): https://higress.io
社区开发者群(钉钉群):30565000871
微信交流群: