Kubernetes指南
Linux性能优化实战eBPF 核心技术与实战SDN指南个人博客
中文
中文
  • 序言
  • 基础入门
    • Kubernetes 简介
    • Kubernetes 基本概念
    • Kubernetes 101
    • Kubernetes 201
    • Kubernetes 集群
  • 核心原理
    • 核心原理
    • 架构原理
    • 设计理念
    • 核心组件
      • etcd
      • kube-apiserver
      • kube-scheduler
      • kube-controller-manager
      • kubelet
      • kube-proxy
      • kube-dns
      • Federation
      • kubeadm
      • hyperkube
      • kubectl
    • 资源对象
      • Autoscaling
      • ConfigMap
      • CronJob
      • CustomResourceDefinition
      • DaemonSet
      • Deployment
      • Gateway API
      • Ingress
      • Job
      • LocalVolume
      • Namespace
      • NetworkPolicy
      • Node
      • PersistentVolume
      • Pod
      • PodPreset
      • ReplicaSet
      • Resource Quota
      • Secret
      • SecurityContext
      • Service
      • ServiceAccount
      • StatefulSet
      • Volume
  • 部署配置
    • 部署指南
    • kubectl 安装
    • 单机部署
    • 特性开关
    • 最佳配置
    • 版本支持
    • 集群部署
      • kubeadm
      • kops
      • Kubespray
      • Azure
      • Windows
      • LinuxKit
      • kubeasz
    • 附加组件
      • Addon-manager
      • DNS
      • Dashboard
      • 监控
      • 日志
      • Metrics
      • GPU
      • Cluster Autoscaler
      • ip-masq-agent
    • Kubernetes-The-Hard-Way
      • 准备部署环境
      • 安装必要工具
      • 创建计算资源
      • 配置创建证书
      • 配置生成配置
      • 配置生成密钥
      • 部署 Etcd 群集
      • 部署控制节点
      • 部署计算节点
      • 配置 Kubectl
      • 配置网络路由
      • 部署 DNS 扩展
      • 烟雾测试
      • 删除集群
  • 插件扩展
    • API 扩展
      • Aggregation
      • CustomResourceDefinition
    • 访问控制
      • 认证
      • RBAC 授权
      • 准入控制
    • Scheduler 扩展
    • 网络插件
      • CNI
      • Flannel
      • Calico
      • Weave
      • Cilium
      • OVN
      • Contiv
      • SR-IOV
      • Romana
      • OpenContrail
      • Kuryr
    • 运行时插件 CRI
      • CRI-tools
      • Frakti
    • 存储插件
      • 容器存储接口 CSI
      • FlexVolume
      • glusterfs
    • 网络策略
    • Ingress Controller
      • Ingress + Letsencrypt
      • minikube Ingress
      • Traefik Ingress
      • Keepalived-VIP
    • Cloud Provider 扩展
    • Device 插件
  • 服务治理
    • 服务治理
      • 一般准则
      • 滚动升级
      • Helm
      • Operator
      • Service Mesh
      • Linkerd
      • Linkerd2
    • Istio
      • 安装
      • 流量管理
      • 安全管理
      • 策略管理
      • 度量管理
      • 排错
      • 社区
    • Devops
      • Draft
      • Jenkins X
      • Spinnaker
      • Kompose
      • Skaffold
      • Argo
      • Flux GitOps
  • 实践案例
    • 实践概览
    • 资源控制
    • 集群高可用
    • 应用高可用
    • 调试
    • 端口映射
    • 端口转发
    • 用户管理
    • GPU
    • HugePage
    • 安全
    • 审计
    • 备份恢复
    • 证书轮换
    • 大规模集群
    • 大数据与机器学习
      • Spark
      • Tensorflow
    • Serverless
  • 排错指南
    • 排错概览
    • 集群排错
    • Pod 排错
    • 网络排错
    • PV 排错
      • AzureDisk
      • AzureFile
    • Windows 排错
    • 云平台排错
      • Azure
    • 排错工具
  • 社区贡献
    • 开发指南
    • 单元测试和集成测试
    • 社区贡献
  • 附录
    • 生态圈
    • 学习资源
    • 国内镜像
    • 如何贡献
    • 参考文档
