k8s之LoadBalancer Service 解析

Kubernetes LoadBalancer Service 解析:IP与端口详解

服务类型与IP解析

  • Service 是 Kubernetes 中的资源类型,用来将一组 Pod 的应用作为网络服务公开。每个 Pod 都有自己的 IP,但是这个 IP 的生命周期与 Pod 生命周期一致,也就是说 Pod 销毁后这个 IP 也就无效了(也可能被分配给其他的 Pod 使用)。而 Service 的 IP(ClusterIP) 则是在创建之后便不会改变,Service 与 Pod 之前通过 userspace 代理、iptables 和 ipvs 代理 等手段关联。
  • LoadBalancer 是 Service 四种类型中的一种,其他三种是 ClusterIP、NodePort、ExternalName。
  • LoadBalancer 的工作需要搭配第三方的负载均衡器来完成。当我们安装 Ingress 控制器时,会创建一个类型为 LoadBalancer 的 Service。新创建的 Service 的 EXTERNAL-IP 状态是 pending,假如没有负载均衡器的话,会一直处于 pending 状态
  1. Cluster IP (10.233.50.2):

    • 这是服务在集群内部的虚拟IP地址
    • 集群内的其他Pod可以通过这个IP访问该服务
    • 自动分配且在服务生命周期内保持不变
  2. External IP (显示为 <pending>):

    • 对于LoadBalancer类型的服务,这是云提供商分配的外部IP
    • 在自建Kubernetes集群(如使用MetalLB)中,可能需要额外配置才会分配
    • 当前状态为<pending>表示尚未分配外部IP

端口类型解析

服务暴露了多个端口,每种端口有不同的含义:

  1. Service Port (如9091/TCP):

    • 服务在Cluster IP上暴露的端口
    • 集群内部访问时使用的端口
  2. TargetPort (如9091/TCP):

    • 实际Pod上应用程序监听的端口
    • 流量最终会被转发到这个端口
  3. NodePort (如19650/TCP):

    • 当服务类型为NodePort或LoadBalancer时,Kubernetes会在每个节点上开放这个端口
    • 即使没有外部负载均衡器,也可以通过任何节点的IP+NodePort访问服务

端口映射关系

当前服务暴露了4个端口组:

9091:19650/TCP    # http服务
9090:30536/TCP    # grpc服务
9092:23589/TCP    # ws (WebSocket)服务
9093:20652/TCP    # metrics服务

每组格式为:ServicePort:NodePort/TCP

连接方式

集群内部连接

  1. 通过Cluster IP:

    http://10.233.50.2:9091      # http服务
    grpc://10.233.50.2:9090      # grpc服务
    ws://10.233.50.2:9092        # WebSocket服务
    http://10.233.50.2:9093      # metrics服务
    
  2. 通过服务DNS名 (在同一个命名空间):

    http://controller:9091
    

集群外部连接

  1. 通过NodePort (当外部IP未分配时):

    • 获取任意节点的IP地址
    • 使用对应的NodePort:
      http://<任一节点IP>:19650     # http服务
      grpc://<任一节点IP>:30536     # grpc服务
      ws://<任一节点IP>:23589       # WebSocket服务
      http://<任一节点IP>:20652     # metrics服务
      
  2. 通过LoadBalancer IP (当外部IP分配后):

    • 等待<pending>变为实际IP(如123.123.123.123)
    • 然后使用:
      http://123.123.123.123:9091
      grpc://123.123.123.123:9090
      

注意事项

  1. 如果ExternalTrafficPolicy设置为Cluster(当前配置),NodePort上的流量会经过kube-proxy的转发,可能会丢失原始客户端IP

  2. 如果设置为Local,则只有运行有服务Pod的节点才会响应NodePort请求,但可以保留客户端IP

  3. 在生产环境中,通常会配合Ingress控制器使用,而不是直接暴露多个NodePort

  4. 在云环境中,LoadBalancer IP分配通常需要几分钟时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值