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

关于IngressNginx移除LB终结器及Hetzner下Service自动更新LB状态的问询

问题1:移除Ingress-Nginx LoadBalancer服务的负载均衡清理终结器

默认设置原因

service.kubernetes.io/load-balancer-cleanup是Kubernetes默认给LoadBalancer类型Service添加的终结器,作用是删除Service时自动清理关联的云厂商负载均衡资源,避免遗留资源浪费。但对于需要保留负载均衡(比如固定IP,避免重新配置DNS)的场景,这个逻辑确实不适用。

解决方法

方法1:安装Ingress-Nginx时通过Helm配置禁用

修改Helm的values.yaml文件,在控制器服务的注解中添加禁用清理的配置:

controller:
  service:
    annotations:
      service.kubernetes.io/load-balancer-cleanup-disabled: "true"

然后执行安装或升级命令:

helm upgrade --install ingress-nginx ingress-nginx/ingress-nginx -f values.yaml -n ingress-nginx --create-namespace

方法2:已安装后手动修改Service

执行命令编辑Service:

kubectl edit service ingress-nginx-controller -n ingress-nginx

在文件中找到finalizers字段,删除- service.kubernetes.io/load-balancer-cleanup这一行,同时建议在metadata.annotations中添加上述禁用注解,防止后续该终结器被重新添加。


问题2:Hetzner平台配置Service自动更新LoadBalancer状态

Hetzner云控制器管理器健康检查注解中文说明

以下是Hetzner云控制器管理器核心健康检查相关注解的中文解释:

  • load-balancer.hetzner.cloud/health-check-interval: 健康检查的时间间隔,单位为秒,默认值为5
  • load-balancer.hetzner.cloud/health-check-timeout: 健康检查的超时时间,单位为秒,默认值为2
  • load-balancer.hetzner.cloud/health-check-retries: 健康检查失败后重试的次数,默认值为3
  • load-balancer.hetzner.cloud/health-check-port: 健康检查使用的端口,默认使用Service的目标端口
  • load-balancer.hetzner.cloud/health-check-protocol: 健康检查使用的协议,可选值为HTTP、HTTPS、TCP,默认值为TCP
  • load-balancer.hetzner.cloud/health-check-http-path: 当协议为HTTP/HTTPS时,健康检查的请求路径,默认值为/

配置步骤及排查

  1. 确保Hetzner云控制器管理器已正确部署
    检查Pod运行状态:

    kubectl get pods -n kube-system | grep hcloud-cloud-controller-manager
    

    若未部署,需先完成云控制器管理器的安装配置。

  2. 正确配置Service注解
    注解必须添加在Ingress-Nginx的LoadBalancer类型Service上,示例配置:

    apiVersion: v1
    kind: Service
    metadata:
      name: ingress-nginx-controller
      namespace: ingress-nginx
      annotations:
        load-balancer.hetzner.cloud/health-check-interval: "15"
        load-balancer.hetzner.cloud/health-check-protocol: "HTTP"
        load-balancer.hetzner.cloud/health-check-http-path: "/healthz"
    spec:
      type: LoadBalancer
      ports:
      - name: http
        port: 80
        targetPort: http
      - name: https
        port: 443
        targetPort: https
      selector:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/instance: ingress-nginx
        app.kubernetes.io/component: controller
    
  3. 注解不生效的排查步骤

    • 查看云控制器管理器的日志,检查是否有注解解析错误:
      kubectl logs -n kube-system <hcloud-cloud-controller-manager-pod-name>
      
    • 登录Hetzner控制台,查看负载均衡的健康检查配置是否与注解一致,若不一致,尝试重启云控制器管理器Pod:
      kubectl rollout restart deployment hcloud-cloud-controller-manager -n kube-system
      
    • 确认Service的status.loadBalancer字段是否正常关联Hetzner负载均衡IP,若未关联,检查云控制器管理器的权限配置是否正确。
  4. 删除LB后Service状态更新
    配置正确的健康检查后,Hetzner云控制器管理器会同步负载均衡的状态到Service的status字段。若手动删除了Hetzner控制台中的负载均衡,云控制器管理器会将Service的status.loadBalancer.ingress字段清空,标记Service未关联有效负载均衡。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:31:02