news 2026/5/1 8:34:33

kubernetes安装traefik Gateway API,应对Ingress NGINX停止维护

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
kubernetes安装traefik Gateway API,应对Ingress NGINX停止维护

官方公告:Ingress NGINX 将在2026 年3月停止维护,之后不会再有新 bug 修复或安全补丁。

这次官方宣布停止维护Ingress NGINX主要原因还是因为项目长期依赖少数维护者、并且今年暴露过严重安全事件,还有一个原因是大量 NGINX 自定义配置、各种注解(annotations)、自定义模板,使得开发者几乎“被锁定”在老旧架构中。

“停止维护”并不等于服务立即停止或失效:目前系统继续运行不会因为公告立即宕掉。但风险增加:未来若有新漏洞或安全事件,使用者将无法获得官方补丁,自行承担风险。

所以短期内还可以继续使用,后期就需要考虑替代品了

大部分公司如果用了K8S,把服务暴露给外网,大概率都使用了Ingress NGINX。所以它宣布即将停止维护,大家还是捏了一把汗,还好在2026年3月才停止维护,这就给企业留了缓冲时间。

Kubernetes 的新方向是 Gateway API,行业趋势已经不再是 “Ingress + NGINX”,而是标准化的Gateway API

Kubernetes 1.34 中 Gateway API 已进入GA(通用可用)阶段(v1.0.0),替代传统 Ingress 成为更灵活的流量管理方案。以下主流流量组件都支持 Gateway API。

  • Istio:https://istio.io/latest/
  • Traefik:https://doc.traefik.io/traefik/
  • Kong:https://developer.konghq.com/
  • HAProxy:https://www.haproxy.com/blog

本次实现在新搭建的kubernetes1.34集群尝试安装Traefik,经过官网对比,Traefik 3.x 是适配 Gateway API v1 的最佳选择。

1.部署 Gateway API CRDs(K8s 1.34 必备)

# 部署 Gateway API v1.0.0 CRDs(官方源) kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.0.0/standard-install.yaml # 验证 CRDs 部署成功 kubectl get crds | grep gateway.networking.k8s.io # 输出包含 gatewayclasses.gateway.networking.k8s.io、gateways.gateway.networking.k8s.io、httproutes.gateway.networking.k8s.io 等即正常

2.创建 Traefik 命名空间

kubectl create namespace traefik

3. 部署 Traefik RBAC 权限(适配 Gateway API)

Traefik 需要访问 Gateway API 资源(GatewayClass/Gateway/HTTPRoute 等),创建traefik-rbac.yaml

--- # ServiceAccount apiVersion: v1 kind: ServiceAccount metadata: name: traefik namespace: traefik --- # ClusterRole:包含 Gateway API 资源权限 + 基础 K8s 资源权限 apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: traefik rules: # 基础网络资源 - apiGroups: [""] resources: ["services", "endpoints", "secrets"] verbs: ["get", "list", "watch"] # Gateway API v1 资源(核心) - apiGroups: ["gateway.networking.k8s.io"] resources: - gatewayclasses - gateways - httproutes - tcproutes - tlsroutes - referencegrants verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] # 节点信息(用于 DaemonSet 模式) - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list", "watch"] # Pod 信息(用于端点发现) - apiGroups: [""] resources: ["pods"] verbs: ["get", "list", "watch"] --- # ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: traefik roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: traefik subjects: - kind: ServiceAccount name: traefik namespace: traefik

4.部署 Traefik 3.1(DaemonSet 模式,生产推荐)

