首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Docker实践之09-高级网络配置

    当Docker启动时,会自动在主机上创建一个名为docker0虚拟网桥,实际上是Linux的一个bridge,可以理解为一个软件交换机,它会在挂载到它的网口之间进行转发。 同时,Docker随机分配一个本地未占用的私有网段中的一个地址给docker0接口。比如典型的172.17.0.1,掩码为255.255.0.0。此后启动的容器内的网口也会自动分配一个同一网段(172.17.0.0/16)的地址。 当创建一个Docker容器的时候,同时会创建了一对veth pair接口(当数据包发送到一个接口时,另外一个接口也可以收到相同的数据包)。这对接口一端在容器内,即一端在本地并被挂载到docker0网桥,名称以veth开头(例如vethb305ad8)。通过这种方式,主机可以跟容器通信,容器之间也可以相互通信。 Docker创建了在主机和所有容器之间一个虚拟共享网络。

    01

    k8s集群网络(8)-service之ipvs node port实现原理

    在上一篇文章中我们介绍了基于ipvs的cluster ip类型service的实现原理,本质上是在iptable的PREROUTING chain以及相关target中利用ipset来匹配cluster ip,完成对即将做MASQUERADE伪装的items的mark标记,同时结合ipset也减少了iptable中的entry数量。另外在host network namespace里创建kube-ipvs0网络设备,绑定所有cluster ip,保证网络数据包可以进入INPUT chain。在INPUT chain中ipvs利用映射规则(可由ipvsadm查看该规则)完成对cluster ip的DNAT和目标pod endpoints选择的负载均衡,然后直接把数据送入POSTROUTING chain。当数据包进入POSTROUTING chain,经过相关的iptable target,匹配在PREROUTING chain中的mark标记,完成MASQUERADE伪装(SNAT host的ip地址)。最后数据包根据host network namespace的路由表做下一跳路由选择。在这里我们主要介绍基于ipvs的node port类型service的实现原理,如果对上一篇文章内容有所理解,那么这里也比较简单。

    05

    k8s集群网络(7)-service之ipvs cluster ip实现原理

    在之前文章中我们介绍了基于iptable方式实现的k8s集群中cluster ip类型和node port类型service的负载均衡。其本质上是当网络数据包从pod的network namespace中通过linux veth pair设备进入到host宿主中的network namespace时,经过iptable一系列的NAT转换,把service的cluster ip和端口DNAT成pod的ip和端口。同时leverage linux iptable的random模块,实现了对pod的负载均衡,然后再交由host对目标pod的路由策略来实现将数据包发往pod。当然,这一切都是在linux内核空间实现的,和应用程序的用户空间没有关系。在这里我们主要介绍基于ipvs的cluster ip类型service的实现原理。如果对于ipvs不熟悉的同学可以浏览一下网站http://www.linuxvirtualserver.org/,大名鼎鼎的LVS负载均衡就是基于ipvs来实现的。

    04
    领券