Kubernetes 中的 Pod 是如何通信的

Kubernetes 中的 Pod 是如何通信的

我有一个关于 Kubernetes 网络的问题。

我知道在Docker swarm中如果我想在不同的服务器上运行不同的容器,我需要创建一个覆盖网络,然后所有容器(来自所有服务器)将连接到这个网络并且它们可以相互通信(例如,我可以从容器A ping 到容器B)。

我猜 Kubernetes 中没有覆盖网络 - 但有另一种解决方案。例如,我想在 2 台服务器上创建 2 个 Linux 容器(服务器 1:ubuntu,服务器 2:centos7),那么如果没有覆盖网络,pod 之间如何相互通信呢?

还有一个疑问 - 我可以使用 kubernetes 创建一个由 Windows 和 Linux 机器组成的集群吗?我的意思是,一个多平台 kubernetes,其中所有的 pod 都可以相互通信。

答案1

该主题很容易占据多页,因此,让我尝试解决基础知识,同时提供进一步阅读的指针。


要了解容器/pod 在 Kubernetes 中如何通信,我们必须了解什么是podservice

Kubernetes pod- Kubernetes pod 是一组一起部署在同一主机上的容器。

Kubernetes 服务- 它可以定义为 pod 顶部的抽象,提供可供 pod 访问的单个 IP 地址和 DNS 名称。


同一个 pod 内的容器之间的通信。

同一容器内共享 IP 地址和端口空间,可以通过本地主机相互找到,因此不需要特定的网络配置。 请注意,给定 pod 中的所有容器都安排在同一个 Kubernetes 节点上。

Pod 之间的通信。

Pod 之间的通信是通过 kubernetes 服务完成的。一旦为给定的 Pod 定义了服务,其他 Pod 就可以使用服务名称找到它。

为了在 Docker Swarm 和 Kubernates 之间进行模拟:为了配置网络,在 Docker Swarm 中您将定义网络,而在 Kubernetes 中您将定义服务。

在 Kubernetes 上运行混合(Windows/Linux)负载。

只要你将负载安排在特定节点上,即 Linux 节点上的 Linux 容器和 Windows 节点上的 Windows 容器,这是可能的。请参阅此问题的答案问题了解更多详细信息。

答案2

  1. Kubernetes 中有覆盖网络。例如:Calico。阅读更多这里

  2. 在 Kubernetes 中,我们创建 Pod,Pod 中有运行容器镜像的容器 - 可以是 Linux 或 Windows 镜像。因此 Kubernetes 可以运行多平台容器。

答案3

Kubernetes 具有覆盖网络 Kubernetes 定义了一种称为容器网络接口 (CNI) 的网络模型,但实际实现依赖于网络插件。网络插件负责为 Pod 分配 Internet 协议 (IP) 地址,并使 Pod 能够在 Kubernetes 集群内相互通信。Kubernetes 有多种网络插件,但本文将使用 Flannel。Flannel 非常简单,默认使用虚拟可扩展 LAN (VXLAN) 覆盖。

在 Kubernetes 网络环境中,您经常会听到覆盖网络。虽然这听起来很复杂,但覆盖网络只是涉及网络流量的另一层封装。例如,Flannel 网络插件从 pod 获取流量并将其封装在 VXLAN 协议中。本文深入探讨了这种封装的工作原理以及流量在线路上的表现方式。

相关内容