Gateway API:Ingress 的下一代替代方案
文章目录
- 前言
- 两者之间相比
- 部署
- 环境
- 操作步骤
- 部署
- 安装 Gateway API CRD + Envoy Gateway
- 安装metallb
- 配 MetalLB 的 IP 池
- 安装GatewayClass + Gateway
- 示例
- 创建httproute
- 添加dns解析
- 结果展示
前言
因为ingress在今年3 月就已经停止维护,后面不再发布新版本、修复漏洞或更新安全补丁。所以来写一下k8s官方推荐的ingress的下一代替代方案Gateway api
两者之间相比
| 对比项 | Ingress | Gateway API |
|---|---|---|
| 定位 | 早期入口标准,已停止功能演进 | 官方钦定的下一代标准 |
| 路由能力 | 仅 host + path | 原生支持 header/query 匹配、流量权重、重定向、重写 |
| 高级功能 | 依赖厂商 annotation,不可移植 | 标准字段实现,跨实现通用 |
| 协议支持 | 仅 HTTP/HTTPS | HTTP、gRPC、TCP、TLS 多协议 |
| 权限模型 | 单一资源,运维/开发职责混杂 | GatewayClass / Gateway / HTTPRoute 分层,角色分离,RBAC 更精细 |
| 灰度发布 | 需 annotation 或多个 Ingress 拼凑 | 原生支持按权重分流 |
| 跨 namespace | 本身不支持 | 原生支持跨 namespace 路由 |
| 生态趋势 | Ingress NGINX 2026 年 3 月退役 | 官方推荐迁移方向,服务网格也在统一 |
部署
环境
| Ip | 主机名 | cpu | 内存 |
|---|---|---|---|
| 192.168.10.12 | master01 | 4c | 6G |
| 192.168.10.13 | node1 | 4c | 6G |
| 192.168.10.14 | node2 | 4c | 6G |
| 192.168.10.100 | nfs | 2c | 2g |
| 组件 | 版本 |
|---|---|
| Ubuntu | Ubuntu 26.04 server |
| containerd | v2 2.2.2 |
| Kubernetes | v1.36.1 |
| victoria-metrics-k8s-stack | v1.146.0 |
操作步骤
部署
安装 Gateway API CRD + Envoy Gateway
kubectl apply--server-side-f https://github.com/envoyproxy/gateway/releases/download/v1.8.2/install.yaml# 等待几分钟kubectl get crd|grep gateway.networking安装metallb
kubectl apply-f https://raw.githubusercontent.com/metallb/metallb/v0.16.1/config/manifests/metallb-native.yaml配 MetalLB 的 IP 池
cat<<EOF|kubectl apply-f-apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: default-pool namespace: metallb-system spec: addresses:-192.168.10.200-192.168.10.250---apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: default namespace: metallb-system EOF安装GatewayClass + Gateway
cat<<EOF|kubectl apply-f-apiVersion: gateway.networking.k8s.io/v1 kind: GatewayClass metadata: name: envoy spec: controllerName: gateway.envoyproxy.io/gatewayclass-controller---apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: main-gw namespace: monitoring spec: gatewayClassName: envoy listeners:-name: http protocol: HTTP port: 80 allowedRoutes: namespaces:from: All# 所有命名空间能挂路由EOF kubectl get gateway-n monitoringPROGRAMMED如果为false是因为pod还没有running
示例
以本地部署的victoria-metrics-k8s-stack举例
链接: victoria-metrics-k8s-stack部署
victoria-metrics-k8s-stack里需要暴露的是 5 个:grafana(看板)、vmselect(vmui 查询)、vmalert(规则状态)、vmalertmanager(告警管理)、vmagent(抓取目标状态)。其他都是纯接口,不用暴露。
创建httproute
cat<<EOF|kubectl apply-f-apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: grafana# httproute名称namespace: monitoring# httproute命名空间spec: parentRefs:-name: main-gw# gateway名称hostnames:["grafana.monitoring.sit.internal"]# 域名rules:-backendRefs:-name: vmks-grafana#svc名称port: 80#svc端口---apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: vmui namespace: monitoring spec: parentRefs:-name: main-gw hostnames:["vmui.monitoring.sit.internal"]rules:-backendRefs:-name: vmselect-vmks-victoria-metrics-k8s-stack port: 8481---apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: vmalert namespace: monitoring spec: parentRefs:-name: main-gw hostnames:["vmalert.monitoring.sit.internal"]rules:-backendRefs:-name: vmalert-vmks-victoria-metrics-k8s-stack port: 8080---apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: alertmanager namespace: monitoring spec: parentRefs:-name: main-gw hostnames:["alertmanager.monitoring.sit.internal"]rules:-backendRefs:-name: vmalertmanager-vmks-victoria-metrics-k8s-stack port: 9093---apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: vmagent namespace: monitoring spec: parentRefs:-name: main-gw hostnames:["vmagent.monitoring.sit.internal"]rules:-backendRefs:-name: vmagent-vmks-victoria-metrics-k8s-stack port: 8429 EOF可以通过获取httproute来管理域名
kubectl get httproute-A添加dns解析
win11 host路径
C:\Windows\System32\drivers\etc\hosts在最后添加
192.168.10.200 grafana.monitoring.sit.internal vmui.monitoring.sit.internal vmalert.monitoring.sit.internal alertmanager.monitoring.sit.internal vmagent.monitoring.sit.internal注:通过本地dns解析时需要把代理关闭,不然会访问不到
结果展示
grafana.monitoring.sit.internal
注;vmui有后缀
vmui.monitoring.sit.internal/select/0/vmui/
vmalert.monitoring.sit.internal
alertmanager.monitoring.sit.internal
vmagent.monitoring.sit.internal
