阿里云弹性网络接口技术的容器网络基础教程

news2024/10/5 14:33:34

基于容器的虚拟化是一种虚拟化技术。与虚拟机 (VM) 相比,容器更轻量级,部署更方便。Docker是目前主流的容器引擎,支持Linux、Windows等平台,以及Kubernetes(K8S)、Swarm、Rocket(RKT)等主流Docker编排系统。常见的容器网络支持多种模型,如桥接网络、Overlay网络、Host网络和用户自定义网络。K8S 等系统依靠容器网络接口 (CNI) 插件进行网络管理。常用的 CNI 插件包括 Calico 和 Flannel。

本文九河云将介绍容器网络的基础知识。ECS容器网络基于阿里云弹性网卡(Elastic Network Interface,简易)技术,具有高性能、易部署易维护、隔离性强、安全性高等特点。

传统集装箱网络解决方案

本节介绍传统容器网络的工作原理。

CNI 是由云原生计算基金会 (CNCF) 管理的开源项目。它为各大厂商制定标准并提供源码库,以开发用于 Linux 容器网络管理的插件。著名的 CNI 插件包括 Calico 和 Flannel。Calico 通过 Flex/Bird 实现 BGP 等协议,并将其存储到分布式内存数据库中,以建立大型的 Layer 3 网络,使不同主机上的容器无需发送 ARP 即可与不同子网上的容器进行通信。

