首页 > 其他分享 >架构12-容器间网络

架构12-容器间网络

时间:2024-12-10 23:31:32浏览次数:8  
标签:容器 12 架构 IP 性能 网络 网卡 数据包

零、文章目录

架构12-容器间网络

1、Linux网络虚拟化

(1)网络通信模型
  • 网络通信模型概述
    • OSI 七层模型 和 TCP/IP 四层模型 是理解网络通信的基础。
    • Linux 网络协议栈(简称“网络栈”)呈现“逐层调用,逐层封装”的特点,类似于栈结构。
  • 网络协议栈的各层
    • 应用层:
      • 程序通过 Socket 编程接口 与内核空间的网络协议栈通信。
      • Socket 从 BSD Socket 发展而来,是通用的网络编程接口。
      • 应用程序通过读写收、发缓冲区与 Socket 交互。
    • 传输层:
      • 主要协议:TCP 和 UDP。
      • 其他协议:SCTP、DCCP。
      • 数据封装为 TCP Segment 或 UDP Datagram,包含报文头和报文体。
    • 网络层:
      • 主要协议:IP。
      • 其他协议:IGMP、各种路由协议。
      • 数据封装为 IP 数据包,包含报文头和报文体。
    • 网络访问层:
      • Device:网络设备接口,可以是物理硬件或虚拟设备。
      • 网卡驱动程序:负责数据包的最终发送和接收,封装为 以太帧。
  • 数据包的发送和接收过程
    • 发送过程:
      • 应用程序通过 Socket 将数据写入发送缓冲区。
      • 数据在各层依次封装,形成完整的数据包。
      • 数据包通过网卡驱动程序发送到网络。
    • 接收过程:
      • 数据包通过网卡驱动程序接收。
      • 数据包在各层依次解封装,最终传递给应用程序。
(2)干预网络通信-Netfilter 框架
  1. Netfilter 概述
    • Netfilter 是 Linux 内核提供的一套通用的、可供代码干预数据在协议栈中流转的过滤器框架。
    • 由 罗斯迪·鲁塞尔 提出并主导设计。
  2. Netfilter 的五个钩子
    • **PREROUTING:**数据包进入协议栈后立即触发,用于目标网络地址转换(DNAT)。
    • **INPUT:**数据包发往本机时触发,用于加工发往本地进程的数据包。
    • **FORWARD:**数据包转发到其他机器时触发,用于处理转发的数据包。
    • **OUTPUT:**本机程序发出的数据包触发,用于加工本地进程的输出数据包。
    • **POSTROUTING:**数据包从本机网卡发出时触发,用于源网络地址转换(SNAT)。
  3. 回调链
    • 在同一个钩子处可以注册多个回调函数,形成回调链。
    • 回调函数按优先级从高到低触发。
(3)干预网络通信-iptables 工具
  • iptables 概述
    • iptables 是基于 Netfilter 的 IP 包过滤工具。
    • 用于数据包过滤、封包处理、地址伪装、网络地址转换等。
  • iptables 的常见行为
    • **DROP:**丢弃数据包。
    • **REJECT:**返回错误报文。
    • **QUEUE:**放入用户空间队列。
    • **RETURN:**跳出当前链。
    • **ACCEPT:**放行数据包。
    • **JUMP:**跳转到其他链。
    • **REDIRECT:**端口映射。
    • **MASQUERADE:**地址伪装。
    • **LOG:**记录日志。
  • iptables 的规则表
    • **raw:**去除连接追踪机制。
    • **mangle:**修改报文头信息。
    • **nat:**修改源或目的地址。
    • **filter:**数据包过滤。
    • **security:**应用 SELinux。
