Ingress2Gateway 实战案例:从 ingress-nginx 到 Envoy Gateway 的完整迁移指南

发布时间:2026/7/21 18:20:03

Ingress2Gateway 实战案例:从 ingress-nginx 到 Envoy Gateway 的完整迁移指南 Ingress2Gateway 实战案例从 ingress-nginx 到 Envoy Gateway 的完整迁移指南【免费下载链接】ingress2gatewayConvert Ingress resources to Gateway API resources项目地址: https://gitcode.com/gh_mirrors/in/ingress2gateway随着Kubernetes SIG Network宣布ingress-nginx即将退役许多团队面临着从传统Ingress控制器迁移到现代Gateway API架构的紧迫需求。Ingress2Gateway作为Kubernetes官方推荐的迁移工具为这一转变提供了无缝的解决方案。本文将详细介绍如何使用Ingress2Gateway工具将现有的ingress-nginx配置完整迁移到Envoy Gateway确保您的服务在迁移过程中零停机。为什么需要从ingress-nginx迁移到Gateway API ingress-nginx作为Kubernetes社区最受欢迎的Ingress控制器之一即将在2025年底结束维护。Gateway API作为下一代流量管理标准提供了更强大、更灵活的功能标准化API统一的流量管理接口支持多种实现多租户支持更好的命名空间隔离和权限控制扩展性支持更复杂的路由规则和策略未来兼容得到主流云厂商和开源项目的广泛支持Ingress2Gateway工具简介 ️Ingress2Gateway是一个由Kubernetes SIG Network维护的开源工具专门用于将Ingress资源和提供商特定的CRD转换为Gateway API资源。它采用模块化架构包含Providers读取Ingress资源和Emitters生成Gateway API输出两大核心组件。核心功能亮点 ✨多提供商支持支持ingress-nginx、Traefik、Kong、Istio等主流Ingress控制器多发射器选择支持标准Gateway API、Envoy Gateway、AgentGateway等多种输出格式注解转换自动转换ingress-nginx的100自定义注解冲突处理智能解决Ingress资源之间的规则冲突详细报告提供转换过程中的警告和建议实战迁移从ingress-nginx到Envoy Gateway 步骤1环境准备与工具安装首先确保您的Kubernetes集群已安装Gateway API CRD和Envoy Gateway# 安装Ingress2Gateway工具 go install github.com/kubernetes-sigs/ingress2gatewaylatest # 或者使用Homebrew安装 brew install ingress2gateway # 验证安装 ingress2gateway version步骤2分析现有ingress-nginx配置在开始迁移前先了解您的Ingress资源配置情况。Ingress2Gateway提供了详细的转换预览功能# 查看当前命名空间中的所有ingress-nginx资源 ingress2gateway print --providersingress-nginx --namespaceproduction # 查看所有命名空间的资源 ingress2gateway print --providersingress-nginx --all-namespaces # 将输出保存到文件进行审查 ingress2gateway print --providersingress-nginx --namespaceproduction -o yaml migration-preview.yaml步骤3执行完整迁移使用Envoy Gateway发射器进行迁移这是从ingress-nginx到现代API网关的最佳路径# 使用Envoy Gateway发射器进行迁移 ingress2gateway print \ --providersingress-nginx \ --emitterenvoy-gateway \ --namespaceproduction \ -o yaml envoy-gateway-resources.yaml步骤4应用Gateway API资源将生成的Gateway API资源应用到您的集群# 应用Gateway API资源 kubectl apply -f envoy-gateway-resources.yaml # 验证Gateway和HTTPRoute资源 kubectl get gateways -n production kubectl get httproutes -n production关键注解转换示例 1. 路径重写转换ingress-nginx配置apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: app-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: /$2 spec: rules: - host: example.com http: paths: - path: /api/v1(/|$)(.*) pathType: Prefix backend: service: name: api-service port: number: 8080转换后的Gateway API资源apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: app-ingress-httproute spec: parentRefs: - name: example-gateway hostnames: - example.com rules: - matches: - path: type: PathPrefix value: /api/v1 filters: - type: URLRewrite urlRewrite: path: type: ReplacePrefixMatch replacePrefixMatch: / backendRefs: - name: api-service port: 80802. CORS配置转换ingress-nginx配置apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: api-ingress annotations: nginx.ingress.kubernetes.io/enable-cors: true nginx.ingress.kubernetes.io/cors-allow-origin: https://app.example.com nginx.ingress.kubernetes.io/cors-allow-methods: GET, POST, PUT, DELETE nginx.ingress.kubernetes.io/cors-allow-headers: DNT,User-Agent,X-Requested-With,Content-Type nginx.ingress.kubernetes.io/cors-max-age: 86400转换后的Envoy Gateway资源apiVersion: gateway.envoyproxy.io/v1alpha1 kind: HTTPRouteFilter metadata: name: api-ingress-cors spec: cors: allowOrigins: - https://app.example.com allowMethods: - GET - POST - PUT - DELETE allowHeaders: - DNT - User-Agent - X-Requested-With - Content-Type maxAge: 864003. 金丝雀发布配置转换ingress-nginx配置apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: canary-ingress annotations: nginx.ingress.kubernetes.io/canary: true nginx.ingress.kubernetes.io/canary-weight: 20 nginx.ingress.kubernetes.io/canary-by-header: X-Canary nginx.ingress.kubernetes.io/canary-by-header-value: true转换后的Gateway API资源apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: canary-ingress-httproute spec: parentRefs: - name: example-gateway hostnames: - example.com rules: - matches: - headers: - type: Exact name: X-Canary value: true backendRefs: - name: canary-service port: 8080 weight: 20 - backendRefs: - name: main-service port: 8080 weight: 80迁移过程中的注意事项 ⚠️1. 注解支持情况Ingress2Gateway支持大部分ingress-nginx注解但某些高级功能需要手动调整完全支持CORS、重定向、超时设置、请求头修改部分支持正则表达式路径匹配、后端TLS验证需要手动迁移自定义Lua脚本、高级速率限制2. 命名空间策略Gateway API提供了更细粒度的命名空间控制# Gateway API支持跨命名空间引用 apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: cross-namespace-route namespace: app-namespace spec: parentRefs: - name: shared-gateway namespace: gateway-namespace3. TLS配置差异ingress-nginx与Gateway API的TLS处理方式有所不同# ingress-nginx方式 spec: tls: - hosts: - example.com secretName: tls-secret # Gateway API方式 spec: listeners: - name: https port: 443 protocol: HTTPS hostname: example.com tls: mode: Terminate certificateRefs: - name: tls-secret验证迁移成功 ✅1. 功能验证清单迁移完成后请验证以下关键功能✅ 路由规则是否正确转换✅ TLS证书是否正常加载✅ 重定向规则是否生效✅ CORS配置是否工作✅ 金丝雀发布是否正常✅ 监控指标是否正常采集2. 性能对比测试建议在迁移前后进行性能测试# 使用hey进行负载测试 hey -z 30s -c 50 https://example.com/api/v1/health # 监控延迟和吞吐量变化 kubectl top pods -n envoy-gateway-system3. 回滚计划准备完善的回滚计划至关重要# 备份原始Ingress资源 kubectl get ingress -n production -o yaml ingress-backup.yaml # 快速回滚到ingress-nginx kubectl apply -f ingress-backup.yaml kubectl delete -f envoy-gateway-resources.yaml高级迁移技巧 1. 分批迁移策略对于大型集群建议采用分批迁移# 第一阶段迁移测试环境 ingress2gateway print --providersingress-nginx --namespacetest # 第二阶段迁移非关键服务 ingress2gateway print --providersingress-nginx --namespacestaging # 第三阶段迁移生产环境关键服务 ingress2gateway print --providersingress-nginx --namespaceproduction2. 使用自定义发射器如果需要特定的Envoy Gateway配置可以创建自定义发射器// 在[pkg/i2gw/emitters/envoygateway/](https://link.gitcode.com/i/076f83863815cfc9cfde7e7ed5fd78ec)目录下 // 扩展Envoy Gateway发射器以满足特定需求3. 监控和告警配置迁移后更新监控配置# Prometheus监控配置示例 - job_name: envoy-gateway static_configs: - targets: [envoy-gateway-controller.envoy-gateway-system:8080]常见问题解答 ❓Q: 迁移过程中服务会中断吗A: 不会。您可以并行运行ingress-nginx和Envoy Gateway通过DNS权重逐步切换流量。Q: 不支持的功能怎么办A: 对于不支持的注解Ingress2Gateway会生成警告报告您可以根据报告手动调整配置。Q: 如何验证转换的正确性A: 使用--outputkyaml格式输出可以清晰地看到每个资源的转换逻辑。Q: 迁移后性能有变化吗A: Envoy Gateway通常提供更好的性能和更低的资源消耗但建议进行负载测试验证。总结 通过Ingress2Gateway工具从ingress-nginx到Envoy Gateway的迁移变得简单可靠。关键步骤包括准备工作安装工具了解现有配置转换测试使用预览功能验证转换结果分批实施按环境和服务重要性分批迁移验证监控确保所有功能正常工作优化调整根据Gateway API特性优化配置迁移到Gateway API不仅是技术升级更是为未来Kubernetes流量管理奠定坚实基础。Envoy Gateway作为云原生API网关的领先实现结合Ingress2Gateway的自动化迁移能力让这一转变变得轻松而安全。立即开始您的迁移之旅拥抱下一代Kubernetes流量管理标准 提示更多详细配置和高级用法请参考官方文档和AI功能源码中的示例。【免费下载链接】ingress2gatewayConvert Ingress resources to Gateway API resources项目地址: https://gitcode.com/gh_mirrors/in/ingress2gateway创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