【Kubernetes】k8s中容器之间、pod之间如何进行网络通信?

目录

  • Pod
  • Kubernetes 网络模型
  • 同一Pod上的容器之间进行通信
  • 同一Node上的不同Pod之间进行通信
  • 不同Node上的Pod之间进行通信
  • Service
  • 参考


Pod

首先来回顾一下Pod:

Pod 是用于构建应用程序的最小可部署对象。单个 Pod 代表集群中正在运行的工作负载,并封装一个或多个 Docker 容器、任何所需的存储以及唯一的 IP 地址


Kubernetes 网络模型

集群中每一个 Pod 都会获得自己的、 独一无二的 IP 地址。一个Pod里的一组容器共享相同的IP地址。

Kubernetes 强制要求所有网络设施都满足以下基本要求(从而排除了有意隔离网络的策略):

  • Pod 能够与所有其他节点上的 Pod 通信, 且不需要网络地址转译(NAT)
  • 节点上的代理(比如:系统守护进程、kubelet)可以和节点上的所有 Pod 通信。

考虑到这些限制,我们剩下四个不同的网络问题需要解决:

  • 容器到容器网络
  • Pod 到 Pod 网络
  • Pod 到服务网络
  • 互联网到服务网络

同一Pod上的容器之间进行通信

通常,我们将虚拟机中的网络通信视为直接与以太网设备交互。默认情况下,Linux 将每个进程分配给根网络命名空间,以提供对外部世界的访问。如下图所示:
在这里插入图片描述

Pod 被建模为一组共享网络命名空间的 Docker 容器。Pod 中的容器都具有通过分配给 Pod 的网络命名空间分配的相同 IP 地址和端口空间,并且可以通过 localhost 找到彼此,因为它们驻留在同一命名空间中。

根本原因是使用Docker的一种网络模型:–net=container 能够让同一个Pod内的多个docker容器相互通信。

container模式指定新创建的Docker容器和已经存在的一个容器共享一个网络命名空间,也就是说新创建的Docker容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。

在k8s中每个Pod容器有一个pause容器,它拥有独立的网络命名空间,在Pod内启动Docker容器时候使用 –net=container就可以让当前Docker容器加入到Pod容器拥有的网络命名空间(pause容器)。


同一Node上的不同Pod之间进行通信

从 Pod 的角度来看,它存在于自己的以太网命名空间中。不同的Pod存在于不同的网络命名空间里。
但是可以使用Linux虚拟以太网设备或由两个虚拟接口组成的veth对 将两个网络命名空间进行连接 。要连接 Pod 命名空间,我们可以将 veth 对的一侧分配给根网络命名空间,将另一侧分配给 Pod 的网络命名空间。然后使用网桥把两个虚拟网络组成为一个以太网。如下图所示:
在这里插入图片描述
在上面这个网络模型下,Pod之间是如何通信的呢?

  1. Pod 1 向其自己的以太网设备发送数据包eth0,该设备可作为 Pod 的默认设备。对于 Pod 1,eth0通过虚拟以太网设备连接到根命名空间veth0
  2. 网桥cbr0配置有veth0连接到它的网段。一旦数据包到达网桥,网桥就会使用 ARP 协议解析将数据包发送到的正确网段
  3. 当数据包到达虚拟设备veth1时,它会直接转发到 Pod 2 的命名空间以及该命名空间内的设备eth0

不同Node上的Pod之间进行通信

同样会用到虚拟接口和网桥。

在这里插入图片描述

  1. 数据包首先通过 Pod 1 的以太网设备发送,该设备与根命名空间 中的虚拟以太网设备配对。最终,数据包到达根命名空间的网桥
  2. ARP 将在网桥处失败,因为没有设备连接到具有数据包正确 MAC 地址的网桥。发生故障时,网桥将数据包从默认路由(根命名空间的eth0设备)发送出去。此时,路由离开节点并进入网络
  3. 我们现在假设网络可以根据分配给节点 的 CIDR 块将数据包路由到正确的节点。数据包进入目标节点(在 VM 2 上)的根命名空间eth0,并通过网桥路由到正确的虚拟以太网设备
  4. 最后,路由通过驻留在 Pod 4 命名空间内的虚拟以太网设备对完成

一般来说,每个节点都知道如何将数据包传递到在其内运行的 Pod。一旦数据包到达目标节点,数据包的流动方式与在同一节点上的 Pod 之间路由流量的方式相同。


Service

我们要知道,Pod的IP地址不持久,会随着扩展或缩小、应用程序崩溃或节点重启而出现和消失。哪怕重启一个Pod,它的IP也可能和前一次不一样。

