DHCP
实例获取不到IP地址
- 首先排查是否是安全组的问题导致dhcp报文传递不过去,查看安全组是否打开UDP协议。
- 排查是否是由系统内部防火墙导致dhcp报文传递不出去,禁用防火墙后问题是否依然存在。
- 排查是否是系统内部服务导致dhcp没有发送discover报文,在系统内使用dhclient命令可以获取到IP。
- 排查dhclient没有启动的原因,发现dhclient应该由NetworkManager启动。NetworkManager之所以没有启动dhclient是因为系统内/etc/sysconfig/network-scripts/ifcfg-enp1s0的配置文件,NetworkManager会忽略/etc/sysconfig/network-scripts/下的网络设备导致会出现device not managed错误导致dhclient不启动,进而云主机拿不到IP地址。
- 解决方法,将/etc/sysconfig/network-scripts/ifcfg-enp1s0删除。
端口转发
基于浮动IP的端口转发
浮动IP端口转发使用户能够将TCP/UDP流量,从Port通过iptables的NAT功能,转发给浮动IP。
部署
在运行neutron-server的所有节点(网络节点)上,修改/etc/neutron/neutron.conf文件。
1 | [DEFAULT] |
在运行neutron-l3-agent的所有节点上,修改/etc/neutron/l3_agent.ini。
1 | [agent] |
重启neutron-server和neutron-l3-agent服务。
1 | systemctl restart neutron-server neutron-l3-agent |
验证。
1 | openstack extension list --network | grep floating-ip-port-forwarding |
操作
创建端口转发
1 | openstack floating ip port forwarding create \ |
36bcd62a-0860-4e22-bf8a-81f5052eff60和825cc4f8-9a1c-4e46-b380-501ba0f9b08d分别是Port和浮动IP的ID。
原理
TODO
HA
多个vip
使用kvm部署多台机器,使用keepalived和haproxy作为集群高可用。发现vIP在多个节点上同时出现,怀疑keepalived配置出问题。
在多个节点上利用tcpdump抓包,vrrp包都能被抓到,但是似乎节点之间收不到vrrp包。
1 | tcpdump -i any vrrp -n |
确保SElinux处于关闭状态。
1 | cat /etc/selinux/config |
检查防火墙是否关闭。
1 | systemtcl status firewalld |
查看iptables规则。
1 | iptables -S |
防火墙一切正常,怀疑是KVM虚拟机的网络问题导致VRRP不能被传输。KVM使用nat网络进行传输时没有问题,在使用macvtap网络会出现上述问题。
查看官方文档,kvm在使用macvtap驱动时,参数trustGuestRxFilters默认否,可能会修改从虚拟机出来的流量的MAC地址,导致网络不可达。
编辑虚拟机配置文件。
1 | ... |
最后如果问题还是复现,将每台虚拟机对应的macvtap网卡设置成混杂模式,问题解决。
1 | ifconfig macvtap5 promisc |
MTU
mtu和网络类型相关。不同网络类型有不同的计算方式。
网络的类型可能的类型有:flat和vlan等。首先:neutron中的配置项global_physnet_mtu定义全局的物理网络的mtu大小,默认是1500。同时,ml2的配置项physical_network_mtus可以为每个物理网络配置不同的mtu。[文档](https://docs.openstack.org/neutron/latest/admin/config-mtu.html)。flat、vlan下mtu取配置项的最小值;gre下先减去20字节的ip头(ipv6是40字节),再减去22字节的gre头;vxlan下先减去20字节的ip头(ipv6是40字节),再减去30字节的vxlan头。
对于实例的mtu(也就是tap设备),在neutron中以port的形式存在,port的mtu应该等于port所在网络的mtu的大小。
单网卡部署
OpenvSwtich
单网卡部署neutron-openvswitch-agent时,需要事先添加ovs网桥。
1 | ovs-vsctl add-br br-ex |
Linux Bridge
单网卡部署neutron-linuxbridge-agent时,需要事先添加linux bridge网桥。
1 | brctl addbr br-ex |