在 Gateway API 中应用配置变更时,主要有三种方式:
Gateway。Gateway Api 和 Envoy Gateway 提供的 PolicyAttachment 进行修改。envoy-gateway instance 的全局配置层面进行修改。Envoy Gateway 提供了丰富的自定义策略机制,可以通过 Gateway API 的 PolicyAttachment 模型附加到网关资源上。
Envoy Gateway 的策略分为多种类型,包括安全策略、流量管理策略等。这些策略可以应用于不同层级的资源,如 Gateway、HTTPRoute 或 Service。
Gateway API 的 PolicyAttachment 机制允许用户以声明式方式将策略附加到网关资源上。该机制通过 targetRefs 字段实现,指定策略应用的目标资源。例如,可以将策略附加到特定的 Gateway、HTTPRoute 或 Service。
Envoy Gateway 支持的策略类型包括:
| 策略类型 | 描述 |
|---|---|
| ClientTrafficPolicy | 与客户端到代理通信路径相关的配置,包括超时、重试、保持连接设置等参数。 |
| BackendTrafficPolicy | 与代理到后端通信路径相关的配置,包括超时、重试、保持连接设置等参数。 |
| SecurityPolicy | 与安全机制和控制相关的配置,如认证和授权。 |
通过 PolicyAttachment 机制,用户可以灵活地添加、修改或删除策略,而无需修改核心资源定义,实现关注点分离和更好的资源管理。
与 envoy-gateway instance 本身相关的配置,或与所有网关相关的全局级别配置,属于该 envoy-gateway instance,例如部署模式或后端路由。
我们建议使用 EnvoyGatewayCtl 来管理这些全局配置。
| 功能 | CR | 描述 |
|---|---|---|
| 认证 | envoygateway:SecurityPolicy | 授权 |
| CORS | gatewayapi:HTTPRoute | 跨域资源共享 |
| 头部修改 | gatewayapi:HTTPRoute | HTTP 头部修改 |
| HTTP 重定向 | gatewayapi:HTTPRoute | HTTP 重定向 |
| L7 超时 | gatewayapi:HTTPRoute | 请求超时 |
| 会话亲和性 | gatewayapi:HTTPRoute | 会话亲和性/粘性会话 |
| L7 保持连接 | envoygateway:ClientTrafficPolicy | L7 保持连接超时设置 |
| L4 保持连接 | envoygateway:ClientTrafficPolicy | L4 TCP 保持连接设置 |
| URL 重写 | gatewayapi:HTTPRoute | URL 重写 |
| 重试 | gatewayapi:HTTPRoute 或 envoygateway:BackendTrafficPolicy | 通过 HTTPRoute 配置请求重试 通过 EnvoyGateway 配置请求重试 |
| GZip 压缩 | envoygateway:BackendTrafficPolicy | HTTP 压缩 |
请按照 OpenTelemetry 集成 中的说明操作,但使用 EnvoyGatewayCtl 修改 envoy-gateway-config。
在 Gateway 的 listener 配置中,需要指定允许哪些命名空间附加 Routes。
详情请参考 跨命名空间路由。
要使用其他命名空间创建的证书,需要在证书所在命名空间创建一个 ReferenceGrant。请参照 跨命名空间证书引用 和 referencegrant 的说明操作。
不能指定单个 secret 资源,必须允许整个命名空间
请参考以下文档说明:
请参考 自定义网关 TLS 参数 的说明
ClientTrafficPolicy 中的 .spec.tls 是 clienttlssettings
使用 NodePort 服务时,kubernetes 会为每个服务端口分配一个 NodePort 端口号。通过节点 IP 访问服务时,应使用对应的 NodePort 端口号,而非服务端口。
有两种方式处理:
手动获取 NodePort 分配,详见 从 svc 端口获取 nodeport
在 EnvoyProxy 配置中手动指定 NodePort,而非让 Kubernetes 自动分配。
NodePort 只能在特定范围内,通常为 30000-32767。如果希望 Gateway listener 端口和 NodePort 一致,则 listener 端口也必须在 NodePort 范围内。
更新 Subscription 资源
更新 EnvoyGatewayCtl 资源
更新 EnvoyProxy 资源
请参考 EnvoyGateway 任务