有人可以帮我了解列出服务时看到的群集IP的IP地址。
答案 0 :(得分:1)
一个很好的问题,可以开始学习新东西(也对我来说):
在运行于kube-proxy
的K8s集群中,默认情况下,您的担忧与iptables mode
有关。
Kubernetes集群中的每个节点都运行kube-proxy。 Kube-proxy负责实施一种形式的服务虚拟IP。
在这种模式下,kube-proxy监视Kubernetes控制平面以添加和删除Service和Endpoint对象。对于每个服务,它都安装iptables规则,该规则捕获到服务的clusterIP和端口的流量,并将该流量重定向到服务的后端集之一。对于每个Endpoint对象,它会安装iptables规则,该规则会选择一个后端Pod。
如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
在集群初始化期间,您可以使用--service-cidr
字符串参数Default: "10.96.0.0/12"
Kubernetes从群集的可用服务IP地址池中为每个新创建的服务(ClusterIP)分配稳定,可靠的IP地址。 Kubernetes还通过添加DNS条目将主机名分配给ClusterIP。 ClusterIP和主机名在群集内是唯一的,并且在服务的整个生命周期中都不会更改。如果从群集的配置中删除了服务,Kubernetes仅释放ClusterIP和主机名。您可以使用ClusterIP或服务的主机名来访问运行您的应用程序的健康Pod。
Kubernetes从为节点上的Pod保留的地址范围中,为Pod的网络名称空间中的虚拟网络接口分配IP地址(Pod IP)。此地址范围是分配给Pods群集的IP地址范围的子集,您可以在创建群集时对其进行配置。
资源:
希望这对您有帮助
答案 1 :(得分:0)
集群IP是可以从集群内部访问服务的地址。除非您执行某种SSH隧道操作,否则您将无法从外部网络ping群集IP。该IP由k8s自动分配,并且可能可以定义一个范围(我不确定,我也不清楚为什么需要这样做)。