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

私有网络K8s集群部署Ingress Nginx Controller遇External IP Pending问题求助

问题:Ingress Nginx Controller的LoadBalancer服务External IP处于Pending状态

集群环境与问题描述

  • K8s集群:控制平面节点IP为192.168.1.66,仅包含一个worker节点(IP 192.18.1.67),所有节点无公网IP
  • 部署状态:部署Ingress Nginx Controller至「创建Ingress控制器及准入控制器服务」步骤,发现ingress-nginx-controller服务的External IP始终处于<pending>状态

相关kubectl命令输出

服务列表输出

bino@corobalap  ~/k8nan/ingresnginx/nginx-ingress-controller/manifests   main  kubectl --namespace ingress-nginx get services -o wide 
NAME                                 TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE     SELECTOR
ingress-nginx-controller             LoadBalancer   10.100.42.100   &lt;pending&gt;     80:30482/TCP,443:31697/TCP   6m32s   app.kubernetes.io/component=controller,app.kubernetes.io/instance=ingress-nginx,app.kubernetes.io/name=ingress-nginx
ingress-nginx-controller-admission   ClusterIP      10.106.242.13   &lt;none&gt;        443/TCP                      6m32s   app.kubernetes.io/component=controller,app.kubernetes.io/instance=ingress-nginx,app.kubernetes.io/name=ingress-nginx

服务详情输出

bino@corobalap  ~/k8nan  kubectl describe service ingress-nginx-controller --namespace ingress-nginx
Name:                     ingress-nginx-controller
Namespace:                ingress-nginx
Labels:                   app.kubernetes.io/component=controller
                          app.kubernetes.io/instance=ingress-nginx
                          app.kubernetes.io/name=ingress-nginx
Annotations:              &lt;none&gt;
Selector:                 app.kubernetes.io/component=controller,app.kubernetes.io/instance=ingress-nginx,app.kubernetes.io/name=ingress-nginx
Type:                     NodePort
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.100.42.100
IPs:                      10.100.42.100
Port:                     http  80/TCP
TargetPort:               http/TCP
NodePort:                 http  30482/TCP
Endpoints:                10.244.1.11:80
Port:                     https  443/TCP
TargetPort:               https/TCP
NodePort:                 https  31697/TCP
Endpoints:                10.244.1.11:443
Session Affinity:         None
External Traffic Policy:  Local
Events:
  Type    Reason  Age   From                Message
  ----    ------  ----  ----                -------
  Normal  Type    54m   service-controller  LoadBalancer -&gt; NodePort

解决方法

原因

LoadBalancer类型服务依赖云厂商提供的负载均衡器资源,私有集群无此支持,因此K8s自动将服务降级为NodePort类型(从事件日志LoadBalancer -> NodePort可确认)。

操作方案

  • 临时访问方案:使用NodePort直接访问
    直接通过worker节点IP+NodePort端口访问Ingress Controller:

    • HTTP:http://192.18.1.67:30482
    • HTTPS:https://192.18.1.67:31697
  • 永久调整:改为NodePort类型部署
    修改Ingress Controller的服务yaml文件,将spec.type从LoadBalancer改为NodePort,然后重新执行部署命令:

    kubectl apply -f <修改后的yaml文件路径>
    
  • 进阶方案:部署MetalLB实现本地LoadBalancer
    若需要为服务分配固定内网IP,可部署MetalLB(私有集群的负载均衡器实现):

    1. 确保集群CNI支持strictARP(如Calico需修改配置)
    2. 安装MetalLB的CRD和控制器组件
    3. 配置MetalLB的IP地址池(使用集群内网中未被占用的IP段,例如192.168.1.200-192.168.1.210)
    4. 重新部署Ingress Controller服务,此时External IP会被MetalLB分配为配置池内的可用IP

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:57:16