由 GitBook 提供支持
在本页
  • 什么是 Gateway API?
  • 核心概念
  • Gateway
  • GatewayClass
  • HTTPRoute
  • Gateway API v1.3.0 新特性
  • 标准通道特性
  • 实验性通道特性
  • 角色分离
  • 支持的协议
  • 与 Ingress 的对比
  • 兼容性
  • 迁移指南
  • 从 Ingress 迁移
  • 最佳实践
  • 参考文档
  1. 核心原理
  2. 资源对象

Gateway API

Gateway API 是 Kubernetes 社区推出的用于配置和管理网关的新一代 API,它是 Ingress 资源的演进版本,提供了更强大、更灵活和更具表达力的流量管理能力。

什么是 Gateway API?

Gateway API 是一个由 Kubernetes 网络特殊兴趣小组 (SIG-NETWORK) 维护的开源项目,旨在通过提供表达性强、可扩展和面向角色的接口来改进服务网络。

Gateway API 解决了传统 Ingress 的以下限制:

  • 表达能力有限:Ingress 只能处理简单的 HTTP 路由

  • 可扩展性差:依赖于特定控制器的注解来扩展功能

  • 角色混乱:缺乏清晰的角色分离和权限边界

核心概念

Gateway API 引入了以下核心资源:

Gateway

Gateway 描述了如何将流量转换为集群内的服务。它定义了监听器,每个监听器定义一个端口、协议和主机名。

apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: example-gateway
  namespace: default
spec:
  gatewayClassName: example-class
  listeners:
  - name: http
    port: 80
    protocol: HTTP
    hostname: "*.example.com"

GatewayClass

GatewayClass 定义了一组网关,这些网关共享公共配置和行为。它类似于 StorageClass,但用于网关。

apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
  name: example-class
spec:
  controllerName: example.com/gateway-controller

HTTPRoute

HTTPRoute 定义了 HTTP 请求如何路由到后端服务。

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: example-route
  namespace: default
spec:
  parentRefs:
  - name: example-gateway
  hostnames:
  - "api.example.com"
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /api/v1
    backendRefs:
    - name: api-service
      port: 8080

Gateway API v1.3.0 新特性

标准通道特性

基于百分比的请求镜像

v1.3.0 引入了基于百分比的请求镜像功能,允许将指定百分比的请求镜像到另一个后端:

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: example-route
spec:
  parentRefs:
  - name: example-gateway
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /api
    backendRefs:
    - name: production-service
      port: 8080
    filters:
    - type: RequestMirror
      requestMirror:
        backendRef:
          name: test-service
          port: 8080
        percent: 10  # 镜像 10% 的请求

实验性通道特性

CORS 过滤

新增的 CORS 过滤器支持跨域资源共享配置:

apiVersion: gateway.networking.x-k8s.io/v1alpha1
kind: HTTPRoute
metadata:
  name: cors-example
spec:
  parentRefs:
  - name: example-gateway
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /api
    filters:
    - type: ExtensionRef
      extensionRef:
        group: gateway.networking.x-k8s.io
        kind: CORSPolicy
        name: cors-policy
    backendRefs:
    - name: api-service
      port: 8080
---
apiVersion: gateway.networking.x-k8s.io/v1alpha1
kind: CORSPolicy
metadata:
  name: cors-policy
spec:
  allowOrigins:
  - "https://example.com"
  - "https://*.example.com"
  allowMethods:
  - GET
  - POST
  - PUT
  allowHeaders:
  - "Content-Type"
  - "Authorization"
  allowCredentials: true
  maxAge: "24h"

重试预算 (XBackendTrafficPolicy)

重试预算功能限制客户端在服务端点间的重试行为:

apiVersion: gateway.networking.x-k8s.io/v1alpha1
kind: XBackendTrafficPolicy
metadata:
  name: retry-budget
spec:
  targetRefs:
  - group: ""
    kind: Service
    name: api-service
  retry:
    attempts: 3
    backoff: "1s"
    budget:
      percentage: 20  # 最多 20% 的请求可以重试
      interval: "10s"

XListenerSets

XListenerSets 提供了标准化的 Gateway 监听器合并机制:

apiVersion: gateway.networking.x-k8s.io/v1alpha1
kind: XListenerSet
metadata:
  name: shared-listeners
  namespace: gateway-system
