首页 物联网

GKE 服务暴露新思路:Gateway API 实现外部访问 Pods 的最佳实践

分类:物联网
字数: (3284)
阅读: (4781)
内容摘要:GKE 服务暴露新思路:Gateway API 实现外部访问 Pods 的最佳实践,

在 Kubernetes (GKE) 环境中,将应用暴露给外部访问通常依赖 Service 的 LoadBalancer 类型或 Ingress Controller。虽然这两种方式都很成熟,但 Gateway API 作为一种新型的 API 规范,提供了更强大、更灵活的流量管理能力。本文将探讨如何使用 Gateway API 来实现 GKE 的 pods 从外部访问,并分享一些实战经验。

传统方案的痛点

传统的 Service LoadBalancer 方式简单直接,但每个 LoadBalancer 都会创建一个云厂商的负载均衡器,成本较高,且资源利用率较低。Ingress Controller 则依赖 Nginx、Traefik 等反向代理,配置复杂,且难以实现精细化的流量控制。例如,当我们需要根据请求头、Cookie 等信息将流量路由到不同的 Pod 时,Ingress Controller 的配置就会变得非常繁琐。

GKE 服务暴露新思路:Gateway API 实现外部访问 Pods 的最佳实践

Gateway API 的优势

Gateway API 通过 GatewayClass、Gateway、HTTPRoute 等资源对象,提供了一种声明式的流量管理方式。它的优势包括:

GKE 服务暴露新思路:Gateway API 实现外部访问 Pods 的最佳实践
  • 角色分离:基础设施运维人员负责管理 Gateway,应用开发人员负责定义 HTTPRoute,职责更清晰。
  • 协议支持:除了 HTTP/HTTPS,Gateway API 还支持 gRPC、TCP 等协议。
  • 高级流量管理:支持基于 header、query parameters、path 等多种条件的流量路由、流量镜像、流量分割等高级功能。
  • 可扩展性:Gateway API 允许自定义 GatewayClass,方便集成不同的流量管理解决方案。

部署 Gateway API Controller

首先,我们需要在 GKE 集群中部署 Gateway API Controller。这里以 GKE Gateway Controller 为例,它基于 Google Cloud Load Balancer。

GKE 服务暴露新思路:Gateway API 实现外部访问 Pods 的最佳实践
# 部署 GKE Gateway Controller
kubectl apply -f https://github.com/GoogleCloudPlatform/gke-gateway-controller/releases/latest/download/gke-gateway.yaml

创建 GatewayClass

GatewayClass 定义了 Gateway 的类型。GKE Gateway Controller 提供了默认的 GatewayClass。

GKE 服务暴露新思路:Gateway API 实现外部访问 Pods 的最佳实践
# gatewayclass.yaml
apiVersion: gateway.networking.k8s.io/v1beta1
kind: GatewayClass
metadata:
  name: gke-gateway
spec:
  controllerName: cloud.google.com/gateway-controller
kubectl apply -f gatewayclass.yaml

创建 Gateway

Gateway 实例代表一个实际的负载均衡器。我们需要指定 GatewayClass 来创建 Gateway。

# gateway.yaml
apiVersion: gateway.networking.k8s.io/v1beta1
kind: Gateway
metadata:
  name: my-gateway
spec:
  gatewayClassName: gke-gateway
  listeners:
  - name: http
    protocol: HTTP
    port: 80
kubectl apply -f gateway.yaml

创建 Gateway 后,GKE Gateway Controller 会自动创建一个 Google Cloud Load Balancer。可以通过 kubectl describe gateway my-gateway 查看 Load Balancer 的 IP 地址。

创建 HTTPRoute

HTTPRoute 定义了如何将流量路由到后端的 Pod。我们需要指定 Gateway 来关联 HTTPRoute 和 Gateway。

# httproute.yaml
apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoute
metadata:
  name: my-httproute
spec:
  parentRefs:
  - name: my-gateway
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /
    backendRefs:
    - name: my-service  # 后端 Service 的名称
      port: 80
kubectl apply -f httproute.yaml

实战避坑经验

  • GatewayClass 选择:GKE Gateway Controller 基于 Google Cloud Load Balancer,性能和稳定性有保障。如果需要更灵活的流量管理能力,可以考虑使用 Istio Gateway 或 Contour 等方案。
  • Health Check:确保后端 Service 的 Health Check 配置正确,避免流量路由到不健康的 Pod。
  • 监控与日志:配置 Gateway 的监控和日志,方便排查问题。可以使用 Prometheus 和 Grafana 来监控 Gateway 的性能指标,使用 Stackdriver Logging 来查看 Gateway 的日志。
  • 版本兼容性:Gateway API 还在快速发展中,要注意版本兼容性问题。建议使用最新的 Gateway API 版本。

通过以上步骤,我们就可以使用 Gateway API 来实现 GKE 的 pods 从外部访问。Gateway API 提供了更强大、更灵活的流量管理能力,是未来 Kubernetes 流量管理的发展方向。在实际项目中,可以根据业务需求选择合适的 GatewayClass 和 HTTPRoute 配置,实现精细化的流量控制。

GKE 服务暴露新思路:Gateway API 实现外部访问 Pods 的最佳实践

转载请注明出处: 代码一只喵

本文的链接地址: http://m.acea2.store/blog/291002.SHTML

本文最后 发布于2026-04-04 05:26:33,已经过了23天没有更新,若内容或图片 失效,请留言反馈

()
您可能对以下文章感兴趣
评论
  • 熬夜冠军 5 天前
    学习了,以前用 Ingress 搞得头大,看来可以试试 Gateway API 了。
  • 豆腐脑 6 天前
    GKE Gateway Controller 是基于 Google Cloud Load Balancer 的,会不会有厂商锁定问题?
  • 春风十里 3 天前
    楼主分析得很透彻,正准备在项目中引入 Gateway API,这篇文章很有帮助!