(4)虚拟化网络设备
  • 虚拟网卡设备
    • tun/tap
      • **tun:**模拟网络层设备,操作三层数据包(IP 报文)。
      • **tap:**模拟以太网设备,操作二层数据包(以太帧)。
      • **用途:**主要用于数据压缩、流量加密、透明代理等。
      • **性能:**需要经过两次协议栈,性能损耗较大。
      • **适用范围:**广泛应用于各种场景,如 VPN。
    • veth (虚拟以太网)
      • **特点:**成对出现,数据原样传输。
      • **用途:**主要用于容器间通信。
      • **性能:**性能优于 tun/tap,实现简单。
      • **局限性:**不适合多容器间通信,需要虚拟交换机支持。
  • 虚拟交换机
    • Linux Bridge
      • **功能:**二层转发工具,支持广播、单播、MAC 学习、STP 等。
      • **特殊转发:**支持三层转发,可以设置 IP 地址。
      • **用途:**实现容器间通信,构建单 IP 容器网络。
      • **实现:**通过 brctl 命令创建和管理。
  • 虚拟网络
    • VXLAN
      • **原理:**L2 over L4(MAC in UDP),扩展二层网络到三层范围。
      • **优点:**高灵活性、扩展性和可管理性。
      • **缺点:**额外的复杂度和性能开销。
      • **用途:**跨数据中心通信,分布式系统。
    • MACVLAN
      • **原理:**允许多个 MAC 地址和 IP 地址绑定到同一物理网卡上。
      • **优点:**高性能,轻量级。
      • **用途:**追求高性能的通信场景。
(5)容器间通信
  • Docker 网络方案
    • 桥接模式 (bridge)
      • **特点:**默认网络,使用 docker0 网桥。
      • **用途:**容器间直接二层通信,跨主机通信需通过网关。
    • 主机模式 (host)
      • **特点:**共享宿主机网络,无独立网络名称空间。
      • **优点:**无性能损耗。
      • **缺点:**无网络隔离,端口冲突。
    • 空置模式 (none)
      • **特点:**仅有回环设备,无其他网络设备。
      • **用途:**自定义网络配置。
    • 容器模式 (container)
      • **特点:**共享指定容器的网络名称空间。
      • **用途:**容器间直接使用回环地址通信。
    • MACVLAN 模式
      • **特点:**为容器指定副本网卡,使用宿主机物理设备。
      • **用途:**高性能通信场景。
    • Overlay 模式
      • **特点:**使用 VXLAN 实现跨主机通信。
      • **用途:**Docker Swarm 服务间通信。

2、容器网络与生态

(1)容器网络的发展背景
  • **libnetwork 项目:**2015年Docker发布的专门用于抽象容器间网络通信的独立模块,目的是实现CNM(Container Network Model)规范。
  • CNM 与 CNI 的竞争:
    • **CNM:**Docker提出的容器网络模型,旨在将网络功能从容器运行时引擎中剥离出去。
    • **CNI:**Kubernetes推动的容器网络接口,与CNM目标重叠,最终成为事实标准。
(2)容器网络标准的意义
  • **目的:**将网络功能从容器运行时引擎或容器编排系统中剥离出去,提高专业性和针对性。
  • **插件式设计:**通过插件实现不同类型的网络功能,提高灵活性和扩展性。
(3)CNM 与 CNI 的比较
  • CNM:
    • **抽象资源:**Sandbox、Endpoint、Network。
    • **API:**定义了创建网络、删除网络、容器接入网络等十个编程接口。
  • CNI:
    • **轻便结构:**在Kubernetes资源模型支持下,结构更加轻便。
    • **API:**主要实现对网络的增加与删除操作。
(4)容器网络插件的分类
  • Overlay 网络:
    • **特点:**虚拟化的上层逻辑网络,不受底层物理网络结构的约束,但性能较低。
    • **示例:**Flannel(VXLAN 模式)、Calico(IPIP 模式)、Weave。
  • 路由模式:
    • **特点:**直接通过路由转发实现跨主机通信,性能较高,但依赖底层网络环境。
    • **示例:**Flannel(HostGateway 模式)、Calico(BGP 模式)。
  • Underlay 网络:
    • **特点:**容器和宿主机处于同一网络,性能最优,但部署复杂。
    • **示例:**MACVLAN、SR-IOV。
(5)选择合适的 CNI 插件
  • **环境支持:**确保所选插件与系统环境兼容。
  • 性能与功能:
    • **性能:**Underlay 网络插件(如 MACVLAN 和 SR-IOV)性能最优,但部署复杂。
    • **功能:**考虑是否支持特定功能,如 Kubernetes 的 NetworkPolicy。

