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

如何将裸金属(Kubeadm) Kubernetes集群的Service暴露至外部并分配公网IP

裸金属Kubeadm集群暴露Service至外部的可行方案

1. MetalLB(负载均衡器)

MetalLB是裸金属K8s集群的标准负载均衡实现,专为解决裸金属环境下LoadBalancer类型Service无法分配外部IP的问题设计,支持直接配置公网IP池为服务分配独立公网IP。

  • 核心操作:
    1. 安装MetalLB后,配置IP地址池(填入你拥有的公网IP段)。
    2. 创建LoadBalancer类型的Nginx Service:
      apiVersion: v1
      kind: Service
      metadata:
        name: nginx-service
      spec:
        type: LoadBalancer
        selector:
          app: nginx
        ports:
          - protocol: TCP
            port: 80
            targetPort: 80
      
    3. MetalLB会自动从IP池中分配一个公网IP给该Service,集群外直接通过此IP访问Nginx。
  • 优势:自动管理IP分配,支持Layer2和BGP两种模式,适配不同网络架构,生产环境常用。

2. Ingress NGINX(Ingress控制器)

Ingress通过统一入口暴露多服务,可配合MetalLB为Ingress控制器分配公网IP,实现单IP多服务的域名/路径路由,也支持为Ingress绑定独立公网IP。

  • 核心操作:
    1. 部署Ingress NGINX控制器,将其Service设置为LoadBalancer类型(依赖MetalLB分配公网IP)。
    2. 创建Ingress资源指向Nginx Service:
      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: nginx-ingress
      spec:
        rules:
        - host: nginx.your-domain.com # 可将公网域名解析到Ingress的公网IP
          http:
            paths:
            - path: /
              pathType: Prefix
              backend:
                service:
                  name: nginx-service
                  port:
                    number: 80
      
    3. 集群外通过Ingress的公网IP或绑定的域名访问Nginx。
  • 优势:支持多服务共享一个公网IP,基于域名/路径分流,适合多服务暴露场景。

3. NodePort类型Service

直接将Service端口映射到集群节点的固定端口(范围30000-32767),集群外通过节点的公网IP+NodePort访问服务。若需要独立公网IP,可为节点分配专属公网IP。

  • 核心操作:
    1. 创建NodePort类型的Nginx Service:
      apiVersion: v1
      kind: Service
      metadata:
        name: nginx-nodeport
      spec:
        type: NodePort
        selector:
          app: nginx
        ports:
          - protocol: TCP
            port: 80
            targetPort: 80
            nodePort: 30080 # 可选,指定固定端口
      
    2. 集群外通过任意节点的公网IP:30080访问Nginx。
  • 注意:节点公网IP需开放对应NodePort的防火墙规则。

4. BGP路由(进阶方案)

若你的集群节点可对接公网BGP路由器,可通过配置BGP协议,将集群内Service的IP段(自定义或ClusterIP段)宣告到公网路由,实现公网直接访问Service IP,无需额外负载均衡组件。

  • 核心操作:在节点部署BGP客户端(如frrouting),与公网路由器建立邻居关系,宣告Service的IP段。
  • 优势:无额外组件性能损耗,适合具备网络运维能力的场景。

5. 端口转发(临时调试)

仅适合临时测试,通过kubectl将集群内Service端口转发到本地或外部机器的端口,集群外通过转发机器的公网IP访问。

  • 命令:
    kubectl port-forward service/nginx-service 8080:80 --address 0.0.0.0
    
  • 集群外通过执行命令的机器公网IP:8080访问Nginx,不适合生产环境。

内容的提问来源于stack exchange,提问作者Abdul Gaffoor Noor Basha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:05:19