Flannel 实现了基于 VXLAN 等隧道技术的容器覆盖网络。Calico/Flannel 等 CNI 使用 VETH 对来配置容器网络。将创建一对 VETH 设备,其中一端绑定到容器,另一端绑定到 VM。虚拟机通过网络协议栈(覆盖网络)、Iptables(Calico 插件)或 Linux Bridge 等技术转发容器网络。(当容器网络在ECS中通过网桥连接到交换机时,VPC只能到达ECS级别,容器网络是网桥上的内网。

下图显示了目前主流容器网络的工作流程,它与多网卡容器网络的不同之处体现在以下几个方面:

1

  1. 主机 1 上的容器发送的消息通过 VETH 传输到虚拟机上的 Linux 网桥,Linux 网桥运行转发逻辑,将消息虚拟机上的网卡发送到主机上的交换机。
  2. 主机 2 上的虚拟机接收 vSwitch 发送的消息,并使用 Linux Bridge 的转发逻辑通过 VETH 将其发送到容器。

在整个网络系统中,虚拟机内部需要 K8S 等编排系统的 CNI 插件进行网络配置。交换机支持 Openflow 和 Netconf 等通信协议,这些协议通过软件定义网络 (SDN) 控制器进行管理和配置。主流ToR交换机使用Netconf协议进行远程配置。支持Openflow的SDN物理交换机也已上市。

为了管理整个网络,需要两个不同的网络控制系统。配置相对复杂,由于实现机制等因素,存在一定的性能瓶颈。主机上的安全策略不能应用于容器应用程序。

多网卡容器网络

当 VM 具有多个动态热插拔的网络接口卡 (NIC) 时,可以在容器网络上使用这些 NIC,因此容器网络将不再需要使用 Linux VETH 和 Bridge 等技术。同时,将消息转发到主机上的虚拟交换机(vSwitch),通过简化流程提高网络性能。

解决方案概述

如下图所示,主机上正在运行一个交换机,用于转发来自虚拟机和容器的流量。多个虚拟网卡连接到交换机。在虚拟机上启动容器时,虚拟网卡会动态绑定到主机上容器所在的虚拟机,然后虚拟机内部的网卡绑定到容器所在的网络命名空间,容器中的网络流量可以通过网卡直接发送到主机上的交换机(即 容器网络可以直接连接到交换机)。

2

在交换机中应用ACL、QoS、Session等规则进行流量转发。当主机 1 上的 VM 上运行的容器访问主机 2 上的 VM 上运行的容器时,流量通常会经过以下过程:

  1. 网络消息通过容器核心网络协议栈。查询路由后,消息通过eth0网卡发送。
  2. 主机上的交换机通过虚拟端口接收来自容器的消息,并运行交换机的转发逻辑,通过物理网口将报文发送到架顶式交换机。如果为容器或虚拟机网络建立了 Virtual Private Cloud (VPC),则需要使用 VXLAN 等隧道技术对消息进行封装。
  3. ToR 交换机通过连接到主机 2 的物理端口查询路由并转发消息。
  4. 主机2上的交换机接收到物理端口消息,通过转发逻辑发送到连接容器的虚拟端口。
  5. 容器中的协议栈 eth0 接收另一端发送的消息,然后由容器中的网络协议栈处理该消息。

方案特点

相较于传统容器在虚拟机上运行的方案,该方案具有高性能、易管理、隔离性强等特点。

直连VPC

多网卡方案允许容器直接访问VPC网络面,使每个容器都能提供完整的VPC网络功能,包括EIP、SLB、DDoS高防、安全组、HAVIP、NAT和用户路由。

跨VPC

通过多网卡方案直接访问VPC网络面的容器,可以使用VPC的一些高级功能,如对等功能。跨VPC弹性网卡也可用于访问云产品,不同VPC内的多个网卡可以分配给容器。这确保了容器可以跨多个 VPC 使用。

高性能

在多网卡解决方案中,容器中的网络流量不需要通过虚拟机上的 Iptables/Bridge 转发,而是直接转到主机上的交换机。这样就省去了虚拟机上的数据消息转发逻辑,简化了数据复制过程,大大提升了容器网络的性能。下表列出了不同解决方案在单次测试中的基本性能数据。

单线程 (Mbps)单线程 (pps)多线程 (pps)TBase测试 1 KB (QPS)
Linux 桥接器32.867295,9802,341,669363,300
多网卡解决方案51.389469,8653,851,922470,900
性能改进56.35%58.7%64.49%29.6%

强隔离

在传统的桥接方案中,所有容器实例都位于同一个大型二层网络上,导致广播、组播和未知单播泛滥。多网卡方案提供的直连功能,以及ECS网络提供的ACL和安全组功能,可以有效保障安全隔离。即使在容器的管理面上也无法查看容器网络流量。安全规则应用于容器级别,而不是 VM 级别。

易于管理

当管理系统将容器分派到虚拟机时,控制系统会在虚拟机所在主机的交换机上创建一个网卡,通过热插拔将网卡插入虚拟机,并将网卡配置到虚拟机上的容器网络命名空间中。通过配置交换机的流量转发规则,然后在xGW上配置HaVIP,外部应用和客户端可以访问容器提供的服务。

多网卡解决方案还有助于容器迁移。以另一台迁移到同一台主机的虚拟机为例,K8S 的 Kubelet 模块迁移应用,然后通过 CNI 插件重新配置网络,管理容器 IP 和 VIP,并配置访问容器应用的方式。整个过程很复杂,但 NIC 解决方案可以使它变得简单。将容器分派到 VM 后,绑定到旧容器的 NIC 将从旧 VM 中拔出,并插入到新容器所在的 VM 中。然后,将 NIC 绑定到 VM 上的容器网络命名空间。新容器可以正常通信,无需再重新配置网络。

DPDK 支持

由于其优越的性能优势,DPDK已经普及,越来越多的应用是基于DPDK开发的。传统的容器网络使用VETH作为网络设备,目前无法直接使用DPDK的PDK驱动,因此基于DPDK的应用不能直接在容器中使用。在多网卡方案中,容器使用ECS网络设备,即常见的E1000或virtio_net设备。两台设备都有一个 PMD 驱动程序,容器可以使用该设备直接运行基于 DPDK 的应用程序,从而提高容器内应用程序的网络性能。

VM 多 NIC

要启用物理主机的跨域,您需要在物理机中插入多个网卡。由于 PCI 插槽和成本的限制,在一台物理机上部署两个以上的 NIC 的情况很少见。打开或关闭硬件设备的电源或多或少会给整个系统增加脉冲,从而影响机器的稳定性,并限制设备的热插拔。常见的热插拔设备是 USB 设备。PCI 设备的热插拔直到最近几年才获得限制性支持,因为需要两个枚举和电源效应。

在虚拟环境中,虚拟网卡的低成本和灵活性大大提高了虚拟机的可用性。用户可以根据需要动态分配或释放网卡,在不影响虚拟机正常运行的情况下,动态地将网卡插入或拔出虚拟机。libvirt/qemu 模拟虚拟设备的方式具有物理主机无法比拟的以下优势:

资源限制

只要系统有足够的内存等资源,就可以模拟多个网卡,并将它们分配给同一个虚拟机,一个虚拟机上可以安装64个甚至128个网卡。与物理硬件环境相比,软件模拟 NIC 的成本要低得多。它们还具有更好的支持多队列和主流硬件的一些卸载功能,提高了系统的灵活性。

动态热插拔

VM 上的 NIC 由软件模拟。因此,当需要网卡时,软件会分配一些基础资源来模拟网卡。热插拔框架使 libvirt/qemu 能够轻松绑定到正在运行的 VM 上,并且 VM 可以立即使用 NIC 发送网络消息。当不再需要 NIC 时,可以通过 libvirt/qemu 接口调用将其“拔出”,而无需停止 VM。分配给 NIC 的资源被销毁,分配给 NIC 的内存被回收,中断被恢复。

容器网络实施

本节介绍如何使用虚拟机多网卡逐步实现容器网络通信。

  1. 在阿里云控制台创建云主机,创建实例时选择多个网卡。然后,VM 上会显示多个 NIC。
  2. 在 VM 上部署容器应用程序。
    ~# docker run -itd --net none ubuntu:16.04

    注意:启动 Docker 时,将容器的网络类型指定为 none

  3. 登录到 VM,并将其中一个 NIC 绑定到容器命名空间。在以下示例中,新动态插入的 NIC 是 eth2,容器的网络命名空间是 2017(为澄清起见,docker inspect 看到的 PID 用作网络命名空间)。
    ~# mkdir /var/run/netns
    ~# ln -sf /proc/2017/ns/net /var/run/netns/2017
    ~# ip link set dev eth2 netns 2017
    ~# ip netns exec 2017 ip link set eth2 name eth0
    ~# ip netns exec 2017 ip link set eth0 up
    ~# ip netns exec 2017 dhclient eth0

    注意:根据发布版本,用户可能不需要通过手动创建连接来“创建”容器的网络命名空间。将 eth2 绑定到容器的网络命名空间后,将其重命名为 eth0。

  4. 查看 VM 和容器中的 NIC 配置状态。
    检查 VM 上是否仍存在 NIC。
    ~# ifconfig -a

    检查容器中是否有新配置的网卡。

    /# ifcofig -a

    可以看出,eth2 已从虚拟机中移除并应用到容器中。

  5. 重复步骤 1 到 4 以启动另一个 VM 和容器。
  6. 使用 sockperf 等工具进行性能测试和比较。
    $ cat server.sh
    
    #!/bin/bash
    for i in $(seq 1 $1)
    do
        sockperf server --port 123`printf "%02d" $i` &
    Done
    
    $ sh server.sh 10
    $ cat client.sh
    
    #!/bin/bash
    for i in $(seq 1 $1)
    do
        sockperf tp -i 192.168.2.35 --pps max --port 123`printf "%02d" $i` -t 300 &
    done
    
    $ sh client 10

蚂蚁金服使用案例

Tier-Base (TBase) 是一个类似于 Redis 的分布式 KV 数据库。它是用 C++ 编写的,支持几乎所有的 Redis 数据结构。它还支持 RocksDB 作为后端。TBase在蚂蚁金服中应用广泛。本节将介绍该方案的 TBase 业务测试。

传统 Linux 桥接测试

测试环境

服务器:16C60G x 1(半个A8)

客户端:4C8G x 8

TBase 服务器部署:7G x 7 实例

TBase 客户端部署:8 x(16 个线程 + 1 个客户端)=> 128 个线程 + 8 个客户端

检测报告

操作数据包大小客户网卡负载1中央处理器PP2型平均 rt第 99 RT
设置1 KB8424兆字节7.1544%363,3000.39 毫秒< 1 ms
获取1 KB8421兆字节7.0645%357,0000.39 毫秒< 1 ms
设置64 KB11,884兆字节2.317%29,0000.55 毫秒< 5 ms
设置128 KB12,252兆字节2.5318%18,2000.87 毫秒< 6 ms
设置256 KB12,804兆字节2.3620%11,1001.43 毫秒< 5 ms
设置512 KB13,104兆字节2.6120%6,0002.62 毫秒< 10 ms

弹性网卡多网卡测试

测试环境

服务器:16C60G x 1(半个A8)

客户端:4C8G x 8

TBase 服务器部署:7G x 7 实例

TBase 客户端部署:16 x(16 个线程 + 1 个客户端)=> 256 个线程 + 16 个客户端

检测报告

操作数据包大小客户网卡负载1中央处理器PP2型平均 rt第 99 RT
设置/获取1 KB16570兆字节6.9745%470,9000.30 毫秒< 1 ms

测试结论

基于弹性网卡多网卡方案,整体性能提升,时延明显缩短(QPS提升30%,平均时延降低23%)。假设使用16C60G服务器,QPS在470左右。在本例中,平均 rt 为 900.0 ms,第 30 个 rt 小于 99 ms。 用户、sys、si 和 st 分别消耗了 1%、45%、29% 和 18% 的 CPU。与 Linux Bridge 相比,多 NC 解决方案的 CPU 消耗显著降低。通过内核队列分散,将 st 的 CPU 消耗分布在多个不同的内核上,使处理资源使用更加均衡。

对于VPC路由表Flannel/Canal的解决方案,在带宽和吞吐量上没有实质性的损失。相对于主机,延迟约为 0.1 毫秒。使用Nginx测试QPS,页面较小时损失在10%左右。对于弹性网卡方案,相对于主机,带宽和吞吐量没有实质性的损失,延迟略低于主机。在应用测试中,性能比主机网络上的性能高出 10% 左右,因为 POD 没有受到 iptables 的约束。对于默认的 Flannel VXLAN,带宽和吞吐损失约为 5%,而在 Nginx 小页面测试的最大 QPS 下,相对于主机,性能损失约为 30%。

总结

本文介绍一种基于虚拟机多网卡热插拔的容器网络解决方案。通过动态热插拔虚拟机的网卡并将其应用于容器中,用于发送和接收容器网络数据消息,并通过虚拟机上运行的虚拟软件交换机转发网络消息,大大降低了容器网络管控系统的复杂度,提高了网络性能,增强了容器网络安全性。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

奇偶链表00

题目链接 奇偶链表 题目描述 注意点 在 O(1) 的额外空间复杂度和 O(n) 的时间复杂度下解决这个问题偶数组和奇数组内部的相对顺序应该与输入时保持一致 解答思路 奇数组的头节点是head&#xff0c;偶数组的头节点是head.next&#xff0c;关键是要改变每个节点的next指针及…

[ArkUI开发技巧] 应用的全屏式沉浸适配

引言 在开发应用的过程中&#xff0c;为了使用户聚焦在应用本身&#xff0c;最好对应用进行沉浸适配。先前有一种适配方法&#xff0c;将SystemBarProperties设置成应用页面顶部和底部的颜色&#xff0c;但是这种方法在切换页面的过程中过渡十分僵硬&#xff0c;且应用在小窗模…

数据结构实验3:顺序表的基本操作

目录 一、实验目的 二、实验原理 1. 连续存储空间 2. 元素访问 3. 固定大小 4. 容量管理 5. 动态顺序表 6. 顺序表的插入 7. 顺序表的删除 8. 顺序表的应用 三、实验内容 问题描述 代码 截图 分析 一、实验目的 1、 熟练掌握顺序表结构体的实现。 2、 熟练掌握…

记录汇川:ITP与Autoshop进行仿真连接

1、定义如下程序&#xff1a; 2、ITP新建工程&#xff1a; 3、依次选择&#xff0c;最后修改IP 4、定义两个变量 5、拖一个按钮和一个圈出来&#xff0c;地址绑定&#xff1a;M1 6、地址绑定&#xff1a;Y1 7、PLC启动仿真 8、ITP启动在线模拟器 9、即可实现模拟仿真

Redis 配置(二)

目录 redis 配置 Redis 主从复制 主从复制的作用 主从复制流程 搭建Redis 主从复制 Redis 哨兵模式 哨兵模式的作用 哨兵结构 故障转移机制 主节点的选举 搭建Redis 哨兵模式 Redis 群集模式 集群的作用 Redis集群的数据分片 Redis集群的主从复制模型 搭建R…

拓数派加入 OpenCloudOS 操作系统开源社区,作为成员单位参与社区共建

近日&#xff0c;拓数派签署 CLA(Contributor License Agreement 贡献者许可协议)&#xff0c;正式加入 OpenCloudOS 操作系统开源社区。 拓数派&#xff08;英文名称“OpenPie”&#xff09;是国内基础数据计算领域的高科技创新企业。作为国内云上数据库和数据计算领域的引领者…

CentOS7部署GitLab-ce-16.7.0-ce.0.el7

文章目录 下载地址上传服务器安装访问配置external_url修改防火墙端口开放 重新加载配置访问GitLab出现502访问错误继续访问gitlab账户和密码修改GitLab常用命令 下载地址 gitlab 下载地址 上传服务器 scp -r C:\Users\xxx.xxxx\Downloads\gitlab-ce-16.7.0-ce.0.el7.x86_64…

黑马苍穹外卖学习Day3

目录 公共字段自动填充问题分析实现思路代码实现 新增菜品需求分析和设计接口设计代码开发开发文件上传接口功能开发 菜品分页查询需求分析和设计代码开发 菜品删除功能需求分析与设计代码实现代码优化 修改菜品需求分析和设计代码实现 公共字段自动填充 问题分析 员工表和分…

因为相信,所以简单,因为简单,所以坚持

因为相信&#xff0c;所以简单&#xff1b;因为简单&#xff0c;所以坚持。今天&#xff0c;我有幸受邀参加了九龙珠集团2023年以《蓄力生长》为主题的年会。在这里&#xff0c;我深刻感受到这两句话不仅是九龙珠集团成长的缩影&#xff0c;也是其不断前进的动力。在企业的经营…

选择智能酒精壁炉,拥抱环保与未来生活

保护环境一直是我们共同的责任和目标&#xff0c;而在这场争取保护环境的斗争中&#xff0c;选择使用智能酒精壁炉而非传统壁炉成为了一种积极的行动。这不仅仅是对环境负责&#xff0c;更是对我们自身生活质量的关照。 传统壁炉与智能酒精壁炉的对比 传统壁炉常常以木柴、煤炭…

如何创建VPC并配置安全组以保护您的阿里云服务器

将您的基础架构放在云上意味着您可以接触到全球的许多人。但是&#xff0c;这也意味着不怀好意的人可以访问您的服务。保护您的云网络非常重要。阿里云提供虚拟专用网络 &#xff08;VPC&#xff09;&#xff0c;这是一个安全隔离的私有云&#xff0c;将您的弹性计算服务 &…

算法第十一天-组合总和Ⅳ

组合总和Ⅳ 题目要求 解题思路 来自[负雪明烛] 题目有个明显的提示&#xff1a;求组合的个数&#xff0c;而不是每个组合。如果是要求出每个组合&#xff0c;那么必须使用回溯法&#xff0c;保存所有路径。但是如果是组合个数&#xff0c;一般都应该想到[动态规划]的解法。 直…

vite-admin框架搭建,ESLint + Prettier 语法检测和代码格式化

vite-admin框架搭建&#xff0c;ESLint Prettier 语法检测和代码格式化 1. 环境和工具2. 项目初始化3. 安装插件1. 安装ESLint1.1 安装插件1.2 初始化ESLint 2. 安装Prettier2.1 安装插件2.2 配置Prettier 3. vscode 安装插件及配置3.1 安装插件 ESLint 和 Prettier - Code fo…

许战海战略文库|加加食品:错过窗口期的“酱油第一股”如何逆袭

加加食品集团股份有限公司成立于1996年&#xff0c;是一家综合研发、生产和营销的大型调味品上市公司。该公司在2012年1月6日成功上市&#xff0c;被尊称为“中国酱油第一股”。然而&#xff0c;在近年来&#xff0c;该公司经历了重大挑战&#xff0c;包括持续的业绩下滑、低迷…

Docker简述与基础部署详解

docker官网&#xff1a;https://www.docker.com docker中文库:https://www.docker.org.cn/ Docker是一种开源的容器化平台&#xff0c;用于轻松打包、交付和运行应用程序。Docker的主要优势在于它提供了一种轻量级、可移植、自包含的容器化技术&#xff0c;使得应用程序及其所…

基于uniapp封装的card容器 带左右侧两侧标题内容区域

代码 <template><view class"card"><div class"x_flex_header"><div><title v-if"title ! " class"title" :title"title" :num"num"></title></div><div><s…

计算机网络—— 概述

概述 1.1 因特网概述 网络、互联网和因特网 网络由若干结点和连接这些结点的链路组成多个网络还可以通过路由器互联起来&#xff0c;这样就构成了一个覆盖范围更大的网络&#xff0c;即互联网&#xff08;或互连网&#xff09;。因特网&#xff08;Internet&#xff09;是世…

连接两个路由器的有线连法,关键时候可能会发挥不小的作用

路由器网桥连接两个或多个路由器&#xff0c;以扩展网络范围&#xff0c;提供额外的以太网端口和无线接入点。但在开始之前&#xff0c;你必须首先决定如何使用每个路由器。因此&#xff0c;你需要知道你想要实现什么&#xff0c;并清楚地了解你对每台设备的期望。 例如你想扩…

docker run 命令详解

一、前言 Docker容器是一个开源的应用容器引擎&#xff0c;让开发者可以以统一的方式打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何安装了Docker引擎的服务器上&#xff08;包括流行的Linux机器、Windows机器&#xff09;&#xff0c;也可以实现虚拟…

目标检测-One Stage-YOLOv5

文章目录 前言一、YOLOv5的网络结构和流程YOLOv5的不同版本YOLOv5的流程YOLOv5s的网络结构图 二、YOLOv5的创新点1. 网络结构2. 输入数据处理3. 训练策略 总结 前言 前文目标检测-One Stage-YOLOv4提到YOLOv4主要是基于技巧的集成&#xff0c;对于算法落地具有重大意义&#x…