openstack虚拟机上docker容器无法curl问题的处理

项目场景:

openstack虚拟机内docker容器网络异常


问题描述

同事反馈虚拟机上docker服务使用bridge网络模式的时候,有网络异常的现象:
1、容器内可以通ping通8.8.8.8
2、可以ping通www.baidu.com
3、无法curl通 www.baidu.com
但是当使用host网络模式的时候可以curl通百度。


解决过程:

虚拟机内curl正常,首先想到的是docker网络的限制,查了下docker-bridge导致curl异常的帖子还挺多,首先从这里入手。
经常使用docker,但是对docker网络还真没有仔细看过。现抓看了下怎么配置容器启动时使用的网络模式。
启动时增加 --net=xxx参数来完成网络模式的选择,不设定参数时默认是bridge模式。
例:

#host模式
docker run -it --net=host  xxxxx /bin/bash
#bridge模式
docker run -it --net=bridge  xxxxx /bin/bash

然后使用centos8镜像作为测试镜像启动容器进行测试。
1、bridge模式启动
复现了问题,注意看网卡的MTU值

docker run -it --net=bridge  centos /bin/bash

在这里插入图片描述

2、host模式启动
这里就有区分了,使用host模式时使用的是虚拟机的网卡,MTU值是1450

docker run -it --net=host  centos /bin/bash

在这里插入图片描述
到这就对比出来问题了,流量走的网卡的MTU值不相同,host模式走的是虚拟机的,是openstack平台默认的1450,bridge模式走的是docker服务默认的1500。
当使用bridge模式的时候,curl的包是1500的,通过网桥到虚拟机上时,大于虚拟机网卡的1450,直接丢包了。
试着修改docker服务创建网络的默认MTU值,使用的是在service文件中新增参数配置的方式

/usr/lib/systemd/system/docker.service

文件中的ExecStart配置上新增–mtu=1450参数
在这里插入图片描述
修改后再次启动bridge模式的容器,检查MTU及curl的结果
在这里插入图片描述
问题解决


最终解决方案:

修改docker服务建立bridge时的MTU配置

看了下修改openstack平台MTU值为1550可以避免这种情况,当平台MTU为1550时,虚拟机内MTU可以为1500,但是这样需要交换机上开启巨帧模式,为了这点事,找网管把汇聚到核心都改的话感觉不现实。还是改服务的了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值