前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >容器网络硬核技术内幕 (6) 天堑变通途

容器网络硬核技术内幕 (6) 天堑变通途

作者头像
用户8289326
发布2022-07-27 21:48:00
6750
发布2022-07-27 21:48:00
举报
文章被收录于专栏:帅云霓的技术小屋

上回说到,docker自带的网桥br0,在跨宿主机通讯时,默认充当了VXLAN的VTEP,因此,会造成较大的互通开销。

如果期望两个宿主机上在同一子网内的容器能够不通过VXLAN隧道互访,我们就需要利用linux自带的linux bridge了。

首先,我们创建网桥br0:

点击ubuntu桌面右上角的工具栏的网络图标,选择Edit Connections..

点击Add,选择Bridge类型:

将连接改名为br0,点击“Add”:

选择Ethernet,并在Ethernet选项卡的Device选择ens33并保存:

记得把STP关掉,避免麻烦:

在IPv4设置中,打开DHCP:

很快,我们看见,br0 获取到IP地址了!

行百里者半九十,我们才刚刚成功一半。

如图,br0这个虚拟交换机的上行口,已经被设定为ens33,它本身也获取到了172.16.1.0/24网段的IP地址。

而原来ens33网卡,不再拥有IP地址。

我们需要做的是,把各个容器绑定到这个虚拟交换机的接口上。这就需要让dockerd守护进程绑定br0作为bridge网络,而不是使用默认的docker0。

我们注意到,通过dockerd –help查看命令行选项,发现dockerd有一个 –bridge选项,可以修改默认桥接网络:

注意要打开Linux自带的IPv4转发选项:

#sysctl -w net.ipv4.ip_forward=1

并且在/etc/sysctl.conf中修改net.ipv4.ip_forward参数,改为1。

我们停止docker服务,并增加参数 –b br0启动docker服务:

运行容器ubuntu:

(由于原生ubuntu的容器镜像不含ip/ifconfig/ping等命令,我重新制作了一个含有网络常用工具的image)

可以看到,这个容器获取的是和宿主机网段一致的172.16.1.0/24的IP地址,但IP地址却从该子网的第一个IP地址开始分配。这是因为docker默认使用自带的DHCP服务。

我们可以给它手动指定一个IP:

让我们到容器里跑的ubuntu里面再去看看IP地址:

可见,容器ubuntu_101已经获取到了我们赋予的地址 172.16.1.143。

如图:

我们在其他主机上也如法将容器连接到br0网桥:

再从host A上的ubuntu容器,对host B和host B上的容器发起ping:

看,两个宿主机上的容器,通过Linux Bridge直接互通了!

我们再从同一子网外的计算机发起ping:

这样,在子网外也可以访问容器了!

果然是“一桥飞架南北,天堑变通途”!

进一步地,我们还可以通过反向代理或DNAT网关,让容器对互联网发布业务。

不过,大家也看到,在docker中,网络的设置是非常繁琐的,需要操作一系列容易出错的Linux命令。

好在,kubernetes的出现,弥补了docker很多方面的不足,在网络层面也给出了更多的选择——

敬请期待下期。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 帅云霓的技术小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档