跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
Shell / Bash

Kubernetes Gateway API 实战指南:从原理到部署

综述由AI生成Gateway API 是 Kubernetes 官方推出的新一代服务网络标准,相比 Ingress 提供更强大的路由能力、多团队支持和类型安全定义。详细阐述了 Gateway API 的核心概念,对比了其与 Ingress 的差异,并演示了基于 Envoy Gateway 和 MetalLB 的完整安装流程。内容涵盖 GatewayClass、Gateway、HTTPRoute 的配置方法,HTTPS 证书集成,以及跨命名空间路由中的 ReferenceGrant 授权机制,帮助开发者快速掌握现代 Kubernetes 网络管理实践。

Stephaine Walsh发布于 2026/3/17更新于 2026/4/263 浏览
Kubernetes Gateway API 实战指南:从原理到部署

Kubernetes Gateway API 实战指南:从原理到部署

随着 Kubernetes 集群规模扩大,传统 Ingress API 在复杂路由和多团队协作上逐渐显露局限。Gateway API 作为官方新一代服务网络标准,提供了更灵活的路由能力、类型安全的定义以及标准化的扩展机制。本文将深入其核心概念,对比其与 Ingress 的差异,并通过实际配置演示如何快速上手。

一、什么是 Gateway API?

1.1 概述

Gateway API 旨在替代和扩展传统的 Ingress API。它通过分层设计实现了更精细的流量管理,支持多团队协作,并具备更强的扩展性。

  • 官网:https://gateway-api.sigs.k8s.io/
  • MetalLB:https://metallb.io

1.2 核心特性

  • 层次化设计:利用 GatewayClass、Gateway、Route 等资源实现分层管理。
  • 丰富的路由能力:支持基于路径、方法、头部、查询参数的精细化路由。
  • 多团队支持:内置所有权模型和 RBAC 集成。
  • 类型安全:强类型的 API 定义,减少配置错误。
  • 协议支持:不仅限于 HTTP/HTTPS,还支持 TCP、UDP 等。

二、Gateway API 与 Ingress 的对比

特性IngressGateway API
API 版本v1v1 (稳定版)
路由能力基础路径和主机路由支持路径、方法、头部、查询参数等
多团队支持有限,需额外配置内置 RBAC 和所有权模型
扩展性依赖注解,非标准标准扩展机制
流量类型主要 HTTP/HTTPSHTTP/HTTPS, TCP, UDP 等
策略管理分散集中定义和复用

注意:Envoy Gateway 依赖于 Envoy Proxy 和 Gateway API,不同版本的兼容性需仔细核对官方文档。

三、安装 Gateway API

3.1 前提条件

  • Kubernetes 集群(推荐 1.24+)
  • kubectl 命令行工具
  • 支持 Gateway API 的控制器(如 Contour、Istio、NGINX 或 Envoy Gateway)
  • 负载均衡环境(裸机测试建议安装 MetalLB)

3.2 控制器选择

