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

裸金属Kubernetes集群部署NGINX Ingress控制器遇External-IP获取问题

解决Nutanix裸金属Kubernetes集群NGINX Ingress控制器无External-IP问题

1. 先清理冲突部署

你同时应用了cloud和baremetal两种环境的Ingress配置,会导致资源冲突,先清理现有Ingress相关资源:

kubectl delete namespace ingress-nginx

若有残留RBAC资源,额外执行:

kubectl delete clusterrole ingress-nginx
kubectl delete clusterrolebinding ingress-nginx

2. 裸金属集群的可行解决方案

裸金属K8s集群没有云厂商提供的负载均衡器,默认LoadBalancer类型Service无法自动获取External-IP,以下是三种实用方案:

方案一:部署MetalLB模拟负载均衡器(推荐)

MetalLB可为裸金属集群的LoadBalancer类型Service分配指定网段的External-IP:

  1. 创建MetalLB命名空间:
    kubectl create namespace metallb-system
    
  2. 部署MetalLB控制器(确保镜像版本与你的K8s版本兼容,如v0.13.x适配K8s 1.21+)
  3. 配置IP地址池与L2广告:
    创建metallb-config.yaml(替换为Nutanix集群中未被占用、可外部访问的IP段):
    apiVersion: metallb.io/v1beta1
    kind: IPAddressPool
    metadata:
      name: default
      namespace: metallb-system
    spec:
      addresses:
      - 192.168.1.100-192.168.1.200 # 替换为你的可用IP段
    ---
    apiVersion: metallb.io/v1beta1
    kind: L2Advertisement
    metadata:
      name: default
      namespace: metallb-system
    spec:
      ipAddressPools:
      - default
    
    执行部署:
    kubectl apply -f metallb-config.yaml
    
  4. 重新部署裸金属版NGINX Ingress控制器(Service类型为LoadBalancer),此时Ingress Service会自动从MetalLB获取External-IP。

方案二:改用NodePort类型暴露Ingress控制器

无需负载均衡时,可通过节点IP+端口访问:

  1. 部署Ingress控制器后,修改Service类型:
    kubectl patch service ingress-nginx-controller -n ingress-nginx -p '{"spec":{"type":"NodePort"}}'
    
  2. 查看分配的NodePort:
    kubectl get service ingress-nginx-controller -n ingress-nginx
    
    之后用任意集群节点IP+NodePort访问Ingress规则对应的服务。

方案三:使用HostNetwork模式运行Ingress控制器

让Ingress直接使用节点的80/443端口:

  1. 编辑Ingress控制器的Deployment:
    kubectl edit deployment ingress-nginx-controller -n ingress-nginx
    
    在spec.template.spec下添加:
    hostNetwork: true
    dnsPolicy: ClusterFirstWithHostNet
    
  2. 保存退出后,控制器重启,直接用运行Ingress的节点IP访问80/443端口即可。

3. 验证部署结果

执行命令查看Ingress Service状态:

kubectl get service ingress-nginx-controller -n ingress-nginx
  • MetalLB方案:EXTERNAL-IP字段会显示分配的IP
  • NodePort方案:PORT(S)字段会显示80:xxxx/TCP格式的端口
  • HostNetwork方案:直接用节点IP访问80/443端口测试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 14:17:40