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

Kubernetes:LoadBalancer与Ingress——集群对外暴露IP是哪一个?

问题:Kubernetes Service配置中哪个IP暴露到集群外部?

用户提问:

将以下是一段Kubernetes的Service配置代码,请问哪个IP会暴露到Kubernetes集群外部?是78.11.24.19还是146.148.47.155?我希望理解此处LoadBalancer和Ingress的相关机制。

Service配置代码:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376
  clusterIP: 10.0.171.239
  loadBalancerIP: 78.11.24.19
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
      - ip: 146.148.47.155

解答

首先直接给出结论:暴露到Kubernetes集群外部的是146.148.47.155。下面我会详细拆解两个IP的作用,以及相关的LoadBalancer和Ingress机制:

1. 两个IP的核心区别

  • spec.loadBalancerIP: 78.11.24.19:这是你手动指定的「期望负载均衡器IP」,本质是向云服务商发起的一个“预约请求”。它能否生效完全依赖云服务商的支持:

    • 如果你的云服务商允许预留/指定公网IP,且这个IP是你预先预留的可用地址,那么最终生效的IP会和这个值一致;
    • 如果云服务商不支持该功能,或者这个IP已被占用,云服务商就会自动分配一个可用的公网IP,也就是配置里的146.148.47.155。
  • status.loadBalancer.ingress.ip: 146.148.47.155:这是实际生效的外部访问IP,是Kubernetes从云服务商处获取到的、已经绑定到负载均衡器的真实公网地址。所有外部用户要访问你的服务,都需要通过这个IP发起请求。

2. LoadBalancer类型Service的工作流程

当你创建type: LoadBalancer的Service时,整个流程是这样的:

  1. Kubernetes控制器向云服务商(如AWS、GCP、Azure)发送请求,要求创建一个外部负载均衡器;
  2. 云服务商完成负载均衡器的创建,并分配一个公网IP(或使用你指定的IP);
  3. 云服务商的负载均衡器会将外部流量转发到Service的clusterIP(这里是10.0.171.239);
  4. 集群内部的kube-proxy组件负责将clusterIP的流量转发到匹配selector: app: MyApp的Pod上,最终到达Pod的targetPort: 9376;
  5. Kubernetes会将云服务商分配的真实公网IP更新到Service的status字段中,也就是status.loadBalancer.ingress.ip,这才是外部能访问的真实地址。

3. 注意:此处的"Ingress"与Ingress资源的区别

很多人会混淆这里的ingress字段和独立的Kubernetes Ingress资源,其实两者完全不同:

  • Service状态里的status.loadBalancer.ingress只是一个状态记录字段,用来存储负载均衡器的外部接入地址(可以是IP或域名);
  • 而独立的Ingress资源是一个七层路由组件,它可以通过一个公网IP/域名,将不同路径的请求转发到集群内部不同的Service上,相当于一个集中式的反向代理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:59:07