容器化OVS交换机连接SDN控制器后互ping失败问题求助
排查与解决Docker OVS容器间ping不通的问题
我来帮你定位这个问题——你已经完成了OVS容器的部署和控制器连接,但容器间无法ping通,主要是二层接口配置错误和流量路径未经过OVS网桥这两个核心问题,咱们一步步修正:
一、核心问题分析
你当前把IP地址配置在了OVS的端口(s1-eth1/s2-eth1)上,但OVS端口本质是二层转发接口,IP应该配置在OVS网桥上,这样容器的网络栈才会把流量发往网桥,再由OVS根据控制器的流表转发。
二、修正操作步骤
1. 调整容器内的IP配置(替换原有的veth IP配置)
在s1容器终端执行:
# 清除veth端口上的IP ifconfig s1-eth1 0.0.0.0 # 给OVS网桥配置IP并启用 ifconfig s1 10.0.0.1/24 up
在s2容器终端执行:
ifconfig s2-eth1 0.0.0.0 ifconfig s2 10.0.0.2/24 up
2. 验证OVS端口与网桥状态
在每个容器内执行以下命令,确认端口已正确加入网桥且状态为UP:
# 查看OVS拓扑 ovs-vsctl show # 查看接口状态 ip link show s1-eth1 # s2容器替换为s2-eth1
输出中要确保s1-eth1是s1网桥的成员,且state UP。
3. 检查OVS流表是否正确下发
确认POX控制器的集线器流表已生效,在容器内执行:
ovs-ofctl dump-flows s1 # s2容器替换为s2
正常应该看到一条优先级为0的泛洪流表:
cookie=0x0, duration=..., table=0, n_packets=0, n_bytes=0, priority=0 actions=FLOOD
4. 验证容器路由表
确保容器的路由指向OVS网桥,执行:
route -n
应该存在类似这条路由:
10.0.0.0/24 dev s1 proto kernel scope link src 10.0.0.1
5. 临时关闭iptables测试(可选)
Docker容器默认的iptables规则可能拦截流量,暂时关闭来排除干扰:
iptables -F iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT
三、测试连通性
完成上述调整后,在s1容器内执行:
ping 10.0.0.2
此时应该能收到s2的响应。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

