配置 GatewayAPI Gateway
目录
概述前提条件Gateway 基础知识什么是 GatewayGateway 暴露(Service Type)LoadBalancer(推荐)NodePortClusterIPListener 配置允许 ListenerSet端口和协议AllowRouteNSTLS 配置EnvoyProxy(部署配置)推荐资源规格镜像仓库创建 Gateway通过 Web 控制台Listener 配置通过 YAML包含多种 Listener 类型的完整示例查看 Gateway 详情Listener 和 Route 参考主机名主机名交集规则支持的 Route 类型下一步商标声明概述
在 Envoy Gateway operator 和 EnvoyGatewayCtl 就绪后,配置一个 Gateway。
Gateway 定义流量如何进入 Gateway,而配套的 EnvoyProxy 控制底层 Envoy
data plane 的部署方式。
在推荐的工作流中,请在 Envoy Gateway Operator 之后、配置 GatewayAPI Route 之前配置 Gateway。
要公开由 Gateway 命名空间外部拥有的其他 listener,请参阅配置 Gateway API ListenerSet。
前提条件
继续操作前,请确保已完成以下操作:
- 阅读 Envoy Gateway Operator 以了解基本概念和资源关系
- 安装 Envoy Gateway operator 并创建一个
EnvoyGatewayCtl
创建 Gateway 前,请先了解 Gateway 的主要概念。如果您已经熟悉这些概念,可以跳转到创建 Gateway部分。
Gateway 基础知识
什么是 Gateway
Gateway 是进入集群的流量入口。它定义如何接收外部请求并将其路由到后端服务。Gateway 主要定义:
- Listener:定义 Gateway 监听的端口、协议和主机名
- GatewayClass:选择管理此
Gateway的 Gateway controller - Infrastructure reference:引用一个控制底层 Envoy data plane 部署方式的
EnvoyProxy
Gateway 暴露(Service Type)
Service Type 配置 Gateway 如何通过底层 Envoy Service 暴露。有三种模式: LoadBalancer、NodePort 和 ClusterIP。
在 YAML 中,此设置配置于配套的 EnvoyProxy 资源中的
.spec.provider.kubernetes.envoyService.type。
LoadBalancer(推荐)
其优势在于易于使用,并具备高可用负载均衡能力。 要使用 LoadBalancer,集群必须支持 LoadBalancer,可以通过 MetalLB 启用。
使用 MetalLB 时,可以通过 Service annotations 指定静态 VIP。在 Web Console 中,使用 Service Annotation 字段:
有关更多详细信息,请参阅使用 MetalLB 指定 VIP 的方法。
NodePort
其优势在于不需要任何外部依赖。
但是,使用 NodePort 存在以下缺点:
- 使用 NodePort 时,Kubernetes 分配的 NodePort 端口号与 Service 自身的端口不同。访问时必须使用 NodePort 端口号,而不是 Service 端口。
- 可以通过集群中任意节点的 IP 地址访问该 Service,这可能带来潜在的安全风险。
使用 NodePort 时如何获取正确的端口
在 Gateway 详情页面中,当 Service Type 为 NodePort 时,listener 列表会显示 NodePort 列,其中包含分配的端口号。您也可以使用以下命令:
输出结果即为 NodePort。
ClusterIP
如果不需要对外暴露,ClusterIP 非常方便。
Listener 配置
Listener 定义 Gateway 监听的端口和协议。对于 HTTP 或 HTTPS 协议,不同的主机名可以视为不同的 listener。
不能创建端口、协议或主机名冲突的 listener。
必须在 Gateway 中至少创建一个 listener。
允许 ListenerSet
Gateway 可以接受来自同一命名空间或其他命名空间中 ListenerSet 的额外 listener。配置 spec.allowedListeners.namespaces 以控制接受哪些 ListenerSet 命名空间:
对于 Selector,请在 .spec.allowedListeners.namespaces.selector 下配置标签选择器。有关更多信息,请参阅
配置 GatewayAPI ListenerSet。
端口和协议
每个 listener 都通过端口号和协议进行配置。支持的协议包括:HTTP、HTTPS、TCP、UDP 和 TLS。
AllowRouteNS
默认情况下,Route 只能附加到 Same 命名空间中的 Gateway。要允许跨命名空间路由,请使用 Allowed Routes Namespace 字段:
Same:允许同一命名空间中的 Route 附加到此 listener。All:允许任意命名空间中的 Route 附加到此 listener。Selector:允许与选择器匹配的命名空间中的 Route 附加到此 listener。
在 ACP 中,项目通过命名空间上的标签标识,例如 cpaas.io/project: <project-name>。如果希望 listener 仅供特定项目中的 Route 使用,请使用 Selector,并匹配目标命名空间上的项目标签。
Listener 的 Allowed Routes Namespace 设置及其协议共同决定了在 Route Web Console 中将 Route 发布到 listener时可用的 listener。
有关更多信息,请参阅附加到在其他命名空间中创建的 Gateway。
TLS 配置
对于 HTTPS 和 TLS 协议,需要配置 TLS 设置。
TLS 模式:
- HTTPS 协议仅支持 Terminate 模式
- TLS 协议同时支持 Terminate 和 Passthrough 模式
- Passthrough 模式的 TLS listener 支持 TLSRoute
- Terminate 模式的 TLS listener 支持 TCPRoute
证书要求:
- 默认情况下,只能使用在同一命名空间中创建的 Secret
- Secret 必须为
kubernetes.io/tls类型,并包含tls.crt和tls.key键 - 对于跨命名空间 Secret,请参阅使用在其他命名空间中创建的 Secret
EnvoyProxy(部署配置)
Envoy Gateway 使用 EnvoyProxy 资源控制 Gateway 部署配置。建议为每个 Gateway 创建专用的 EnvoyProxy 资源,并通过 Gateway 的 .spec.infrastructure.parametersRef 字段引用该资源。
当您在 Web Console 中使用由 EnvoyGatewayCtl 创建的 GatewayClass 创建 Gateway 时,控制台会自动创建一个名称和命名空间相同的配套 EnvoyProxy 资源。
通过应用 YAML 创建 Gateway 时,您需要负责确保 Gateway
.spec.infrastructure.parametersRef 以及所引用的 EnvoyProxy 资源保持一致。
这种一对一映射方式可以更好地隔离部署配置,并提供更细粒度的控制,例如:
- 副本数
- 资源限制和请求
- 节点选择器
- Service 类型和 annotations
- 镜像仓库
要限制某个命名空间中的 Envoy data plane 请求总量,请在该命名空间中创建一个
EnvoyProxyResourceQuota。配额会评估该配套的
EnvoyProxy 以及命名空间中的其他 EnvoyProxy 资源。
推荐资源规格
对于典型的 HTTP 和 HTTPS 南北向流量,单个 envoy-proxy
Pod 可使用以下值作为起始配置。这些建议适用于
.spec.provider.kubernetes.envoyDeployment.container.resources。
- 这些值是起始配置,并非硬性限制。请根据实际流量特征进行验证。
- TLS 终止、启用的策略、Route 复杂度、请求和响应大小以及长连接都可能增加资源使用量。
- 使用多个副本时,应根据每个副本实际处理的 QPS 进行扩展,而不只是依据 Gateway 的总 QPS。
镜像仓库
镜像仓库已预配置为集群的默认值。除非必要,否则不要修改。
有关其他部署配置方法,请参阅deployment-mode。
创建 Gateway
通过 Web 控制台
- 导航至
Alauda Container Platform -> Networking -> Gateway -> Gateways - 点击
Create Gateway按钮 - 在
Create Gateway页面中,选择由你的EnvoyGatewayCtl创建的GatewayClass。在 Envoy Gateway Operator 推荐的默认示例中,该对象为envoy-gateway-operator-cpaas-default。
页面会显示以下配置选项:
Web 控制台表单仅支持由 EnvoyGatewayCtl 创建的 GatewayClass。对于其他 GatewayClass,请使用 YAML 编辑器。
使用由 EnvoyGatewayCtl 创建的 GatewayClass 时,Web 控制台会自动创建一个与 Gateway 名称和命名空间匹配的配套 EnvoyProxy 资源。
Listener 配置
创建或编辑 Listener 时,可以配置以下内容:
HTTPS 协议配置
选择 HTTPS 作为协议时:
- HTTPS 协议仅支持 Terminate 模式
- HTTPS Listener 必须选择证书
- 默认情况下,只能使用在同一命名空间中创建的 secret
TLS 协议配置
选择 TLS 作为协议时:
配置字段
有关 TLS 模式的详细信息,请参阅 TLS 配置。
通过 YAML
如果不使用推荐的默认示例,请将 envoy-gateway-operator-cpaas-default 替换为你自己的 EnvoyGatewayCtl 创建的 GatewayClass。
以下最小示例会创建一个 HTTP Gateway 和一个专用的 EnvoyProxy。
包含多种 Listener 类型的完整示例
如果需要更多 Listener 类型,请使用以下完整示例:
- 用于部署配置的 EnvoyProxy 资源
- 如有需要,将
envoy-gateway-operator-cpaas-default替换为你自己的GatewayClass listeners定义流量如何进入 Gatewayhostname影响基于主机的路由与 Listener 的匹配方式protocol确定哪些路由类型可以附加到 ListenerallowedRoutes控制哪些命名空间可以附加路由tls为 HTTPS 和 TLS Listener 配置 TLS 终止或透传EnvoyProxy名称必须与.spec.infrastructure.parametersRef.name匹配envoyService.type控制 Gateway 暴露方式- 除非环境确有需要,否则请保持
imageRepository不变 resources配置 Envoy 数据平面的资源限制和请求- 将
provider.type保持为Kubernetes
查看 Gateway 详情
在 Gateway 详情页面中,Listener 列表显示以下信息:
当 Gateway Service Type 为 NodePort 时,Listener 列表会额外显示 NodePort 列。访问 Gateway 时,请使用 NodePort 值,而不是 Service 端口。更多详细信息,请参阅使用 NodePort 时如何获取正确的端口。
Listener 和 Route 参考
将 Route 资源附加到 Gateway 时,请遵循以下规则。
主机名
Listener 中的主机名是具有相同协议的 Listener 的唯一标识符。无法在 Gateway 中添加或更新冲突的 Listener。
主机名交集规则
请求到达时,系统会将其与 Listener 主机名和 Route 主机名的交集进行匹配。只有交集中的主机名才会用于路由流量。
通配符(*)执行后缀匹配。例如,*.example.com 可以匹配 foo.example.com 和 bar.example.com,
但无法匹配 example.com。
无交集意味着 Route 状态会变为异常,无法处理流量。
支持的 Route 类型
每个 Listener 根据其协议支持不同的 Route 类型:
配置 Route 时,请确保其协议与要附加到的 Listener 的协议匹配。例如,不能将
HTTPRoute 附加到 TCP Listener。
下一步
Gateway 就绪后,请继续阅读配置 GatewayAPI Route。如果附加 Route 后需要进行高级流量控制,请继续阅读配置 GatewayAPI Policy。
如需在命名空间级别限制 Envoy 数据平面资源,请参阅
配置 EnvoyProxy 资源配额。
商标声明
Envoy® 是 Linux Foundation 的注册商标。
MetalLB™ 是 Linux Foundation 的商标。
Alauda 是独立供应商。本产品与 Linux Foundation 无关,亦未获得其认可或赞助。所有商标均为其各自所有者的财产,在此仅用于识别目的。