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

如何通过Kubernetes Ingress实现主从节点故障转移且保持请求路径为/

实现主从节点故障自动切换的Ingress配置

原生Kubernetes Ingress资源本身不支持你想要的优先级规则,但可以通过Nginx Ingress Controller的自定义配置来实现主节点宕机时自动切到从节点的需求,且保持请求路径始终为/。

具体配置方案

直接修改你的Ingress,通过添加Nginx专属注解定义包含主从服务的上游集群,并配置故障切换逻辑:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    # 定义包含主从节点的上游服务器集群
    nginx.ingress.kubernetes.io/server-snippet: |
      upstream backend_cluster {
        server master-node:http max_fails=3 fail_timeout=30s;
        server slave-1-node:http max_fails=3 fail_timeout=30s;
        server slave-2-node:http max_fails=3 fail_timeout=30s;
        least_conn; # 可选,按最少连接数调度,默认轮询,主节点正常时会优先承接请求
      }
    # 配置故障切换规则,指定触发切换的场景
    nginx.ingress.kubernetes.io/configuration-snippet: |
      proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
      proxy_pass http://backend_cluster;
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: / 
        backend:
          # 此处填写任意存在的服务即可,实际转发逻辑会被上方注解覆盖
          serviceName: master-node
          servicePort: http

关键配置解释

  • upstream backend_cluster:把主从节点纳入同一个上游集群,max_fails=3表示连续3次请求失败后标记节点不可用,fail_timeout=30s表示30秒后重新检测节点状态。
  • proxy_next_upstream:明确触发故障切换的场景,覆盖了超时、常见错误状态码等情况,确保主节点不可用时自动转请求到从节点。
  • least_conn:可选调度策略,优先将请求分配给连接数最少的节点;如果希望主节点正常时绝对优先,也可以保留默认轮询(主节点恢复后会自动回到调度队列)。

注意事项

  1. 确保你的Nginx Ingress Controller版本支持上述注解,主流版本均兼容。
  2. 若主从节点服务不在同一命名空间,需使用<服务名>.<命名空间>.svc.cluster.local的完整域名指定。
  3. 如需更精细的健康检查,可配合nginx.ingress.kubernetes.io/health-check-path注解,或在upstream中配置health_check指令(需Nginx Plus版本)。

内容的提问来源于stack exchange,提问作者Prateek Agrawal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:35:19