You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes中运行的Ingress能否无停机重配置?业务迁移场景咨询

把service.domain.com无缝迁移到service_new_one的Ingress方案

嘿,我看你尝试直接修改旧Ingress的后端服务来完成迁移,但这种方式很容易踩坑——比如现有长连接突然中断、用户的旧书签/链接没法平滑过渡,或者新服务没准备好处理根路径的请求。下面给你几个更稳妥的方案,按需选择:

方案1:HTTP重定向(平滑过渡首选)

别直接改旧Ingress的后端,先给service.domain.com加个重定向规则,把所有请求转到service_one.domain.com/one,同时保留旧后端一段时间(兼容那些没更新的老客户端):

# 更新后的Ingress1_legacy配置
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress1-legacy
  annotations:
    # 永久重定向(适合正式迁移,告诉浏览器缓存这个规则)
    nginx.ingress.kubernetes.io/permanent-redirect: "https://service_one.domain.com/one$request_uri"
    # 如果是测试阶段,用临时重定向(不缓存):
    # nginx.ingress.kubernetes.io/temporary-redirect: "https://service_one.domain.com/one$request_uri"
spec:
  rules:
  - host: service.domain.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: service_legacy  # 留着旧后端,避免直接断开老请求
            port:
              number: 80

这样用户访问旧域名会自动跳转到新服务地址,旧服务还能兜底处理没被重定向的请求。等所有流量都迁到新服务后,再删掉旧Ingress就行。

方案2:金丝雀发布(无URL变更,逐步切流量)

如果你不想改用户访问的URL,只是想让旧域名的流量直接到新服务,又怕直接改Ingress导致流量中断,可以用金丝雀Ingress慢慢切流量:

  1. 先建个金丝雀Ingress,把10%的流量导去新服务:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress1-canary
  annotations:
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-weight: "10"  # 这里可以调比例,比如从10%到50%再到100%
spec:
  rules:
  - host: service.domain.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: service_new_one
            port:
              number: 80
  1. 观察一段时间,确认新服务运行正常后,慢慢把canary-weight调到100%,之后就可以删掉旧的Ingress1_legacy和金丝雀Ingress,或者直接修改原Ingress的后端。

方案3:直接修改原Ingress后端(无兼容需求)

如果你确定不需要兼容旧服务,直接改原Ingress的后端也可以,但要注意两点:

  • 确保service_new_one能处理所有来自service.domain.com的请求(比如根路径/的请求,而不只是/one)
  • 修改Ingress后,Ingress Controller会重新加载配置,可能有几秒的流量波动,建议在低峰期操作

修改后的配置如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress1-legacy
spec:
  rules:
  - host: service.domain.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: service_new_one
            port:
              number: 80

最后再提醒几个注意点:

  • 改完配置后,去Ingress Controller的日志里看看,确保配置加载成功了
  • 测试下各种请求(比如POST、带参数的GET),确保重定向或后端映射都正常
  • 如果用HTTPS,记得新域名的证书要包含service.domain.com,或者用通配符证书

内容的提问来源于stack exchange,提问作者Markward Schubert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:44:39