所以Kubernetes 里使用Service来管理一组 Pod 的状态,允许我们跟踪一组随时间动态变化的 Pod 的IP 地址。Service充当 Pod 的抽象,并将单个虚拟 IP 地址分配给一组 Pod 的IP 地址

任何发送到服务虚拟 IP 的流量都将被路由到与该虚拟 IP 关联的 Pod 集。这允许与 Service 关联的 Pod 集随时更改 ,只要虚拟IP不改,客户端就感觉不到Pod的变化。

创建新的 Kubernetes Service时,系统会创建一个新的虚拟 IP(也称为集群 IP)。集群内的任何位置,寻址到虚拟 IP 的流量都将负载均衡到与Service关联的一组Pod。实际上,Kubernetes 会自动创建并维护一个分布式集群内负载均衡器,该均衡器将流量分配到Service关联的健康 Pod。


参考

https://sookocheff.com/post/kubernetes/understanding-kubernetes-networking-model/
https://kubernetes.io/zh-cn/docs/concepts/services-networking/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/504638.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SpringBoot】测试单元使用多线程

📝个人主页:五敷有你 🔥系列专栏:SpringBoot ⛺️稳重求进,晒太阳 问题产生 今天学习了乐观锁,但在测试单元执行多线程的时候出现了问题,多线程并没有直接结果 在控制台没有任何输出…

CSRF跨站请求伪造(一)

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 1、CSRF简介 CSRF,全称:Cross-S…

小程序配置服务器域名的操作步骤(入门级)

将详细列出小程序配置服务器域名的操作步骤: 服务器选购推荐:腾讯云轻量服务器 点击以下任一云产品链接,跳转后登录,自动享有所有云产品优惠权益: 经过笔者亲测,强烈推荐腾讯云轻量应用服务器作为游戏服…

计算机网络_2.1 物理层概述

2.1 物理层概述 一、物理层要实现的功能二、物理层接口特性 B站 深入浅出计算机网络 2.1物理层概述 一、物理层要实现的功能 物理层要实现的功能就是在各种传输媒体上传输比特0和1,进而给上面的数据链路层提供透明传输比特流的服务。 数据链路层“看不见”&#xff…

ssm172旅行社管理系统的设计与实现

** 🍅点赞收藏关注 → 私信领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅** 一 、设计说明 1.1 研究…

RDD算子介绍

1. RDD算子 RDD算子也叫RDD方法,主要分为两大类:转换和行动。转换,即一个RDD转换为另一个RDD,是功能的转换与补充,比如map,flatMap。行动,则是触发任务的执行,比如collect。所谓算子…

python自动化之项目架构搭建与思路讲解(第二天)

1.自动化测试的概念 自动化测试是指使用自动化工具和脚本来执行测试任务,以验证软件或系统的正确性和稳定性。它可以提高测试的效率和准确性,并节约时间和成本。 2.自动化脚本编写的思路 xmind文档如有需要,可在资源里自行下载 3.项目代码工程创建 lib :基本代码库包 …

像用Excel一样用Python:pandasGUI

文章目录 启动数据导入绘图 启动 众所周知,pandas是Python中著名的数据挖掘模块,以处理表格数据著称,并且具备一定的可视化能力。而pandasGUI则为pandas打造了一个友好的交互窗口,有了这个,就可以像使用Excel一样使用…

基于SpringBoot多模块项目引入其他模块时@Autowired无法注入

基于SpringBoot多模块项目引入其他模块时Autowired无法注入 一、问题描述1、解决方案 一、问题描述 启动Spring Boot项目时报 Could not autowire. No beans of ‘xxxxxxxx’ type found. 没有找到bean的实例,即spring没有实例化对象,也就无法根据配置文…

AcWing 788. 逆序对的数量 解题思路及代码

先贴个题目: 以及原题链接: 788. 逆序对的数量 - AcWing题库https://www.acwing.com/problem/content/790/ 这题也是板子题,就是对归并排序的衍生,我们先分析下如果用归并排序对排序区间进行二分的话,逆序对可能出现的…

回溯是怎么回事(算法村第十八关青铜挑战)

组合 77. 组合 - 力扣(LeetCode) 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输入:n 4, k 2 输出: [[2,4],[3,4],[2,3],[1,2],[1,3],…

3.3 序列式容器-deque、stack、queue、heap、priority_queue

deque 3.1定义 std::deque(双端队列)是C标准模板库(STL)中的一种容器,表示双端队列数据结构。它提供了在两端高效地进行插入和删除操作的能力。与vector的连续线性空间类似,但有所不同,deque动…