spec:
  listeners:
  - name: http
    port: 80
    protocol: HTTP
  - name: https
    port: 443
    protocol: HTTPS
    tls:
      mode: Terminate
      certificateRefs:
      - name: wildcard-cert

Inference Extension(AI/ML 推理扩展)

Gateway API Inference Extension 是专为生成式 AI 和大语言模型 (LLM) 推理工作负载设计的扩展,提供了智能路由和负载平衡能力。

核心组件:

InferencePool - 定义运行模型服务器的 Pod 池:

apiVersion: gateway.networking.x-k8s.io/v1alpha1
kind: InferencePool
metadata:
  name: llama2-pool
spec:
  deployment:
    replicas: 3
    template:
      spec:
        containers:
        - name: model-server
          image: vllm/vllm-openai:latest
          resources:
            limits:
              nvidia.com/gpu: 1

InferenceModel - 用户面向的模型端点:

apiVersion: gateway.networking.x-k8s.io/v1alpha1
kind: InferenceModel
metadata:
  name: llama2-7b
spec:
  poolRef:
    name: llama2-pool
  routing:
    priority: high
    trafficSplit:
    - weight: 90
      version: stable
    - weight: 10
      version: canary

主要特性:

  • 模型感知路由:基于模型类型和状态进行智能路由

  • 请求优先级:支持每请求的重要性级别设置

  • 安全模型发布:支持金丝雀发布和 A/B 测试

  • 优化负载平衡:基于实时指标进行 GPU 资源优化

性能优势:

  • 降低 AI/ML 工作负载延迟

  • 提高 GPU 利用率

  • 标准化 AI 服务路由方式

  • 支持前缀缓存感知的负载平衡

角色分离

Gateway API 设计了清晰的角色分离:

  • 基础设施提供者:管理 GatewayClass 和基础设施

  • 集群操作员:管理 Gateway 资源和网络策略

  • 应用开发者:管理 Route 资源和应用流量

支持的协议

Gateway API 支持多种协议:

  • HTTP/HTTPS:通过 HTTPRoute 资源

  • TLS:通过 TLSRoute 资源

  • TCP:通过 TCPRoute 资源

  • UDP:通过 UDPRoute 资源

  • gRPC:通过 GRPCRoute 资源

与 Ingress 的对比

特性
Ingress
Gateway API

协议支持

仅 HTTP/HTTPS

HTTP/HTTPS/TCP/UDP/TLS/gRPC

角色分离

无

清晰的角色分离

可扩展性

通过注解

原生 API 扩展

表达能力

有限

丰富的流量管理能力

类型安全

部分

完全类型安全

兼容性

  • Kubernetes 版本:要求 Kubernetes 1.26 或更高版本

  • API 稳定性:标准通道功能已达到 v1 稳定版本

  • 实现:Envoy Gateway、Istio、Cilium、Airlock 等多个实现

迁移指南

从 Ingress 迁移

  1. 安装 Gateway API CRDs:

kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.3.0/standard-install.yaml
  1. 创建 GatewayClass:

apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
  name: nginx
spec:
  controllerName: nginx.org/nginx-gateway-controller
  1. 创建 Gateway:

apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: nginx-gateway
spec:
  gatewayClassName: nginx
  listeners:
  - name: http
    port: 80
    protocol: HTTP
  1. 将 Ingress 转换为 HTTPRoute:

# 原 Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: example-service
            port:
              number: 80

# 转换为 HTTPRoute
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: example-route
spec:
  parentRefs:
  - name: nginx-gateway
  hostnames:
  - "example.com"
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /
    backendRefs:
    - name: example-service
      port: 80

最佳实践

  1. 渐进式迁移:先在测试环境验证,再逐步迁移生产环境

  2. 角色分离:明确定义不同角色的职责和权限

  3. 监控观察:部署适当的监控和日志记录

  4. 安全配置:使用 TLS 终止和适当的安全策略

  5. 性能测试:验证新配置的性能表现

参考文档

上一页Deployment下一页Ingress

最后更新于7小时前

Gateway API 官方文档
Gateway API v1.3.0 发布说明
Gateway API Inference Extension 介绍
Gateway API GitHub 仓库
Gateway API 实现列表