OpenStack Packstack与OpenDayLight集成后无法访问Provider Network
看起来你在OpenStack Newton和OpenDaylight Nitrogen集成时遇到了实例无法访问Provider Network(除网关外)的问题,我来帮你梳理下可能的原因和解决步骤:
一、验证OpenDaylight的核心配置
1. 确认ACL模式生效
你已经将ACLSERVICE设置为transparent模式,但需要验证配置是否在ODL中实际生效:
- 进入ODL Karaf控制台:
./bin/karaf - 执行命令检查ACL配置:
确保输出中包含config:list | grep netvirt-aclservice-configacl-mode=transparent,如果没有,重新复制配置文件并重启ODL服务。
2. 补全Netvirt相关特性
ODL Nitrogen的Netvirt依赖部分L3特性,你可能缺少关键组件:
- 在Karaf控制台查看已安装的特性:
feature:list | grep -E "(odl-netvirt|odl-l3)" - 确保
odl-l3vpn、odl-l3vpn-neutron、odl-netvirt-providers处于Started状态,若未安装,执行:feature:install odl-l3vpn odl-l3vpn-neutron odl-netvirt-providers
3. 检查ODL日志
查看ODL的核心日志,排查数据包处理或OVS连接错误:
tail -f data/log/karaf.log | grep -E "(PacketIn|OVS|neutron)"
如果看到PacketIn日志,说明ODL收到了实例的数据包,但可能未生成正确的转发流表;如果没有,说明数据包未到达ODL,需要检查OVS连接。
二、修正OVS的Provider映射配置
你的配置中存在一个关键问题:Provider Network的映射应该指向br-ex网桥(而非eth1),因为你已经将eth1添加到br-ex中:
- 在Controller和Compute节点执行:
ovs-vsctl set Open_vSwitch . other_config:provider_mappings=external:br-ex - 重启OVS服务生效:
systemctl restart openvswitch - 验证配置:
确保输出包含ovs-vsctl get Open_vSwitch . other_configprovider_mappings="external:br-ex"。
同时,确认OVS已成功连接到ODL:
ovs-vsctl show
检查Manager和Controller的状态是否为is_connected: true。
三、验证Neutron与ODL的通信
1. 测试API连通性
在Controller节点测试Neutron到ODL的API连接:
curl -u admin:admin http://10.210.210.30:8080/controller/nb/v2/neutron/networks
如果返回正常的网络JSON数据,说明通信正常;如果返回401,检查ml2_conf.ini中的用户名密码;如果返回500,查看ODL日志排查服务错误。
2. 检查Neutron配置
确认/etc/neutron/plugins/ml2/ml2_conf.ini的关键配置:
mechanism_drivers仅保留opendaylight(避免与其他驱动冲突)tenant_network_types设置为vxlanml2_odl段的url、username、password正确无误
同时,查看Neutron服务器日志确认无通信错误:
tail -f /var/log/neutron/server.log
查找Successfully connected to OpenDaylight的日志,确认连接成功。
四、检查流表与路由转发
1. 查看OVS流表
在Controller节点查看br-ex的流表,确认存在允许租户到Provider Network的转发规则:
ovs-ofctl dump-flows br-ex
寻找匹配nw_dst=10.211.211.0/24的流表项,且动作包含NORMAL或转发到对应端口。
2. 验证ODL路由状态
在ODL Karaf控制台查看租户路由器状态:
odl-netvirt:show-routers
确认路由器的外部网关端口已绑定到external网络,且状态为ACTIVE。
五、额外验证
- 在实例中执行
ip route,确认默认路由指向租户网关 - 检查Provider Network的其他设备是否能ping通实例(排除反向防火墙限制)
- 确认Provider Network的网关(10.211.211.1)已开启IP转发功能:
确保输出为sysctl net.ipv4.ip_forwardnet.ipv4.ip_forward = 1
按照以上步骤逐一排查,应该能定位并解决实例无法访问Provider Network全网段的问题。
内容的提问来源于stack exchange,提问作者Zufar Dhiyaulhaq

