Neutron-l3-agent 创建Router流程所执行的命令序列
Vrouter的创建主要分为6个步骤:
1、创建Vrouter的命名空间 2、拉取firewall-rule并应用到iptables 3、启动neutron-ns-metadata-proxy 4、添加qr设备 5、添加qg设备 6、配置floating IP
对于每一个步骤,neutron会执行的ip命令如下(省略了ip netns list这种显示的命令):
1、创建router命名空间
A、sudo ip netns add qrouter-*** B、sudo ip netns exec qrouter-*** ip link set lo up C、sudo ip netns exec qrouter-*** sysctl –w net.ipv4.ip_forward=1 D、添加filter_rule和nat_rule i、 INPUT –s 0.0.0.0/0 –d 127.0.0.1 –p tcp –m tcp –dport 9999 –j ACCEPT ii、PREROUTING –s 0.0.0.0/0 –d 169.254.169.254/32 –p tcp –m tcp –dport 80 –j REDIRECT –to-port 9999 E、刷新iptables,应用新规则 i、 sudo ip netns exec qrouter-*** iptables-save -c ii、sudo ip netns exec qrouter-*** iptables-restore -c
2、拉取firewall-rule chains并刷新到iptables
A、sudo ip netns exec qrouter-*** iptables-save -c B、sudo ip netns exec qrouter-*** iptables-restore -c
3、启动neutron-ns-metadata-proxy
A、sudo ip netns exec qrouter-**** neutron-ns-metadata-proxy --pid_file=/***/neutron_state/external/pids/****.pid --metadata-proxy-socket=/***/neutron_state/metadata_proxy --router_id=**** --state_path=/***/neutron_state --metadata_port=9999 --debug --log_file=neutron-ns-metadata-proxy-***.log --log_dir=/***/logs
4、添加qr设备
A、sudo ovs-vsctl -- --if-exists del-port qr-*** -- add-port br-int qr-*** -- set Interface qr-*** type=internal -- set Interface qr-*** external-ids:iface-id=*** -- set Interface qr-*** external-ids:iface-status=active -- set Interface qr-*** external-ids:attached-mac=*** B、sudo ip link set qr-*** address *** C、sudo ip link set qr-*** netns qrouter-*** D、sudo ip netns exec qrouter-*** ip link set qr-*** up E、sudo ip netns exec qrouter-*** ip -4 addr add 192.168.0.1/16 brd 192.168.255.255 scope global dev qr-*** F、sudo arping -A -I $interface -c 0 $ip_address
5、添加qg设备
A、sudo ovs-vsctl -- --if-exists del-port qg-*** -- add-port br-ex qg-*** -- set Interface qg-*** type=internal -- set Interface qg-*** external-ids:iface-id=*** -- set Interface qg-*** external-ids:iface-status=active -- set Interface qg-*** external-ids:attached-mac=** B、sudo ip link set qg-*** address *** C、sudo ip link set qg-*** netns qrouter-*** D、sudo ip netns exec qrouter-*** ip link set qg-*** up E、sudo ip netns exec qrouter-*** ip -4 addr add 81.40.1.243/18 brd 81.40.63.255 scope global dev qg-*** F、sudo arping -A -I $interface -c 0 $ip_address G、sudo ip netns exec qrouter-*** route add default gw 81.40.0.1
6、配置floating IP
A、先清理iptables里关于floatingip的所有规则,然后遍历这个router的所有floating IP,往ipv4['nat']添加floatingip规则,最后刷新iptables,apply新规则 i、 sudo ip netns exec qrouter-*** iptables-save -c ii、sudo ip netns exec qrouter-*** iptables-restore -c B、遍历router的所有floating ip,确保都被配置了,并进行地址添加操作 i、 sudo ip netns exec qrouter-*** ip -4 addr add 81.40.6.99/18 brd 81.40.63.255 scope global dev qg-*** ii、sudo arping -A -I $interface -c 0 $ip_address