Kubernetes:Service IP 和 pod IP 之间的关系

Den*_*boy 6 networking kubernetes

我试图更多地了解 Kubernetes 网络。这就是为什么我在谷歌云中部署了一个集群并检查了网络:gcloud container clusters describe cluster0 | grep -i cidr

clusterIpv4Cidr: 10.20.0.0/14        # --cluster-cidr
nodeIpv4CidrSize: 24
servicesIpv4Cidr: 10.23.240.0/20     # --service-cluster-ip-range
Run Code Online (Sandbox Code Playgroud)

所以第一个是针对 pod IP 的:

First IP: 10.20.0.1
Last IP: 10.23.255.254
Run Code Online (Sandbox Code Playgroud)

服务

First IP: 10.23.240.1
First IP: 10.23.255.254
Run Code Online (Sandbox Code Playgroud)

pod 范围包含服务IP 范围总是这样吗?他们使用相同的网络层吗?

小智 5

Kubernetes 网络是如何构建的,这是一个很长的故事……

Kubernetes 假设 pod 可以与其他 pod 通信,而不管它们落在哪个主机上。每个 pod 都有自己的 IP 地址,因此您无需在 pod 之间显式创建链接,并且几乎不需要处理将容器端口映射到主机端口的问题。这创建了一个干净的、向后兼容的模型,从端口分配、命名、服务发现、负载平衡、应用程序配置和迁移的角度来看,Pod 可以像 VM 或物理主机一样对待。

Kubernetes 使用私有和公共可访问 IP 地址。目前未提及公共 IP 地址。

Kubernetes 使用私有地址池来提供集群内部的通信。每个 Pod 和服务都有一个私有 IP 地址。Kubernetes 中的服务是虚拟的——它们由 NAT 创建,而 iptables 创建从寻址服务到 pod 的端口重定向。

集群内部通信的基本规则:

  • 所有容器都可以在没有 NAT 的情况下与所有其他容器通信
  • 所有节点都可以在没有 NAT 的情况下与所有容器通信(反之亦然),容器认为自己的 IP 与其他人认为的 IP 相同

关于您的问题:Kubernetes官方网络 文档指出:

--service-cluster-ip-range ipNet -  A CIDR notation IP range from which to assign service cluster IPs. This must not overlap with any IP ranges assigned to nodes for pods.
Run Code Online (Sandbox Code Playgroud)

因此,不建议将服务 IP 设置在与 pod 使用的范围相同的范围内。

我强烈建议观看有关 Kubernetes 网络的视频 或查看插图指南