--- # ConfigMap:Traefik 基础配置 apiVersion: v1 kind: ConfigMap metadata: name: traefik-config namespace: traefik data: traefik.yaml: | api: insecure: true # 测试阶段开启仪表盘(生产关闭) dashboard: true entryPoints: web: address: ":80" # HTTP 入口 websecure: address: ":443" # HTTPS 入口 traefik: address: ":8080" # 仪表盘入口 providers: kubernetesGateway: # 启用 Gateway API 提供者(核心) enabled: true namespace: "*" # 监听所有命名空间的 Gateway 资源 kubernetesIngress: # 可选:保留 Ingress 兼容(如需双模式) enabled: false log: level: "INFO" # 生产可改为 WARN accessLog: filePath: "/dev/stdout" # 访问日志输出到标准输出,便于日志收集 --- # DaemonSet:每个节点部署 Traefik,使用 HostPort 暴露端口 apiVersion: apps/v1 kind: DaemonSet metadata: name: traefik namespace: traefik labels: app: traefik spec: selector: matchLabels: app: traefik template: metadata: labels: app: traefik spec: serviceAccountName: traefik hostNetwork: true # 使用主机网络,确保 HostPort 生效 terminationGracePeriodSeconds: 60 containers: - name: traefik image: traefik:v3.1.0 # 适配 K8s 1.34 + Gateway API v1,镜像下载可参考官网 args: - --configfile=/etc/traefik/traefik.yaml ports: - name: web containerPort: 80 hostPort: 80 # 主机 HTTP 端口 - name: websecure containerPort: 443 hostPort: 443 # 主机 HTTPS 端口 - name: traefik containerPort: 8080 hostPort: 8080 # 仪表盘端口 volumeMounts: - name: config mountPath: /etc/traefik securityContext: capabilities: drop: ["ALL"] add: ["NET_BIND_SERVICE"] # 允许绑定 80/443 端口 resources: limits: cpu: 1000m memory: 512Mi requests: cpu: 100m memory: 64Mi # 健康检查(生产必备) livenessProbe: httpGet: path: /ping port: 8080 initialDelaySeconds: 10 periodSeconds: 10 readinessProbe: httpGet: path: /ping port: 8080 initialDelaySeconds: 5 periodSeconds: 5 volumes: - name: config configMap: name: traefik-config # 允许运行在控制平面节点(按需开启) tolerations: - key: node-role.kubernetes.io/control-plane operator: Exists effect: NoSchedule - key: node-role.kubernetes.io/master operator: Exists effect: NoSchedule --- # Service:暴露仪表盘(测试用,生产建议删除) apiVersion: v1 kind: Service metadata: name: traefik-dashboard namespace: traefik spec: selector: app: traefik ports: - name: traefik port: 8080 targetPort: 8080 nodePort: 30800 type: NodePort

5.执行部署

kubectl apply -f traefik-rbac.yaml kubectl apply -f traefik-daemonset.yaml

6.验证 Traefik 部署

# 检查 Traefik Pod 状态(每个节点一个 Pod,Running 状态) kubectl get pods -n traefik # 检查 Traefik 日志,确认 Gateway API 提供者加载成功 kubectl logs -f <traefik-pod-name> -n traefik # 日志中包含 "Provider kubernetesGateway started" 即表示 Gateway API 适配成功 # 访问仪表盘验证(测试用) curl http://<节点IP>:30800/dashboard/ # 能看到 Traefik 仪表盘界面即正常

7.配置 Gateway API 资源(核心验证)

Gateway API 核心资源关系:GatewayClass(网关类)→Gateway(网关实例)→HTTPRoute(路由规则)。以下创建完整示例,实现 Nginx 服务的流量转发。

  • 创建 GatewayClass(绑定 Traefik 控制器)

GatewayClass是集群级资源,定义网关的「类型」,绑定 Traefik 控制器

# traefik-gatewayclass.yaml apiVersion: gateway.networking.k8s.io/v1 kind: GatewayClass metadata: name: traefik-gateway-class spec: controllerName: traefik.io/gateway-controller # Traefik 3.x 固定标识 description: "Traefik GatewayClass for K8s 1.34"

kubectl apply -f traefik-gatewayclass.yaml

# 验证 GatewayClass

kubectl get gatewayclass

# 输出 traefik-gateway-class,STATUS 为 Accepted 即正常

  • 创建 Gateway(网关实例,暴露 80/443 端口)

Gateway是命名空间级资源,对应 Traefik 的入口端口,绑定上述 GatewayClass:

# traefik-gateway.yaml apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: traefik-gateway namespace: default # 可自定义命名空间 spec: gatewayClassName: traefik-gateway-class # 关联上述 GatewayClass listeners: # 监听端口配置(对应 Traefik 的 entryPoints) - name: web protocol: HTTP port: 80 allowedRoutes: namespaces: from: All # 允许所有命名空间的 HTTPRoute 关联 - name: websecure protocol: HTTPS port: 443 allowedRoutes: namespaces: from: All # 可选:配置默认 TLS 证书(需提前创建 Secret) # tls: # certificateRefs: # - name: https-tls-secret # kind: Secret

kubectl apply -f traefik-gateway.yaml # 验证 Gateway

kubectl get gateway # 输出 traefik-gateway,

STATUS 为 Ready 即正常(需等待 Traefik 识别)

  • 创建测试服务 + HTTPRoute(路由规则)

先部署 Nginx 测试服务,再创建HTTPRoute关联 Gateway,实现流量转发:

