【Kubernetes】(二十)Gateway

【Kubernetes】(二十)Gateway

目录

一、为什么需要 Gateway?先搞懂 “流量入口” 的进化史

二、Gateway API 核心组件:理清 “谁在做什么”

1. GatewayClass:网关的 “模板”

2. Gateway:实际的 “流量入口”

3. Route:流量的 “导航规则”

三、Gateway 实战:从部署到访问

1. 部署 Nginx Gateway Fabric

2. 创建 GatewayClass 和 Gateway

3. 部署后端服务和 HTTPRoute

4. 测试访问

四、Gateway 的进阶特性:不止于 “转发”

1. HTTPS 终止(SSL/TLS)

2. 流量灰度(权重路由)

3. 跨命名空间路由

4. 健康检查与重试

五、总结:Gateway 为什么是未来?


在 Kuber***es(简称 K8s)生态中,“如何让外部流量安全、高效地访问集群内服务” 一直是核心需求之一。从早期的 Service、Ingress 到如今的 Gateway API,K8s 在流量管理领域不断进化,而Gateway作为新一代流量入口标准,凭借其灵活性、扩展性和标准化特性,逐渐成为企业级 K8s 集群的首选方案。今天我们就从概念入手,拆解 Gateway 的核心能力,再通过实战案例带你掌握其落地方法。

一、为什么需要 Gateway?先搞懂 “流量入口” 的进化史

在聊 Gateway 之前,我们得先明白:K8s 为什么要推出 Gateway?它解决了之前方案的哪些痛点?

早期 K8s 中,服务暴露主要依赖Service:ClusterIP 用于集群内通信,NodePort 通过节点端口暴露服务,LoadBalancer 则依赖云厂商的负载均衡器。但这些方案存在明显局限 —— 比如 NodePort 端口管理混乱、LoadBalancer 成本高且仅支持四层负载;而 Ingress 作为 “七层流量入口”,虽然实现了域名路由、SSL 终止等功能,但又面临新问题:

  • 功能固化:Ingress 仅支持 HTTP/HTTPS 路由,无法满足 TCP/UDP、gRPC 等非 HTTP 协议的需求;
  • 扩展性差:不同 Ingress 控制器(如 Nginx Ingress、Traefik)自定义配置差异大,缺乏统一标准,跨控制器迁移成本高;
  • 权限割裂:Ingress 资源将 “路由规则” 和 “负载均衡器配置” 绑定在一起,运维团队(管负载均衡)和开发团队(管路由)无法分工协作。

为解决这些问题,K8s 社区推出了Gateway API(当前已进入 GA 阶段,即稳定版),而 Gateway 就是 Gateway API 体系中的核心资源之一。它的核心设计理念是 “分离关注点”:将 “流量入口基础设施”(如负载均衡器、网关实例)和 “路由规则” 拆分开,同时支持多协议、多团队协作,彻底打破了 Ingress 的局限性。

二、Gateway API 核心组件:理清 “谁在做什么”

Gateway API 不是单一资源,而是一套 “资源组合”,核心包括GatewayClassGatewayRoute三类资源,三者分工明确,共同实现流量管理。

1. GatewayClass:网关的 “模板”

GatewayClass 是 “集群级” 资源,相当于网关的 “模板定义”,它指定了当前网关使用的 “控制器实现”(比如 Nginx Gateway Fabric、Traefik Gateway、Istio Gateway 等),以及该类网关的通用配置(如负载均衡器类型、资源限制)。

简单来说:一个 GatewayClass 对应一种 “网关产品”,比如 “nginx-gateway-class” 对应 Nginx Gateway Fabric 控制器,“traefik-gateway-class” 对应 Traefik 控制器。集群中可以有多个 GatewayClass,供不同业务场景选择。

示例:定义一个基于 Nginx Gateway Fabric 的 GatewayClass

apiVersion: gateway.***working.k8s.io/v1
kind: GatewayClass
metadata:
  name: nginx-gateway-class  # GatewayClass的名称,后续Gateway会引用它
spec:
  controllerName: nginx.org/gateway-controller  # 对应的控制器标识
  parametersRef:  # 可选,指定该类网关的通用参数(如负载均衡器配置)
    apiGroup: k8s.gateway.nginx.org
    kind: GatewayClassParameters
    name: nginx-gateway-params

2. Gateway:实际的 “流量入口”

Gateway 是 “命名空间级” 资源,它基于 GatewayClass 创建,代表一个 “实际运行的网关实例”—— 比如云厂商的负载均衡器、集群内的 NginxPod 集群。Gateway 的核心作用是 “暴露流量入口”,比如绑定公网 IP、监听特定端口(如 80、443),并定义该入口支持的协议(HTTP、HTTPS、TCP 等)。

举个例子:创建一个监听 80 端口(HTTP)的 Gateway,使用上面定义的 “nginx-gateway-class” 模板

apiVersion: gateway.***working.k8s.io/v1
kind: Gateway
metadata:
  name: demo-gateway
  namespace: default  # Gateway属于特定命名空间
转载请说明出处内容投诉
CSS教程网 » 【Kubernetes】(二十)Gateway

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买