docker网络基础

网络的命名空间

linux在网络栈中引入网络命名空间,从而支持网络协议栈的多个实例。这些独立的协议栈被隔离到不同的命名空间。
Linux在网络栈中引入网络命名空间,将独立的网络协议栈隔离到不同的命令空间中,彼此间无法通信;docker利用这一特性,实现不容器间的网络隔离。

Veth设备对

Veth设备对可以在不同的网络命名空间之间进行通信,直连两个网络命名空间。
veth设备可以在不同网络命名空间之间转移的设备。

网桥

将多个不同网络连接起来并实现多个网络中主机的相互通信。
网桥是二层的虚拟网络设备,把多个网络接口“连接”起来,使得网口之间的报文能够互相转发。实现类似交换机的多对多通信。
docker0网桥的IP地址作为默认网关。

Iptables/Netfilter

自定义的数据包处理过程。
linux网络协议栈中有一组回调函数挂接点,在这些挂接点挂接的钩子函数可以在linux网络栈处理数据包的过程中对数据包进行操作。
Netfilter是在内核模式下,执行挂接的规则;Iptables是在用户模式下,协助维护内核中Netfilter的规则表。通过二者共同实现linux网络协议栈的数据包处理机制。

================= 上层协议处理=================
^ ||
||
INPUT OUTPUT
|| ||
路由 ======== > FORWARD ======== > ||
|| ||
PREROUTING POSTROUTING
================= 接口设备 =================

路由

路由功能由IP层的路由表来实现。
Linux系统包含一个完整的路由功能,当IP层在处理数据发送或转发的时候,会使用路由表来决定发往哪里

在Kubernetes网络中存在两种IP(Pod IP和Service Cluster IP),Pod IP 地址是实际存在于某个网卡(可以是虚拟设备)上的,Service Cluster IP它是一个虚拟IP

是由kube-proxy使用Iptables/ipvs规则重新定向到其本地端口,再均衡到后端Pod的。

docker的网络实现

docker支持四种网络模式:host、container、none、bridge。
k8s只使用bridge模式。在bridge模式下,docker daemon在首次启动时会创建虚拟网桥docker0。然后按照RPC1918的模型,在私有网络空间中给网桥分配一个子网。后面由docker创建出来的容器,都会创建一个虚拟的以太网设备(Veth设备对),其中一端关联到网桥上,另一端使用Linux的网络命名空间技术,映射到容器内的eth0设备,然后从网桥的地址段内给eth0接口分配一个IP地址。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • DOCKER 网络基础 网络命名空间(linux net namespace) linux 内核支持(net na...
    陈sir的知识图谱阅读 1,038评论 0 3
  • 近几年,Docker、Kubernetes等容器化技术和容器编排工具的兴起使技术人员从应用部署和维护的泥淖中解脱出...
    王勇1024阅读 8,868评论 4 24
  • docker原生网络分类: none 容器运行后没有网络,此种网络类型可以用来做主句的隔离 hosthost网络配...
    75221f946ec3阅读 394评论 0 1
  • Docker 目前了提供映射容器端口至宿主主机和容器互联机制来为容器提供网络服务。 端口映射实现访向容器 从外部访...
    刘远鑫阅读 213评论 0 1
  • 刻在脸上的岁月已浅显 品尝着酸甜苦辣的心已沉静 爱已沉积在身体每一个角落 行在菩提路上的一粒尘埃 随风、随雾、随雨...
    菩提树_b342阅读 115评论 0 0