Kubernetes中集群IP的用途是什么

时间:2019-10-03 19:14:25

标签: service kubernetes

有人可以帮我了解列出服务时看到的群集IP的IP地址。

  1. 什么是群集IP(不是服务类型,而是实际IP)?
  2. 如何使用?
  3. 它来自哪里?
  4. 我可以定义群集IP的范围吗(就像对pod网络一样)?

2 个答案:

答案 0 :(得分:1)

一个很好的问题,可以开始学习新东西(也对我来说):

在运行于kube-proxy的K8s集群中,默认情况下,您的担忧与iptables mode有关。

Kubernetes集群中的每个节点都运行kube-proxy。 Kube-proxy负责实施一种形式的服务虚拟IP。

  

在这种模式下,kube-proxy监视Kubernetes控制平面以添加和删除Service和Endpoint对象。对于每个服务,它都安装iptables规则,该规则捕获到服务的clusterIP和端口的流量,并将该流量重定向到服务的后端集之一。对于每个Endpoint对象,它会安装iptables规则,该规则会选择一个后端Pod。

  1. Node components kube-proxy

    • kube-proxy是一个网络代理,它在集群中的每个节点上运行,实现了Kubernetes Service概念的一部分。
    • kube-proxy维护节点上的网络规则。这些网络规则允许从群集内部或外部的网络会话与Pod进行网络通信。
    • kube-proxy使用操作系统数据包过滤层(如果有)并且可用。否则,kube-proxy会转发流量本身。

here所述:

  

由于这些iptables规则,每当一个数据包发往服务IP时,它就是DNATed(DNAT =目的地网络地址转换),这意味着目标IP从服务IP更改为随机选择的端点pod IP之一。 iptables。这样可以确保负载在后端容器之间平均分配。

     

发生此DNAT时,此信息存储在conntrack中-Linux连接跟踪表(存储iptables已完成的5元组转换:协议,srcIP,srcPort,dstIP,dstPort)。这样,当回复返回时,它可以取消DNAT,这意味着将源IP从Pod IP更改为Service IP。这样,客户端就不会知道如何在后台处理数据包流。

也有不同的模式,您可以找到更多信息here

  1. 在集群初始化期间,您可以使用--service-cidr字符串参数Default: "10.96.0.0/12"

    • ClusterIP:分配给服务的IP地址
  

Kubernetes从群集的可用服务IP地址池中为每个新创建的服务(ClusterIP)分配稳定,可靠的IP地址。 Kubernetes还通过添加DNS条目将主机名分配给ClusterIP。 ClusterIP和主机名在群集内是唯一的,并且在服务的整个生命周期中都不会更改。如果从群集的配置中删除了服务,Kubernetes仅释放ClusterIP和主机名。您可以使用ClusterIP或服务的主机名来访问运行您的应用程序的健康Pod。

  • Pod IP:分配给给定Pod的IP地址。
      

    Kubernetes从为节点上的Pod保留的地址范围中,为Pod的网络名称空间中的虚拟网络接口分配IP地址(Pod IP)。此地址范围是分配给Pods群集的IP地址范围的子集,您可以在创建群集时对其进行配置。

资源:

希望这对您有帮助

答案 1 :(得分:0)

集群IP是可以从集群内部访问服务的地址。除非您执行某种SSH隧道操作,否则您将无法从外部网络ping群集IP。该IP由k8s自动分配,并且可能可以定义一个范围(我不确定,我也不清楚为什么需要这样做)。