# nginx-test.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-test namespace: default spec: replicas: 1 selector: matchLabels: app: nginx-test template: metadata: labels: app: nginx-test spec: containers: - name: nginx image: nginx:1.22 ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: nginx-test namespace: default spec: selector: app: nginx-test ports: - port: 80 targetPort: 80 type: ClusterIP --- # HTTPRoute:路由规则,关联 Gateway 和测试服务 apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: nginx-httproute namespace: default spec: parentRefs: # 关联上述 Gateway - name: traefik-gateway namespace: default sectionName: web # 关联 Gateway 的 web 监听器(80 端口) hostnames: # 自定义域名(需配置 hosts 解析到节点 IP) - "nginx.test.com" rules: # 路由规则 - matches: - path: type: PathPrefix value: / backendRefs: # 转发到测试服务 - name: nginx-test port: 80

kubectl apply -f nginx-test.yaml

# 验证 HTTPRoute

kubectl get httproutes

# 输出 nginx-httproute,STATUS 为 Accepted 即正常

  • 验证 Gateway API 转发
# 1. 配置本地 hosts(示例) echo "<节点IP> nginx.test.com" >> /etc/hosts # 2. 访问测试(通过 Traefik 网关 80 端口) curl http://nginx.test.com # 输出 Nginx 默认页面 → 路由转发成功 # 3. 验证 Traefik 路由识别 kubectl logs -f <traefik-pod-name> -n traefik # 日志中包含 "Added HTTPRoute default/nginx-httproute" 即表示路由加载成功

关键点回顾

  1. K8s 1.34 需手动部署 Gateway API v1.0.0 CRDs(GA 版本,无需特性门控);
  2. Traefik 3.x 是适配 Gateway API v1 的核心版本,需配置kubernetesGateway提供者;
  3. Gateway API 核心资源流程:GatewayClass(集群级)→Gateway(命名空间级,暴露端口)→HTTPRoute(路由规则,关联服务);
  4. 生产环境需关闭 Traefik 仪表盘、启用 TLS 加密、配置资源限制和监控,确保稳定性。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/28 13:51:03

科研协作匹配平台:研究方向关联由TensorRT智能发现

科研协作匹配平台&#xff1a;研究方向关联由TensorRT智能发现 在当今跨学科融合日益频繁的科研生态中&#xff0c;如何快速找到潜在的合作对象&#xff0c;已成为许多研究者面临的真实挑战。传统的“靠人脉”或“看单位”的合作模式正逐渐被数据驱动的智能匹配所取代。越来越多…

作者头像 李华
网站建设 2026/5/1 7:57:45

ST7789V SPI模式配置超详细版操作指南

ST7789V SPI驱动实战指南&#xff1a;从硬件连接到稳定显示的全链路解析你有没有遇到过这样的场景&#xff1f;新买的2.4寸TFT屏&#xff0c;接上STM32后只显示白屏、花屏&#xff0c;或者图像上下颠倒&#xff1f;明明代码烧进去了&#xff0c;屏幕却毫无反应。如果你正在使用…

作者头像 李华
网站建设 2026/5/1 3:48:39

24-Redis Cluster 核心解析:分布式架构入门指南

目录 前言 一、Redis Cluster 的核心定位:解决什么核心问题? 二、Redis Cluster 核心特性:关键设计与原理 2.1 核心架构:主从节点与哈希槽 2.2 核心特性:无需实操也能懂的关键能力 2.3 与主从 + 哨兵架构的核心区别 三、Redis Cluster 的适用场景与局限性 3.1 适用场景 3.…

作者头像 李华
网站建设 2026/4/29 17:07:44

uniapp 返回上一页再进入当前页mounted不执行

最近做项目&#xff0c;使用的uniappvue2.碰到了一个问题。在页面跳转时。如a页面跳转到b页面。点击返回到A页面&#xff0c;再次进入到b页面。在mounted函数中的自定义函数不执行。其实是因为自己基础知识的不扎实&#xff0c;以及vue生命周期的了解不够。经过各种尝试以及网上…

作者头像 李华
网站建设 2026/4/26 17:47:45

零时差部署:基于vLLM-ascend在昇腾NPU上极速跑通DeepSeek-V2-Lite

零时差部署&#xff1a;基于vLLM-ascend在昇腾NPU上极速跑通DeepSeek-V2-Lite资源导航&#xff1a; 昇腾模型开源社区&#xff1a;https://atomgit.com/Ascend免费算力申请&#xff1a;https://ai.gitcode.com/ascend-tribe/openPangu-Ultra-MoE-718B-V1.1?source_modulesearc…

作者头像 李华
网站建设 2026/4/25 2:51:22

博物馆导览机器人:语音交互系统基于TensorRT本地运行

博物馆导览机器人&#xff1a;语音交互系统基于TensorRT本地运行 在一座安静的博物馆展厅里&#xff0c;一位游客停下脚步&#xff0c;轻声问&#xff1a;“这件文物是什么年代的&#xff1f;” 几乎没有停顿&#xff0c;身旁的导览机器人立刻回应&#xff1a;“这是唐代的三彩…

作者头像 李华