不同的控制器实现方式略有差异:

  • Cilium Gateway:支持主机网络模式,可直接暴露端口,无需 LoadBalancer。
  • Istio:自动创建 Envoy Deployment 和 Service。
  • Contour:基于 Envoy,适合本地环境。
  • 本教程以 Envoy Gateway 为例,Gateway API 允许同时安装多个控制器。

    3.3 安装 CRDs

    执行以下命令安装最新稳定版 Gateway API CRDs:

    kubectl apply --server-side -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.4.1/standard-install.yaml
    

    验证安装是否成功:

    kubectl get crd | grep networking.k8s.io
    # 或具体验证关键 CRD
    kubectl get crd gateways.gateway.networking.k8s.io httproutes.gateway.networking.k8s.io gatewayclasses.gateway.networking.k8s.io
    

    3.4 安装 Envoy Gateway 控制器

    使用 Helm 安装:

    helm install eg oci://docker.io/envoyproxy/gateway-helm --version v1.7.0 -n envoy-gateway-system --create-namespace
    kubectl wait --timeout=5m -n envoy-gateway-system deployment/envoy-gateway --for=condition=Available
    

    3.5 安装 MetalLB(用于裸机测试)

    若测试环境无 LB 地址,需安装 MetalLB 模拟负载均衡。

    修改 kube-proxy 配置

    启用 strictARP 以防止 ARP 冲突:

    apiVersion: kubeproxy.config.k8s.io/v1alpha1
    kind: KubeProxyConfiguration
    mode: "ipvs"
    ipvs:
      strictARP: true
    

    应用后重启服务:

    systemctl restart kube-proxy.service
    # 或对于 kubeadm
    kubectl patch daemonset kube-proxy -n kube-system -p='{"spec":{"template":{"metadata":{"annotations":{"date":"$(date +'%s')"}}}}}'
    
    部署 MetalLB
    kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.15.3/config/manifests/metallb-native.yaml
    
    配置 IP 池

    创建 metallb-config.yaml 并应用:

    apiVersion: metallb.io/v1beta1
    kind: IPAddressPool
    metadata:
      name: public-ip-pool
      namespace: metallb-system
    spec:
      addresses:
      - 192.168.1.100/32
    ---
    apiVersion: metallb.io/v1beta1
    kind: L2Advertisement
    metadata:
      name: public-ip-advertisement
      namespace: metallb-system
    spec:
      ipAddressPools:
      - public-ip-pool
    

    四、使用 Gateway API

    4.1 基本概念

    • GatewayClass:定义网关类型模板(类似 StorageClass)。
    • Gateway:实际的网关实例,管理流量入口。
    • HTTPRoute:定义 HTTP/HTTPS 流量的路由规则。
    • TCPRoute/UDPRoute:定义 TCP/UDP 流量的路由规则。

    4.2 示例:创建基本的 HTTP 路由

    1. 创建 GatewayClass

    这是集群级资源,指定使用的控制器。

    apiVersion: gateway.networking.k8s.io/v1
    kind: GatewayClass
    metadata:
      name: eg
    spec:
      controllerName: gateway.envoyproxy.io/gatewayclass-controller
    
    2. 创建 Gateway

    命名空间级资源,定义监听器。

    apiVersion: gateway.networking.k8s.io/v1
    kind: Gateway
    metadata:
      name: eg
      namespace: demo01
    spec:
      gatewayClassName: eg
      addresses:
      - type: IPAddress
        value: 192.168.1.100
      listeners:
      - name: http
        protocol: HTTP
        port: 80
        allowedRoutes:
          namespaces:
            from: All
    
    3. 创建后端应用

    准备一个简单的 Service 和 Deployment。

    apiVersion: v1
    kind: Service
    metadata:
      name: backend
      namespace: demo01
    spec:
      ports:
      - name: http
        port: 3000
        targetPort: 3000
      selector:
        app: backend
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: backend
      namespace: demo01
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: backend
      template:
        metadata:
          labels:
            app: backend
        spec:
          containers:
          - image: gcr.io/k8s-staging-gateway-api/echo-basic:v20231214-v1.0.0-140-gf544a46e
            name: backend
            ports:
            - containerPort: 3000
    
    4. 创建 HTTPRoute

    将请求路由到后端服务。

    apiVersion: gateway.networking.k8s.io/v1
    kind: HTTPRoute
    metadata:
      name: backend
      namespace: demo01
    spec:
      parentRefs:
      - name: eg
        namespace: demo01
      hostnames:
      - "gateway.demo.cn"
      rules:
      - backendRefs:
        - name: backend
          port: 3000
        matches:
        - path:
            type: PathPrefix
            value: /
    

    配置完成后,将域名解析指向 Gateway 的 IP 即可访问。

    4.3 配置 HTTPS 访问

    启用 HTTPS 需要证书 Secret 和 TLS 配置。

    1. 创建 Secret
    kubectl create secret tls example-cert \
      --cert=example.com.crt \
      --key=example.com.key \
      -n envoy-gateway-system
    
    2. 配置 Gateway Listener
    apiVersion: gateway.networking.k8s.io/v1
    kind: Gateway
    metadata:
      name: my-gateway
      namespace: envoy-gateway-system
    spec:
      gatewayClassName: envoy-gateway
      listeners:
      - name: https
        protocol: HTTPS
        port: 443
        tls:
          mode: Terminate
          certificateRefs:
          - kind: Secret
            name: example-cert
        allowedRoutes:
          namespaces:
            from: All
    

    五、跨命名空间配置

    生产环境中,通常由基础设施团队维护共享 Gateway,业务方通过 HTTPRoute 引用。

    5.1 允许跨 Namespace 绑定

    在 Gateway 中设置 allowedRoutes.namespaces.from: All。

    5.2 ReferenceGrant 授权

    如果 HTTPRoute 需要引用其他命名空间的 Service 或 Secret,必须在该目标命名空间创建 ReferenceGrant。

    例如,demo01 的 Route 引用 demo02 的 Service:

    apiVersion: gateway.networking.k8s.io/v1beta1
    kind: ReferenceGrant
    metadata:
      name: allow-frontend-to-backend
      namespace: demo02
    spec:
      from:
      - group: gateway.networking.k8s.io
        kind: HTTPRoute
        namespace: demo01
      to:
      - group: ""
        kind: Service
    

    关键点:

    • 同 Namespace 引用默认允许,无需 Grant。
    • 跨 Namespace 引用 Service/Secret 必须显式授权。
    • Route 附加到不同 Namespace 的 Gateway 需 Gateway 端 allowedRoutes 允许。

    六、总结

    Gateway API 通过层次化设计和标准化扩展,解决了 Ingress 在多团队协作和复杂路由上的不足。掌握其核心组件(GatewayClass, Gateway, HTTPRoute)及跨命名空间的安全机制(ReferenceGrant),是构建现代化 Kubernetes 网络的关键。本文涵盖了从安装、配置到 HTTPS 及跨域调用的完整流程,可作为日常运维的参考手册。

    目录

    1. Kubernetes Gateway API 实战指南:从原理到部署
    2. 一、什么是 Gateway API?
    3. 1.1 概述
    4. 1.2 核心特性
    5. 二、Gateway API 与 Ingress 的对比
    6. 三、安装 Gateway API
    7. 3.1 前提条件
    8. 3.2 控制器选择
    9. 3.3 安装 CRDs
    10. 或具体验证关键 CRD
    11. 3.4 安装 Envoy Gateway 控制器
    12. 3.5 安装 MetalLB(用于裸机测试)
    13. 修改 kube-proxy 配置
    14. 或对于 kubeadm
    15. 部署 MetalLB
    16. 配置 IP 池
    17. 四、使用 Gateway API
    18. 4.1 基本概念
    19. 4.2 示例:创建基本的 HTTP 路由
    20. 1. 创建 GatewayClass
    21. 2. 创建 Gateway
    22. 3. 创建后端应用
    23. 4. 创建 HTTPRoute
    24. 4.3 配置 HTTPS 访问
    25. 1. 创建 Secret
    26. 2. 配置 Gateway Listener
    27. 五、跨命名空间配置
    28. 5.1 允许跨 Namespace 绑定
    29. 5.2 ReferenceGrant 授权
    30. 六、总结
    • 💰 8折买阿里云服务器限时8折了解详情
    • 💰 8折买阿里云服务器限时8折购买
    • 🦞 5分钟部署阿里云小龙虾了解详情
    • 🤖 一键搭建Deepseek满血版了解详情
    • 一键打造专属AI 智能体了解详情
    极客日志微信公众号二维码

    微信扫一扫,关注极客日志

    微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

    更多推荐文章

    查看全部
    • GitHub AI Agent 开源生态概览
    • FPGA 实现 IIC 通信原理与 Verilog 代码详解
    • 职场人 AI 必修课:9 个应用方法助力效率提升
    • AI 网络技术演进与路由协议重塑分析(下)
    • MATLAB Copilot_AI 工具箱:对接多款 AI 大模型辅助编程
    • 鸿蒙电商购物车实战:用户管理、商品列表与购物车实现
    • 通义万相 2.1 核心能力解析与 AIGC 应用实践
    • 基于 Coze 抓取小红书视频并同步至飞书多维表实战
    • 大模型入门学习教程:从基础到工程化实践
    • 工程项目管理系统技术架构与核心功能梳理
    • Web 自动化测试入门:从概念到百度搜索实战
    • C++ 运算符重载详解:自定义类型的运算扩展
    • 计算机专业网站开发:PHP/Java/Python/Go 技术选型指南
    • DDD 领域驱动设计:失血、贫血、充血与胀血模型详解及代码示例
    • Neuroxide 与 Copper-rs:Rust 重构 AI 与机器人开发栈
    • VS Code 中 GitHub Copilot 安装配置与高阶使用指南
    • OpenClaw 2026.3.7 版本发布:支持 GPT-5.4 与记忆热插拔
    • Vheer:免费免登录的 AI 绘画与视频生成工具
    • FastAPI:Python 高性能 Web 框架核心解析
    • Windows 下 Git 安装与 SSH 免密配置详解

    相关免费在线工具

    • Base64 字符串编码/解码

      将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

    • Base64 文件转换器

      将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

    • Markdown转HTML

      将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

    • HTML转Markdown

      将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

    • JSON 压缩

      通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

    • JSON美化和格式化

      将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online