标签:容器,12,架构,IP,性能,网络,网卡,数据包
From: https://blog.csdn.net/liyou123456789/article/details/144385717

相关文章

  • 双向链表容器
    C++中的list是一个双向链表容器,用于存储一系列的元素。它提供了在任意位置插入和删除元素的能力,同时还支持随机访问。在C++中,list是由标准模板库(STL)提供的容器之一。它位于<list>头文件中,并且通过std命名空间进行访问。创建一个list对象非常简单,只需声明一个list变量并指定元......
  • 12.10随笔
    这里是12.10随笔。题目留档:实现线性探测法的查找函数。函数接口定义:PositionFind(HashTableH,ElementTypeKey);其中HashTable是开放地址散列表,定义如下:defineMAXTABLESIZE100000/*允许开辟的最大散列表长度*/typedefintElementType;/*关键词类型用整型......
  • 大前端:突破动态化容器的天花板3
     1动态化容器的天花板自2015年ReactNative推出至今9年时间,各类容器(动态化容器简称,下同)方案已经成为业界前端的普遍选择。业界有微信(小程序)、抖音(Lynx)、拼多多(Lego)、支付宝(Nebula/BirdNest)、京东(Taro-Native)等。美团也有MRN、MMP/MSC等容器。可以说容器是前端工程的关键基石......
  • 【Python】【练习】24.12.10
    一、题目描述二、题目解答importrandomdefredEnv(k,rest):m=random.random()*restreturnmtotal=float(input("请输入红包金额:"))num=int(input("请输入红包个数:"))remain=totalforiinrange(num-1):money=redEnv(i,remain......
  • Diary - 2024.12.10
    AtcoderARC189EStraightPath。怎么都觉得很简单,我是不是废了???只是记录一下可能比较合理的思考过程。首先发现的是\(n=2,3\)必定无解。然后手玩一下\(n=4\),能找到一个\(\max=3\)的构造。于是大胆猜测下界就是\(3\)。对应构造:横的为\(1\),竖的为\(2\),对角线......
  • 【教学类-36-08】20241210对称蝴蝶——去白边(图案最大化)一大和一大二小
    背景需求前期制作了对称蝴蝶,用来涂色,幼儿很喜欢【教学类-36-07】20230707三只对称蝴蝶(midjounery-niji)(涂色、裁剪、游戏(飞舞的蝴蝶))_对称图案涂色-CSDN博客文章浏览阅读498次。【教学类-36-07】20230707三只对称蝴蝶(midjounery-niji)(涂色、裁剪、游戏(飞舞的蝴蝶))_对称图案涂......
  • 【唐叔学算法】第12天:回溯算法-探索所有可能的旅程
    在算法的世界中,回溯算法是一种通过试错来解决问题的方法。它尝试分步解决一个问题,如果在某个步骤中发现之前的选择并不会导致一个有效的解决方案,它将取消上一步甚至是上几步的选择,回退到之前的状态,再尝试另一种可能的解决方案。作为一名Java技术博主,我将带你深入了解回溯算......
  • 梳理你的思路(从OOP到架构设计)_基本OOP知识02
    目录1、<基类/子类>结构用途:表达继承2、<基类/子类>结构用途:表达组合1、<基类/子类>结构用途:表达继承对众多对象加以分门别类,就可形成一个类继承体系。例如对学校人员加以分门别类,而得出类继承体系,如下图:软件代码的表达是: Step-1.定义基类。如:classPerson......
  • C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
    前言C#/.NET/.NETCore技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NETCore领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。欢迎投稿、推荐或自荐优质文章、项目、学习资源等。......
  • 《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose
    @目录二、高级篇(大厂进阶)5.Docker-compose容器编排5.1是什么5.2能干嘛5.3去哪下5.4Compose核心概念5.5Compose使用的三个步骤5.6Compose常用命令5.7Compose编排微服务5.7.1改造升级微服务工程docker_boot5.7.2不用Compose5.7.3swagger测试5.7.4上面成功了,有哪些问题?5.7.5......