架构12-容器间网络

news/2024/12/17 5:36:13/

零、文章目录

架构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。

http://www.ppmy.cn/news/1555783.html

相关文章

加载文件到docker中的mysql上

一 非docker 二 docker 2.1 先上传文件到docker容器中 docker cp 文件路径及文件 容器名:存放的路径 2.2 进入docker容器 docker exec -it 容器id /bin/bash 2.2 加载文件到数据库 1 不需要连接mqsql mysql -u root -p 数据库名 &…

ACL(访问控制列表)

ACL技术概述 • 随着网络的飞速发展,网络安全和网络服务质量 QoS ( Quality of Service )问题日益突出。 ▫ 园区重要服务器资源被随意访问,园区机密信息容易泄露,造成安全隐患。 ▫ Internet 病毒肆意侵略园区内网&am…

如何进行mysql慢查询日志设置以及日志管理与分析

1、引言 MySQL的慢查询日志是MySQL提供的一种日志记录功能,它用于记录在MySQL中响应时间超过设定阈值的SQL语句。 主要作用如下: 发现性能问题:通过分析慢查询日志,可以找出执行时间较长的SQL语句,从而…

大数据相关标准——GB/T 38676-2020信息技术 大数据 存储与处理系统功能测试要求(山东省大数据职称考试)

大数据分析应用-初级 第一部分 基础知识 一、大数据法律法规、政策文件、相关标准 二、计算机基础知识 三、信息化基础知识 四、密码学 五、大数据安全 六、数据库系统 七、数据仓库. 第二部分 专业知识 一、大数据技术与应用 二、大数据分析模型 三、数据科学 大数据相关标准…

Rust之抽空学习系列(三)—— 编程通用概念(中)

Rust之抽空学习系列(三)—— 编程通用概念(中) 1、变量&可变性 在Rust中,变量默认是不可变的 fn main() {let x 5;println!("x is {}", x); }使用let来声明一个变量,此时变量默认是不可变…

FastAPI 应用部署与性能优化

FastAPI 应用部署与性能优化 目录 🌐 FastAPI 的性能特点与技术优势🚀 查询优化与高效缓存策略📊 数据库性能调优与最佳实践 🌐 1. FastAPI 的性能特点与技术优势 FastAPI 是近年来备受关注的 Python Web 框架之一,…

MetaGPT中的单智能体Action

目录 单智能体 单Action单智能体 多Action参考链接 单智能体 单Action 定义一个名为SimpleCoder的角色,这个角色可以执行一个名为SimpleWriteCode的动作。这个动作的目的是生成一个Python函数的代码,该函数能够完成给定的任务,并提供两个可运…

uniapp video 安卓小程序seek第一次打开时视频能跳转到指定位置,第二次就没有跳转到指定位置

问题: 1.ios的小程序测试没问题,看完视频再次点击视频就在上一次看到的位置 2.但是安卓第一次进去会在上一次位置,返回上一页再点击视频进去就从头开始 原因: 找了好久是 videoId的问题 ,我写的videoId myVideo ,因…