pic

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