- 从零学习envoy笔记 - Gateway总览
- 从零学习envoy笔记 - 学习EG API和Gateway API
- 从零学习envoy笔记 - 快速部署实验环境
- 从零学习envoy笔记 - 官方Task Backend Routing
- 从零学习envoy笔记 - 官方Task Backend Utilization Load Balancing
- 从零学习envoy笔记 - 官方Task Bandwidth Limit
- 从零学习envoy笔记 - 官方Task Client Traffic Policy
本文通过几个示例来完成对 Gateway API 和 EG API 的印象加深学习
使用Envoy Gateway 中主要会接触两类 API:
- Gateway API 在常规情况下接触的还是原生的比较高
- EG API (Envoy Gateway API):一些高级特性会使用到
Gateway API 是 Kubernetes SIG Network 定义的标准网关 API,例如 GatewayClass、Gateway、HTTPRoute 等。
Envoy Gateway API 是 Envoy Gateway 自己扩展出来的一组 CRD,用来补充 Gateway API 没有覆盖到的 Envoy 能力,例如外部后端、流量策略、安全策略、Envoy 参数等。
简单理解:
- Gateway API:定义入口、监听器、路由、后端引用
- EG API:补充 Envoy Gateway 的高级能力,比如 Backend、Policy、EnvoyProxy
Backend(EG API)
Backend API 是 Envoy Gateway 提供的扩展 API,用于定义非 Kubernetes Service 类型的后端。
一般情况下,HTTPRoute 的后端通常是 Kubernetes Service,不需要单独创建 Backend。
但是如果后端不是集群内的 Service,而是外部域名、外部 IP,或者 Unix Domain Socket,就可以使用 Envoy Gateway 的 Backend 资源来描述这些后端。
Backend API 支持的 backend endpoint 类型包括 [2]
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
apiVersion | string | gateway.envoyproxy.io/v1alpha1 | ||
kind | string | Backend | ||
metadata | ObjectMeta | true | Refer to Kubernetes API documentation for fields of metadata. | |
spec | BackendSpec | true | Spec defines the desired state of Backend. | |
status | BackendStatus | true | Status defines the current status of Backend. |
Backend 示例
这是将一个外部域名通过 envoy backend 来引入到集群
| |
上面定义的这个
Backend不能直接访问,这相当于定义 “外部 endpoints 后端”,如果需要访问还需要 HTTPRoute
HTTPRoute(Gateway API)
HTTPRoute 是 Gateway API 中用于描述 HTTP 流量路由规则的资源。
它负责定义:
- 请求从哪个 Gateway 进入
- 根据什么规则匹配请求
- 请求转发到哪个后端
- 是否需要路径改写、Header 修改、流量拆分等
他的请求流量图可以参考官网架构图
一个简单的 HTTPRoute 示例
下面这个示例表示:把经过 eg 这个 Gateway 的 HTTP 请求转发到 nginx Service 的 80 端口。
| |
这里的
nginx默认是 Kubernetes Service,而不是 Envoy Gateway 的 Backend。
- backendRefs Kind默认是 Service, 也可以是其他的,例如ExternalName, Backend等
结合 Backend 部分完成实验
定义一个用于访问的 HTTPRoute 资源
| |
测试结果
| |
BackendTrafficPolicy (EG API)
BackendTrafficPolicy 是 Envoy Gateway 提供的扩展 API,用于配置 Envoy Proxy 和后端服务之间的流量行为。也就是从网关到后端服务这一段的策略。常见用途包括:
- 熔断
- 限速
- 健康检查
- 重试
- 后端超时
- 负载均衡策略
官方示例:断路器和限速
| |
例如 Gateway, 表示这个 Gateway 下端默认浏览都走这个策略
| |
例如 HTTPRouter, 表示只对这个 HTTPRoute 转发到 backend 的流量生效。
| |
上面说了 “targetRefs”,BackendTrafficPolicy 还可以可以通过 Lable 选择一批资源 (targetSelectors)
例如:HTTPRoute 上打 app: payment-service 标签,然后 BackendTrafficPolicy 用 targetSelectors 批量选中这些 HTTPRoute
| |
ClientTrafficPolicy (EG API)
ClientTrafficPolicy 是 Envoy Gateway 提供的扩展 API,用于配置客户端到 Envoy 之间的连接行为。也就是客户端进入网关这一段的策略。常见用途包括:
- 客户端连接策略
- TLS 配置
- HTTP/3
- 超时
- 连接行为
- 下游连接的行为.
官方示例
| |
SecurityPolicy (EG API)
SecurityPolicy 是 Envoy Gateway 提供的扩展 API,用于配置流量进入 Gateway 前后的认证和授权能力。常见用途包括:
- CORS
- JWT
- OIDC
- API Key
- Basic Auth
- External Authorization
它主要解决的是:
这个请求能不能进来? 这个请求有没有权限? 这个请求是否满足安全要求?
官方示例
| |
SecurityPolicy 一般作用在 Gateway 或 Route 上,用来决定请求是否允许继续向后转发。
比如:
| |
如果 SecurityPolicy 校验不通过,请求就不会继续进入后端服务。
这里需要注意的是:BackendTrafficPolicy 、ClientTrafficPolicy 、SecurityPolicy ,均是按照这些内容进行排序
- Creation Time Priority:创建时间更早的 Policy 优先级更高
- Name-based Sorting:如果创建时间相同,会按照名称排序决定优先级
ClientTrafficPolicy & BackendTrafficPolicy & SecurityPolicy 的位置理解
可以用下面这个图理解三种 Policy 的位置:
- ClientTrafficPolicy 控制客户端到 Envoy Gateway Listener 之间的连接行为。
- SecurityPolicy 控制请求进入 Gateway 或 Route 时的认证、鉴权、安全检查。
- BackendTrafficPolicy 控制 Envoy Gateway 到后端 Service 之间的流量行为。
| |
