如何通过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:可选调度策略,优先将请求分配给连接数最少的节点;如果希望主节点正常时绝对优先,也可以保留默认轮询(主节点恢复后会自动回到调度队列)。
注意事项
- 确保你的Nginx Ingress Controller版本支持上述注解,主流版本均兼容。
- 若主从节点服务不在同一命名空间,需使用
<服务名>.<命名空间>.svc.cluster.local的完整域名指定。 - 如需更精细的健康检查,可配合
nginx.ingress.kubernetes.io/health-check-path注解,或在upstream中配置health_check指令(需Nginx Plus版本)。
内容的提问来源于stack exchange,提问作者Prateek Agrawal
相关产品推荐
相关产品推荐

