k8s---kube网络原理--单机容器的网络实现原理

k8s—kube网络原理–单机容器的网络实现原理

—读书笔记:请大佬们接受我虔诚的仰视

1.单机容器的网络实现原理
几个概念:
网络栈:网卡,回环设备,路由表。iptables规则,这些元素构成了发起和响应网络请求的基本环境;
要理解被隔离的容器进程如何和其他network namespace里的容器进程进行交互整个问题,可以把每个容器看作一个主机。他们呢都有一套独立的网络栈。
要实现两台主机之间的通信,最直接的办法就是用一根网线把他们呢链接起来,如果想实现多台主机之间的通信,就需要用网线连接到一台交换机上;
在linux中,能起到虚拟交换机作用的网络设备叫网桥,他是一个数据链路层设备。主要功能是根据mac地址学习将数据包转发到网桥的不同端口上;
为了实现多个容器的通信,docker项目会默认在宿主机上创建一个docker0的网桥,凡是与docker0网桥连接的容器。都可以通过它来进行通信;
那么如果把这些容器连接到docker0网桥上,这就是要使用一种vet pair的虚拟设备;
veth pair设备的特点:他被创建出来总是以两张虚拟卡的形式成对出现,并且从其中一张网卡发出去的数据包可以直接出现在对应的虚拟网卡上,哪怕这两张网卡在不同的namespace里;这就使得vethpair常用来连接不同的network namespace的网线,相当于一张网卡直接插在容器内的2个口;1个口连接docker0.一个连接容器内的network namespace;
一个容器nginx-1.访问ping另外一个容器nginx-2:10.1 ping 10.3
10.1的目的ip地址会匹配到容器内的路由规则地址,网关是0.0.0.0。则认为i是直线连接。匹配到此规则的ip包应该经过本机的eth0网卡通过二层网络直接发往目的主机;
要通过nginx2,就需要有10.3整个ip地址的mac地址,所以nginx-1容器的网络协议栈。通过容器内的eth0网卡发送arp广播,来通过ip地址查找对应的mac地址;docker0收到这些arp请求之后,就会把arp请求转发到其他插在docker0上的虚拟网卡上,这样连接在docker0的nginx-2容器的网络协议栈就能收到这个arp请求。于是将10.3的mac地址回复给nginx-1容器。有了mac地址,nginx-1的网卡就可以发送数据包了。发出数据包。从容器内直接出现在veth在宿主机的虚拟网卡上,同时直接到达docker0网桥,docker0根据数据包的目的mac地址。在他的cam表里查找对应的veth虚拟卡。然后将数据包法网该端口。通过虚拟网卡。数据包直接到达容器内网络栈,这样数据包就进入到了nginx-2的network namespace里了;nginx-2容器看到自己的eth0网卡上出现流入的数据包。这样nginx-2的网络栈将相应pong。返回到nginx-1

在数据传输过程中,网络协议栈的不同层次都有linux的内核netfilter参与其中,
排查容器无法连接外网时,应该先看看docker0网桥,查看跟docker0连接的iptables是否有异常。往往能找到答案;
#在宿主机上执行一下,可以打开iptables的trace功能查看数据包的传输过程;在这里插入图片描述
如果需要跨主机通信。就需要接入一种技术叫overlay网络,覆盖网络
这种容器网络的核心是在已经有的宿主机网络上在通过软件构件一个可以把所有容器连接起来的虚拟网络;这种股改网络可以由每台宿主机上的一个特殊网桥共同组成。这种数据网桥,在node1上的容器1要访问node2的容器3时候,node1的数据网桥在能获取到node2的mac地址。直接将数据包发送到node2的下一跳的mac地址上。就可以接收和响应数据了;

明天写flannel网络插件的三种后端实现:xlan。host-gw。udp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值