容器网络简介

简介: 容器网络简介

今天我们来简单谈一谈容器的网络知识,这其实是一个很有意思且非常重要的知识点!

在容器内,可以看见的“网络栈”其实就是隔离在该容器内 Network Namespace 当中的,其中就包括了网卡(Network Interface)、回环设备(Loopback Device)、路由表(Routing Table)和iptables 规则。这些要素,就构成了网络请求的基本环境。

host 模式

对于 docker 容器来说,可以在启动的时候声明直接使用宿主机的网络栈,即不开始 Network Namespace

docker run -d -net=host --name nginx-host nginx

像上面的这种启动方式,会直接监听宿主机的80端口,虽然这种情况下,可以为容器提供良好的网络性能,但也不可避免的引入共享网络资源的问题,比如端口冲突等。

所以在大多数情况下,我们都希望容器进程能使用自己的 Network Namespace 里的网络栈,即拥有自己的 IP 地址和端口。

Network Namespace 模式

那么在介绍这种网络模式前,我们需要首先解决一个问题,就是这个被隔离的容器进程,该怎么和其他 Network Namespace 里的容器进程进行交互呢?

为了解决这个问题,我们可以把每一个容器看做一台主机,那么现在的问题就变成了如何让两台主机进行通信,其实解决方案就是把两台主机分别连接到一台交换机上就可以了。

那么在 Linux 系统中,能够起到虚拟交换机作用的网络设备,就是网桥(Bridge)。他是一个工作在数据链路层的设备,主要功能是根据 MAC 地址学习来将数据包转发到网桥的不同端口上。

为了实现上面的目的,Docker 项目会默认在宿主机上创建一个名叫 dokcer0 的网桥,凡是连接在 docker0 网桥上的容器,都可以通过它来进行通信。

那么下面我们就来看看这个 docker0 又是如何工作的,是怎么实现网桥的作用的呢?

在这里使用到了一个虚拟设备:Veth Pair,它的特点就是被创建出来后,总是以两张虚拟网卡(Veth Peer)的形式成对出现,并且从其中一个“网卡”发出的数据包,直接可以出现在与它对应的另一张“网卡”上,即使这两个网卡在不同的 Network Namespace 当中。

下面我们来用一个例子来具体看看这个过程

我们启动一个 nginx-1 的容器

docker run -d --name nginx-1 nginx

然后我们进入到该容器,查看一下它的网络设备

# 宿主机
docker exec -it nginx-1 sh
# 容器中
#ifconfig


可以看到,在容器里有一张 eth0 的网卡,它就是 Veth Pair 设备在容器当中的一端,而通过 route 命令可以看到,容器的路由表里,eth0 网卡是这个容器里的默认路由设备:所有对 172.17.0.0/16 网段的请求,都会被交给 eth0 来处理。

而这个 Veth Pair 设备的另一端,就在宿主机上。

# 宿主机
ifconfig


也可以看到,在宿主机上,Veth Pair 设备是一张虚拟网卡,叫做 vetha59a54c。

那么我们如何来确定这张虚拟网卡就是对应于容器中的 eth0 呢,我们可以通过如下的两个命令来确认

如果此时我们再在宿主机上启动一个容器,那么这两个容器默认一定是互通的,其实原理也很简单,因为在容器中发出的数据包,默认都会通过 Veth Pair 设备出现在 docker0 网桥上,因为这是一个网桥,所有“插在”其上面的设备都是互通的,所以两个容器默认网络也是互通的。

以上,就是最为基本的容器网络知识,当然,对于 K8S 项目,会存在更加复杂的网络插件,我们在后面的文章中在慢慢介绍吧!


相关文章
|
18天前
|
监控 安全 网络安全
|
18天前
|
数据可视化 数据挖掘
【视频】复杂网络分析CNA简介与R语言对婚礼数据聚类社区检测和可视化|数据分享
【视频】复杂网络分析CNA简介与R语言对婚礼数据聚类社区检测和可视化|数据分享
|
2天前
|
Linux 应用服务中间件 nginx
docker 网络简介
docker 网络简介
|
4天前
|
大数据 Linux Docker
mac docker 宿主机和容器间网络打通
mac docker 宿主机和容器间网络打通
6 0
|
6天前
|
监控 安全 云计算
云端防御战线:云计算环境下的网络安全策略构建高效稳定的Docker容器监控体系
【5月更文挑战第27天】 在数字化时代的浪潮中,云计算已成为企业与个人存储和处理数据的重要平台。然而,随着云服务使用率的飙升,网络威胁也愈发狡猾且复杂。本文将深入探讨在云计算环境中维护网络安全的挑战及策略,重点分析信息安全的关键组成部分,并提出多层次防御模型以增强云环境的数据保护能力。通过剖析最新的安全技术与实践,我们旨在为读者提供一套全面的网络安全解决方案蓝图。
|
7天前
|
弹性计算 安全 微服务
【阿里云云原生专栏】容器网络技术前沿:阿里云Terway网络方案详解
【5月更文挑战第26天】阿里云Terway是高性能的容器网络方案,基于ECS的ENI实现,提供低延迟高吞吐的网络服务。它简化网络管理,实现安全隔离,并与阿里云服务无缝集成。Terway由CNI、Node和Controller组成,适用于微服务、混合云和多租户环境,为企业数字化转型中的复杂网络需求提供强大支持。
162 1
|
11天前
|
网络协议 Docker 容器
Ubantu docker学习笔记(七)容器网络
Ubantu docker学习笔记(七)容器网络
|
16天前
|
Java 虚拟化 Docker
Docker简介及用途,为什么要使用Docker?Docker容器和虚拟机的区别
Docker简介及用途,为什么要使用Docker?Docker容器和虚拟机的区别
|
18天前
|
运维 安全 Linux
深入理解Docker自定义网络:构建高效的容器网络环境
深入理解Docker自定义网络:构建高效的容器网络环境
|
18天前
|
安全 网络安全 网络架构