neutronÍøÂçÄ¿µÄÊÇΪOpenStackÔÆ¸üÁé»îµÄ»®·ÖÍøÂ磬ÔÚ¶à×â»§µÄ»·¾³ÏÂÌṩ¸øÃ¿¸ö×â»§¶ÀÁ¢µÄÍøÂç»·¾³¡£
neutron»ìºÏʵʩÁ˵ڶþ²ãµÄVLANºÍµÚÈý²ãµÄ·ÓÉ·þÎñ£¬Ëü¿ÉΪ֧³ÖµÄÍøÂçÌṩ·À»ðǽ£¬¸ºÔؾùºâÒÔ¼°IPSec
VPNµÈÀ©Õ¹¹¦ÄÜ¡£
neutronÊÇopenstackÖÐÒ»¸öÖØÒªÄ£¿é£¬Ò²ÊDZȽÏÄÑÀí½âºÍdebugµÄÄ£¿éÖ®Ò»¡£
Ò»¡¢·ÖÎö¾µäµÄÈý¸ö½ÚµãµÄHavanaµÄOpenStackÖÐÍøÂç

ͼ1£ºÈý½ÚµãopensÍøÂç
·ÖΪÈý¸öÍøÂ磺
1¡¢External Network/API Network£¬Õâ¸öÍøÂçÊÇÁ´½ÓÍâÍøµÄ£¬ÎÞÂÛÊÇÓû§µ÷ÓÃOpenStackµÄAPI£¬»¹ÊÇ´´½¨³öÀ´µÄÐéÄâ»úÒª·ÃÎÊÍâÍø£¬»òÕßÍâÍøÒªsshµ½ÐéÄâ»ú£¬¶¼ÐèҪͨ¹ýÕâ¸öÍøÂç
2¡¢Data Network£¬Êý¾ÝÍøÂ磬ÐéÄâ»úÖ®¼äµÄÊý¾Ý´«Êäͨ¹ýÕâ¸öÍøÂçÀ´½øÐУ¬±ÈÈçÒ»¸öÐéÄâ»úÒªÁ¬½Óµ½ÁíÒ»¸öÐéÄâ»ú£¬ÐéÄâ»úÒªÁ¬½ÓÐéÄâ·Óɶ¼ÊÇͨ¹ýÕâ¸öÍøÂçÀ´½øÐÐ
3¡¢Management Network£¬¹ÜÀíÍøÂ磬OpenStack¸÷¸öÄ£¿éÖ®¼äµÄ½»»¥£¬Á¬½ÓÊý¾Ý¿â£¬Á¬½ÓMessage
Queue¶¼ÊÇͨ¹ýÕâ¸öÍøÂçÀ´½øÐС£
½«ÕâÈý¸öÍøÂç¸ôÀ룬һ·½ÃæÊǰ²È«£¬ÔÚÐéÄâ»úÀïÃæ£¬ÎÞÂÛ²ÉÓÃʲôÊֶΣ¬¸ÉÈŵͼ½ö½öÊÇData Network£¬¶¼²»¿ÉÄÜ·ÃÎʵ½ÎÒµÄÊý¾Ý¿â¡£Ò»·½ÃæÊÇÁ÷Á¿·ÖÀ룬Management
NetworkµÄÁ÷Á¿²»ÊǺܴóµÄ£¬¶øÇÒÒ»°ã¶¼»á±È½ÏÓÅÑŵÄʹÓ㬶øData NetworkºÍExternal
Network¾ÍÐèÒªÓÐÁ÷Á¿¿ØÖƲßÂÔ¡£
Õâ¸öÍøÂç½á¹¹ÓÐµãÆæ¹Ö£¬³ýÁËControlller½ÚµãÊÇÁ½ÕÅÍø¿¨Ö®Í⣬ÆäËûµÄ¶¼¶àÁËÒ»ÕÅÍø¿¨Á¬½Óµ½External
Network¡£Õâ¸öÍø¿¨ÊÇÓÃÀ´×öapt-getµÄ£¬ÒòΪCompute Node°´ËµÊÇûÓÐÍø¿¨Á¬½Óµ½ÍâÍøµÄ£¬ÎªÁËapt-getÌí¼ÓÁËeth0£»NetWork
NodeËäÈ»ÓÐÒ»¸öÍø¿¨eth1ÊÇÁ¬½ÓÍâÍøµÄ£¬¶øÔÚneutronÅäÖúÃ֮ǰ£¬Õâ¸öÍø¿¨Í¨³£ÊÇûÓÐIPµÄ£¬ÎªÁËapt-getÒ²Ìí¼ÓÁËeth0;ÓÐÈË˵¿ÉÒÔͨ¹ýroute¹æÔò¶¼Í¨¹ýControllerÁ¬½Óµ½ÍâÍø£¬µ«ÊǶÔÓÚ³õѧÕߣ¬ÕâÑù±È½ÏÈÝÒײÙ×÷¡£
¶þ¡¢neutronÈý¸ö½Úµã¼ò½é
neutronÊÇÓÃÀ´´´½¨ÐéÄâÍøÂçµÄ£¬ËùνÐéÄâÍøÂ磬¾ÍÊÇÐéÄâ»úÆô¶¯µÄʱºò»áÓÐÒ»¸öÐéÄâÍø¿¨£¬ÐéÄâÍø¿¨»áÁ¬½Óµ½ÐéÄâswitchÉÏ£¬ÐéÄâ½»»»»úÁ¬½Óµ½ÐéÄârouterÉÏ£¬ÐéÄâ·ÓÉÆ÷×îÖÕºÍÎïÀíÍø¿¨ÁªÍ¨£¬´Ó¶øÐéÄâÍøÂçºÍÎïÀíÍøÂçÁªÍ¨ÆðÀ´¡£
neutron·Ö³É¶à¸öÄ£¿é·Ö²¼ÔÚÈý¸ö½ÚµãÉÏ¡£
1.Controller½Úµã£º
neutron-server£¬ÓÃÓÚ½ÓÊÜAPIÇëÇó´´½¨ÍøÂ磬×ÓÍø£¬Â·ÓÉÆ÷µÈ£¬È»¶ø´´½¨µÄÕâЩ¶«Î÷½ö½öÊÇһЩÊý¾Ý½á¹¹ÔÚÊý¾Ý¿âÀïÃæ
2.Network½Úµã£º
neutron-l3-agent£¬ÓÃÓÚ´´½¨ºÍ¹ÜÀíÐéÄâ·ÓÉÆ÷£¬µ±neutron-server½«Â·ÓÉÆ÷µÄÊý¾Ý½á¹¹´´½¨ºÃ£¬neutron-l3-agentÊÇ×ö¾ßÌåÊÂÇéµÄ£¬ÕæÕýµÄµ÷ÓÃÃüÁîÐн«ÐéÄâ·ÓÉÆ÷£¬Â·ÓÉ±í£¬namespace£¬iptables¹æÔòÈ«²¿´´½¨ºÃ¡£
neutron-dhcp-agent£¬ÓÃÓÚ´´½¨ºÍ¹ÜÀíÐéÄâDHCP server£¬Ã¿¸öÐéÄâÍøÂç¶¼»áÓÐÒ»¸öDHCP
server£¬Õâ¸öDHCP serverΪÕâ¸öÐéÄâÍøÂçÀïÃæµÄÐéÄâ»úÌṩIP¡£
neutron-openvswitch-plugin-agent£¬Õâ¸öÊÇÓÃÓÚ´´½¨L2µÄswitchµÄ£¬ÔÚNetwork½ÚµãÉÏ£¬RouterºÍDHCP
Server¶¼»áÁ¬½Óµ½¶þ²ãµÄswitchÉÏ¡£
3.Compute½Úµã£º
neutron-openstackvswitch-plugin-agent£¬Õâ¸öÊÇÓÃÓÚ´´½¨L2²ãswitchµÄ£¬ÔÚcompute½ÚµãÉÏ£¬ÐéÄâ»úµÄÍø¿¨Ò²ÊÇÁ¬½Óµ½¶þ²ãµÄswitchÉÏ¡£
Èý¡¢×â»§ÍøÂç´´½¨¹ý³Ì
µ±ÎÒÃǴºÃÁËOpenStack£¬È»ºó´´½¨ºÃÁËtenantºó£¬ÎÒÃÇ»áΪÕâ¸ötenant´´½¨Ò»¸öÍøÂç¡£

ͼ2£º×â»§ÍøÂç´´½¨¹ý³Ì
½áºÏÉÏͼ˵Ã÷¸øÒ»¸ö×â»§´´½¨ÍøÂçµÄÁ÷³Ì£º
1¡¢ÎªÕâ¸öTenant´´½¨Ò»¸öprivate network£¬²»Í¬µÄprivate networkÊÇÐèҪͨ¹ýVLAN
tagging½øÐиôÀëµÄ£¬»¥ÏàÖ®¼ä¹ã²¥£¨broadcast£©²»Äܵ½´ï£¬ÕâÀïÎÒÃÇÎÒÃÇÓõÄÊÇGREģʽ£¬Ò²ÐèÒªÒ»¸öÀàËÆVLANIDµÄ¶«Î÷£¬³ÆÎªSegment
ID
2¡¢Îªprivate network´´½¨Ò»¸ösubnet£¬subnet²ÅÊÇÕæÕýÅäÖÃIPÍø¶ÎµÄµØ·½£¬¶ÔÓÚË½Íø£¬ÎÒÃdz£³£ÓÃ192.168.0.0/24Õâ¸öÍø¶Î
3¡¢ÎªÕâ¸öTenant´´½¨Ò»¸öRouter,²ÅÄܹ»·ÃÎÊÍâÍø
4¡¢½«private networkÁ¬½Óµ½RouterÉÏ
5¡¢´´½¨Ò»¸öExternal Network
6¡¢´´½¨Ò»¸öExternal NetworkµÄSubnet,Õâ¸öÍâÍøÂß¼ÉÏ´ú±íÁËÎÒÃÇÊý¾ÝÖÐÐĵÄÎïÀíÍøÂ磬ͨ¹ýÕâ¸öÎïÀíÍøÂ磬ÎÒÃÇ¿ÉÒÔ·ÃÎÊÍâÍø¡£Òò¶øPUBLIC_GATEWAYÓ¦¸ÃÉèΪÊý¾ÝÖÐÐÄÀïÃæµÄGateway£¬PUBLCI_RANGEÒ²Ó¦¸ÃºÍÊý¾ÝÖÐÐĵÄÎïÀíÍøÂçµÄCIDRÒ»Ö£¬·ñÔòÁ¬²»Í¨¡£Ö®ËùÒÔÉèÖÃPUBLIC_STARTºÍPUBLIC_END£¬ÊÇÒòΪÔÚÊý¾ÝÖÐÐÄÖУ¬²»¿ÉÄÜËùÓеÄIPµØÖ·¶¼¸øOpenStackʹÓã¬ÁíÍâµÄ¿ÉÄܴÁËVMware
Vcenter£¬¿ÉÄÜÓÐÎïÀí»ú£¬ËùÒÔ½ö½ö·ÖÅäÒ»¸öÇø¼ä¸øOpenStackÀ´Óá£
7¡¢½«RouterÁ¬½Óµ½External Network
¾¹ýÕâ¸öÁ÷³Ì£¬´ÓÐéÄâÍøÂçµ½ÎïÀíÍøÂç¼´Âß¼ÉÏÁªÍ¨ÁË¡£
´úÂëÁ÷³ÌÈçÏ£º
#!/bin/bash
TENANT_NAME="openstack"
TENANT_NETWORK_NAME="openstack-net"
TENANT_SUBNET_NAME="${TENANT_NETWORK_NAME}-subnet"
TENANT_ROUTER_NAME="openstack-router"
FIXED_RANGE="192.168.0.0/24"
NETWORK_GATEWAY="192.168.0.1"
PUBLIC_GATEWAY="172.24.1.1"
PUBLIC_RANGE="172.24.1.0/24"
PUBLIC_START="172.24.1.100"
PUBLIC_END="172.24.1.200"
TENANT_ID=$(keystone tenant-list | grep " $TENANT_NAME " | awk '{print $2}')
(1) TENANT_NET_ID=$(neutron net-create --tenant_id $TENANT_ID
$TENANT_NETWORK_NAME --provider:network_type gre
--provider:segmentation_id 1 | grep " id " | awk '{print $4}')
(2) TENANT_SUBNET_ID=$(neutron subnet-create --tenant_id $TENANT_ID
--ip_version 4 --name $TENANT_SUBNET_NAME $TENANT_NET_ID $FIXED_RANGE
--gateway $NETWORK_GATEWAY --dns_nameservers list=true 8.8.8.8 | grep "
id " | awk '{print $4}')
(3) ROUTER_ID=$(neutron router-create --tenant_id
$TENANT_ID $TENANT_ROUTER_NAME | grep " id " | awk '{print $4}')
(4) neutron router-interface-add $ROUTER_ID $TENANT_SUBNET_ID
(5) neutron net-create public --router:external=True
(6) neutron subnet-create --ip_version 4 --gateway $PUBLIC_GATEWAY
public $PUBLIC_RANGE --allocation-pool
start=$PUBLIC_START,end=$PUBLIC_END --disable-dhcp --name public-subnet
(7) neutron router-gateway-set ${TENANT_ROUTER_NAME} public |
ËÄ¡¢GREģʽÏÂÍøÂçϸ½Ú
´´½¨ÍêÍøÂ磬Èç¹û²»´´½¨ÐéÄâ»ú£¬ÎÒÃÇ·¢ÏÖneutronµÄagent»¹ÊÇ×öÁ˺ܶ๤×÷µÄ£¬´´½¨Á˺ܶàÐéÄâÍø¿¨ºÍswitch¡£
ÔÚcompute½ÚµãÉÏ£º
root@ComputeNode:~# ip addr ¡¾ÏÔʾËùÓнӿڵÄIPÐÅÏ¢¡¿
1: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:49:5c:41 brd ff:ff:ff:ff:ff:ff inet 172.24.1.124/22 brd 16.158.167.255 scope global eth0 2: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:8e:42:2c brd ff:ff:ff:ff:ff:ff inet 192.168.56.124/24 brd 192.168.56.255 scope global eth2 3: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:68:92:ce brd ff:ff:ff:ff:ff:ff inet 10.10.10.124/24 brd 10.10.10.255 scope global eth3 4: br-int: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN link/ether d6:2a:96:12:4a:49 brd ff:ff:ff:ff:ff:ff 5: br-tun: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN link/ether a2:ee:75:bd:af:4a brd ff:ff:ff:ff:ff:ff 6: qvof5da998c-82: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether c2:7e:50:de:8c:c5 brd ff:ff:ff:ff:ff:ff 7: qvbf5da998c-82: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether c2:33:73:40:8f:e0 brd ff:ff:ff:ff:ff:ff |
root@ComputeNode:~# ovs-vsctl show ¡¾²é¿´open vswitchÍøÇÅ¡¿
39f69272-17d4-42bf-9020-eecc9fe8cde6 Bridge br-int Port patch-tun Interface patch-tun type: patch options: {peer=patch-int} Port br-int Interface br-int type: internal Bridge br-tun Port patch-int Interface patch-int type: patch options: {peer=patch-tun} Port "gre-1" Interface "gre-1" type: gre options: {in_key=flow, local_ip="10.10.10.124", out_key=flow, remote_ip="10.10.10.121"} Port br-tun Interface br-tun type: internal ovs_version: "1.10.2" |
ÔÚNetwork ½ÚµãÉÏ£º
root@NetworkNode:~# ip addr ¡¾ÏÔʾËùÓнӿڵÄIPÐÅÏ¢¡¿
1: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:22:8a:7a brd ff:ff:ff:ff:ff:ff inet 172.24.1.121/22 brd 172.24.1.255 scope global eth0 2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:f1:31:81 brd ff:ff:ff:ff:ff:ff 3: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:56:7b:8a brd ff:ff:ff:ff:ff:ff inet 192.168.56.121/24 brd 192.168.56.255 scope global eth2 4: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:26:bc:84 brd ff:ff:ff:ff:ff:ff inet 10.10.10.121/24 brd 10.10.10.255 scope global eth3 5: br-ex: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN link/ether 08:00:27:f1:31:81 brd ff:ff:ff:ff:ff:ff inet 172.24.1.8/24 brd 172.24.1.255 scope global br-ex 6: br-int: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN link/ether 22:fe:f1:9b:29:4b brd ff:ff:ff:ff:ff:ff 7: br-tun: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN link/ether c6:ea:94:ff:23:41 brd ff:ff:ff:ff:ff:ff |
oot@NetworkNode:~# ip netns ¡¾ÁгöÍøÂçÃüÃû¿Õ¼ä¡¿
qrouter-b2510953-1ae4-4296-a628-1680735545ac qdhcp-96abd26b-0a2f-448b-b92c-4c98b8df120b |
oot@NetworkNode:~# ip netns exec qrouter-b2510953-1ae4-4296-a628-1680735545ac
ip addr ¡¾ÀûÓÃÍøÂçÃüÃû¿Õ¼ä½øÐвÙ×÷¡¿
8: qg-97040ca3-2c: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN link/ether fa:16:3e:26:57:e3 brd ff:ff:ff:ff:ff:ff inet 172.24.1.100/24 brd 172.24.1.255 scope global qg-97040ca3-2c 11: qr-e8b97930-ac: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN link/ether fa:16:3e:43:ef:16 brd ff:ff:ff:ff:ff:ff inet 192.168.0.1/24 brd 192.168.0.255 scope global qr-e8b97930-ac |
root@NetworkNode:~# ip netns exec qdhcp-96abd26b-0a2f-448b-b92c-4c98b8df120b
ip addr ¡¾ÀûÓÃÍøÂçÃüÃû¿Õ¼ä½øÐвÙ×÷¡¿
9: tapde5739e1-95: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN link/ether fa:16:3e:19:8c:67 brd ff:ff:ff:ff:ff:ff inet 192.168.0.2/24 brd 192.168.0.255 scope global tapde5739e1-95 inet 169.254.169.254/16 brd 169.254.255.255 scope global tapde5739e1-95 |
root@NetworkNode:~# ovs-vsctl show ¡¾²é¿´open vswitchµÄÍøÂç״̬¡¿
d5d5847e-1c9e-4770-a68c-7a695b7b95cd Bridge br-ex Port "qg-97040ca3-2c" Interface "qg-97040ca3-2c" type: internal Port "eth1" Interface "eth1" Port br-ex Interface br-ex type: internal Bridge br-int Port patch-tun Interface patch-tun type: patch options: {peer=patch-int} Port "tapde5739e1-95" tag: 1 Interface "tapde5739e1-95" type: internal Port br-int Interface br-int type: internal Port "qr-e8b97930-ac" tag: 1 Interface "qr-e8b97930-ac" type: internal Bridge br-tun Port patch-int Interface patch-int type: patch options: {peer=patch-tun} Port "gre-2" Interface "gre-2" type: gre options: {in_key=flow, local_ip="10.10.10.121", out_key=flow, remote_ip="10.10.10.124"} Port br-tun Interface br-tun type: internal ovs_version: "1.10.2" |
ÕâʱÈç¹ûÎÒÃÇÔÚÕâ¸öÍøÂçÀï´´½¨Ò»¸öÐéÄâ»ú£¬ÔÚCompute Node¶àÁËÏÂÃæµÄÍø¿¨£º
13: qvof5da998c-82: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether c2:7e:50:de:8c:c5 brd ff:ff:ff:ff:ff:ff 14: qvbf5da998c-82: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether c2:33:73:40:8f:e0 brd ff:ff:ff:ff:ff:ff 15: qbr591d8cc4-df: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP link/ether f2:d9:f0:d5:48:c8 brd ff:ff:ff:ff:ff:ff 16: qvo591d8cc4-df: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether e2:58:d4:dc:b5:16 brd ff:ff:ff:ff:ff:ff 17: qvb591d8cc4-df: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master qbr591d8cc4-df state UP qlen 1000 link/ether f2:d9:f0:d5:48:c8 brd ff:ff:ff:ff:ff:ff 18: tap591d8cc4-df: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master qbr591d8cc4-df state UNKNOWN qlen 500 link/ether fe:16:3e:6e:ba:d0 brd ff:ff:ff:ff:ff:ff |
Èç¹ûÎÒÃǰ´ÕÕovs-vsctl showµÄÍø¿¨ÇŽӹØÏµ£¬±ã¿ÉÒÔ»³öÏÂÃæµÄͼ

ͼ3£ºGREÍøÂç
GREÍøÂçÔÀí£º
¼ÙÉèÐéÄâ»úVM0Íø¿¨eth0ÓÐÍøÂçÊý¾Ý°üÏòÍâÍø·¢ËÍ£¬ÄÇôÊý¾Ý»áÒÀ´Î¾¹ýqbr Linux BridgeÉ豸£¬qvbºÍqvoÐéÄâÍøÂçÉ豸£¬µ½´ïOVSÍøÇÅbr-intÉÏ£¬br-int½«Êý¾Ý°üattachµ½OVSÍøÇÅbr-tunÉÏ£¬Êý¾Ý°üÔÙ´Ócompute½ÚµãOVSÍøÇŵÄbr-tunºÍnetwork½ÚµãOVSÍøÇÅbr-tun¹¹³ÉµÄGREËíµÀ´©¹ý£¬½»¸¶µ½Network½ÚµãµÄOVSÍøÇÅbr-intÉÏ£»ÍøÂç½ÚµãµÄbr-intͨ¹ýqrÉ豸½èÖúLinuxÃüÃû¿Õ¼äqrouterÁ¬Í¨µ½br-exÉϵÄqgÉ豸£¬½«Êý¾Ý°ü½»¸¶µ½OVSÍøÇÅbr-exÉÏ£¬×îºóbr-exͨ¹ýÍøÂç½ÚµãµÄÍⲿÎäÁ¦¶Ë¿Úeth1°ÑÊý¾Ý°ü´«Ë͵½Íⲿ·ÓÉÆ÷µÄÍø¹Ø¡£
Î塢ͨ¹ýÀý×ÓÀí½âGREÍøÂç
openstackΪʲôҪ´´½¨Õâô¶àµÄÐéÄâÍø¿¨£¿
ÕâÐ©Íø¿¨¿´ÆðÀ´¸´ÔÓ£¬È´ÊǸ÷ÓÐÓô¦£¬ÕâÖÖÐéÄâÍøÂçÍØÆË£¬ÕýÊÇÎÒÃǾ³£Ê¹ÓõÄÎïÀíÍøÂçµÄÍØÆË½á¹¹¡£
ÏÂÃæÍ¨¹ýÒ»¸ö·Ç³£ÈÝÒ×Àí½âµÄÀý×ÓÀ´Öð²½·ÖÎögreÍøÂç¡£
ÎÒÃÇÏÈÀ´»Øµ½Ò»¸ö×î×îÊìϤ²»¹ýµÄ³¡¾°£¬ÎÒÃǵĴóѧÇÞÊÒ£¬µ±Ê±ÎÒÃÇ»¹Âò²»Æð·ÓÉÆ÷£¬ËùÒÔÒ»°ã²ÉÈ¡µÄ·½·¨ÈçÏÂͼËùʾ£º
ÇÞÊÒ³¤µÄ»úÆ÷ÉÏŪÁ½ÕÅÍø¿¨£¬ÇÞÊÒÂòÒ»¸öHUB£¬ÆäËûÈ˵ĵçÄÔ¶¼½Óµ½HUBÉÏ£¬ÇÞÊÒ³¤µÄµçÄÔµÄÁ½ÕÅÍø¿¨Ò»ÕŶÔÍâÁ¬½ÓÍøÂ磬һÕŶÔÄÚÁ¬½ÓHUB¡£ÇÞÊÒ³¤µÄµçÄÔÆäʵ³äµ±µÄ±ãÊÇ·ÓÉÆ÷µÄ×÷Óá£
ºóÀ´Ìõ¼þºÃÁË£¬Â·ÓÉÆ÷Ò²±ãÒËÁË£¬ËùÒԺܶà¼ÒÍ¥Ò²ÊÇÀàËÆµÄÍØÆË½á¹¹£¬Ö»²»¹ý½«Computer1ºÍswitchºÏÆðÀ´£¬±ä³ÉÁËÒ»¸ö·ÓÉÆ÷£¬Â·ÓÉÆ÷Ò²ÊÇÓжà¸ö¿ÚÒ»¸öÁ¬½ÓWLAN£¬Ò»¸öÁ¬½ÓLAN¡£

ͼ4
ÏÖÔÚÎÒÃÇÏëÏóÒ»¸öÇÞÊÒ±ä³ÉÁËһ̨Hypervisor£¬ËùÓеĵçÄÔ¶¼±ä³ÉÁËÐéÄâ»ú£¬¾Í±ä³ÉÁËÏÂÃæµÄÑù×Ó£º

ͼ5£ºµ¥½ÚµãµÄopenstackµÄÍøÂç½á¹¹
ÎÒÃÇÏȺöÂÔqbrºÍDHCP Server£¬ÒÔ¼°namespace¡£
br-int¾ÍÊÇÇÞÊÒÀïµÄHUB£¬ËùÓÐÐéÄâ»ú¶¼»áÁ¬½Óµ½Õâ¸öswitchÉÏ£¬ÐéÄâ»úÖ®¼äµÄÏ໥ͨОÍÊÇͨ¹ýbr-intÀ´µÄ¡£
Router¾ÍÊÇÇÞÊÒ³¤µÄµçÄÔ£¬Ò»±ßÁ¬½ÓÔÚbr-intÉÏ£¬Ò»±ßÁ¬½ÓÔÚ¶ÔÍâµÄÍø¿ÚÉÏ£¬br-ex/eth0ÍâÃæ¾ÍÊÇÎÒÃǵÄÎïÀíÍøÂç¡£
ͼ5Æäʵ¾ÍÊǵ¥½ÚµãµÄopenstackµÄÍøÂç½á¹¹£¬ËäÈ»¸´ÔÓ£¬µ«ÊǾÍÊǰÑÎÒÃǼÒÀïµÄ£¬»òÕßÇÞÊÒÀïÃæµÄÎïÀí»ú°áµ½Ò»¸öHypervisorÉÏÁË£¬Æä½á¹¹¾Í²»ÄÑÀí½âÁË¡£
µ±È»µ¥½ÚµãµÄopenstack²»¹ýÊǸö²âÊÔ»·¾³£¬compute½ÚµãºÍnetwork½ÚµãÒ²ÊÇÒª·Ö¿ªµÄ£¬Èçͼ3£¬Ã¿¸ö»úÆ÷É϶¼ÓÐÁË×Ô¼ºµÄbr-int¡£
Áù¡¢GREÍøÂçÔÀí½øÒ»²½Àí½â
ÒÔÏÂÄÚÈݿɶԱÈͼ3À´Àí½â
£¨1£©DHCP
Ϊʲô»áÓиöDHCP ServerÄØ£¬ÊÇͬһ¸öprivate networkÀïµÄÐéÄâ»úµÃµ½IP¶¼ÊÇͨ¹ýÕâ¸öDHCP
ServerÀ´µÄ£¬Õâ¸öDHCP ServerÒ²ÊÇÁ¬½Óµ½br-intÉϺÍÐéÄâ»ú½øÐÐͨÐŵġ£
£¨2£©qbr
¼ÈÈ»qbrºÍbr-int¶¼ÊÇÍøÇÅ£¬ÎªÊ²Ã´²»Ö±½ÓÁ¬µ½br-int£¬»¹ÒªÍ¨¹ýqbr,qvb,qvoÆñ²»ÊǶàÓ࣬Ϊʲô»áÓÐqbrÄØ£¿ÕâÊǺÍsecurity
groupµÄ¸ÅÄîÓйء£¼òµ¥Ëµ¾ÍÊÇOVSÍøÇÅbr-intûÓÐÉèÖÃiptables¹æÔòµÄ¹¦ÄÜ£¬µ«openstackÓÖÒªÌṩ°²È«×é·þÎñ£¬¾Í½èÖúÁËLinux
bridge(qbr)µÄ¹¦ÄÜ£¬ËäÈ»OVSµÄbr-intºÍlinux bridge (qbr)¶¼ÊǶþ²ãÍøÇÅ£¬µ«ÊÇΪÁ˹¦ÄÜ»¥²¹¾Íͬʱ³öÏÖÁË¡£¾ßÌåÁ˽⣬openstackÖеÄsecurity
group¿ªÍ¨ÄÄЩ¶Ë¿Ú£¬ÆÁ±ÎÄÄЩ¶Ë¿ÚÊÇÓÃiptablesÀ´ÊµÏֵģ¬È»¶øbr-intÕâЩÐéÄâbridge¶¼ÊÇopenvswitch´´½¨µÄ£¬openstackµÄKernel
modeºÍnetfilterµÄkernel mode²»¼æÈÝ¡£Ò»¸öIP°ü½øÀ´ÒªÃ´×ßiptables¹æÔò½øÐд¦Àí£¬ÒªÃ´×ßopenvswitchµÄ¹æÔò½øÐд¦Àí£¬br-intÉÏÓкܶàopenvswitchµÄ¹æÔò£¬±ÈÈçvlan
tagµÈ£¬ËùÒÔiptables±ØÐëÒªÁíÍ⽨Á¢Ò»¸ölinux bridge£¨qbr£©À´×ö£¬Òò¶ø¾ÍÓÐÁËqbr£¬ÔÚÁ˽âÍØÆË½á¹¹µÄʱºò£¬¿ÉÒÔ½«qbrºöÂÔ£¬¿´µ½VMÖ±½ÓÁ¬½Óµ½br-intÉϾͿÉÒÔÁË¡£
£¨3£©namespace
Ϊʲô»áÓÐnamespaceÄØ£¬javaµÄnamespaceÊÇΪÁËÔÚ²»Í¬namespaceÏÂÓÐÏàͬÀàÃû,openstackÒ²Ïë×öµ½ÕâÒ»µã¡£²»Í¬Tenant¶¼´´½¨×Ô¼ºµÄrouterºÍprivate
network£¬±Ë´Ë²»ÖªµÀ±ðÈËÖ¸¶¨ÁËÄÄÐ©Íø¶Î£¬ºÜÓпÉÄÜÁ½¸ötenant¶¼Ö¸¶¨ÁË192.168.0.0/24,ÕâÑù²»Í¬µÄprivate
networkµÄ·ÓÉ±í£¬DHCP Server¾ÍÐèÒª¸ôÀ룬²»È»¾ÍÂÒÁË£¬Òò¶ø¾ÍÓÐÁËnamespace¡£
£¨4£©OVSÒ»Ìå»¯ÍøÇÅbr-int
ÿ¸ö»úÆ÷É϶¼ÓÐÁË×Ô¼ºµÄbr-int£¬µ«ÊǶÔÓÚÐéÄâ»úºÍÐéÄârouterÀ´Ëµ£¬ËüÃÇÈÔÈ»¾õµÃ×Ô¼ºÁ¬½Óµ½ÁËÒ»¸ö´óµÄL2µÄbr-intÉÏ£¬Í¨¹ýÕâ¸öbr-intÏ໥ͨÐŵģ¬ËüÃǸÐÊܲ»µ½br-intÏÂÃæµÄÐéÄâÍø¿¨br-tun¡£ËùÒÔ¶ÔÓÚ¶à½Úµã½á¹¹£¬ÎÒÃÇ¿ÉÒÔÏëÏóbr-intÊÇÒ»¸ö´óµÄ£¬ºá¿çËùÓÐcomputeºÍnetwork½ÚµãµÄ¶þ²ãswitch£¬ÐéÄâ»úÖ®¼äµÄͨÐÅÒÔ¼°ÐéÄâ»úºÍRouterµÄͨÐÅ£¬¾ÍÏñÔÚÒ»¸öÇÞÊÒÒ»ÑùµÄ¡£ÕâÊÇÒ»ÖÖºÜÖØÒªµÄ³éÏó˼ά£¬ºÃÏñopenstack»·¾³ÖÐËùÓÐÐéÄâ»ú¶¼Á¬½Óµ½ÁËÒ»¸ö¾ÞÐ͵ÄÐéÄâ½»»»»úÉÏ¡£
È»¶øbr-int±Ï¾¹±»ÎïÀíµÄ¸î¿ªÁË£¬ÐèÒªÓÐÒ»ÖÖ·½Ê½½«ËûÃÇ´®ÁªÆðÀ´£¬openstackÌṩÁ˶àÖÖ·½Ê½£¬¿ÉÒÔÓÃGRE
tunnel½«²»Í¬»úÆ÷µÄbr-intÁ¬½ÓÆðÀ´£¬Ò²¿ÉÒÔͨ¹ýVLAN½«br-intÁ¬½ÓÆðÀ´£¬µ±È»»¹¿ÉÒÔʹÓÃvxlan¡£
Õâ¾ÍÊÇΪʲôopenstackÓÐÁËbr-intÕâ¸öbridge£¬µ«ÊDz»°ÑËùÓеÄopenvswitchµÄ¹æÔò¶¼ÔÚËüÉÏÃæÊµÏÖ¡£¾ÍÊÇΪÁËÌṩÕâÖÖÁé»îÐÔ£¬¶ÔÓÚÐéÄâ»úÀ´½²£¬¿´µ½µÄÊÇÒ»´óÕû¸öbr-int£¬²»Í¬»úÆ÷µÄbr-int¿ÉÒÔÓжàÖÖ·½Ê½Á¬½Ó£¬ÕâÔÚbr-intÏÂÃæµÄÍø¿¨ÉÏÃæÊµÏÖ¡£
£¨5£©OVSͨµÀÍøÇÅbr-tun
br-tunÒ²ÊÇOVS´´½¨µÄÐéÄâÍøÇÅ£¬ËüÊÇÒ»¸öÖмä²ã£¬½ÓÊÕbr-intµÄÍøÂçÊý¾Ý£¬È»ºóÔÚͨ¹ýÌØ¶¨ÍøÂçÐÒéÓë¸÷¸ö½ÚµãµÄbr-tunÏàÁ¬¹¹³ÉÒ»¸öͨµÀ²ã¡£Èç¹ûËùÓеÄbr-int¹¹³ÉµÄ³éÏó²ã¶¨ÒåΪÐéÄâ¶þ²ãÍøÂ磬ÄÇôËùÓеÄbr-tun¹¹³ÉµÄ³éÏó²ã±ßÉÏÐéÄâÈý²ãÍøÂçÁË¡£
£¨6£©ÍøÂçÊý¾Ý°ü¸ôÀë
Èç¹ûÓв»Í¬µÄTenant£¬´´½¨Á˲»Í¬µÄprivate network£¬ÎªÁËÔÚdata networkÉ϶԰ü½øÐиôÀ룬´´½¨private
networkµÄʱºò£¬ÐèÒªÖ¸¶¨vlanid»òÕßsegmentid¡£
´Óovs-vsctl showÎÒÃÇ¿ÉÒÔ¿´µ½£¬²»Í¬µÄtenantµÄprivate networkÉÏ´´½¨µÄÐéÄâ»ú£¬Á¬½Óµ½br-intÉϵÄʱºòÊÇ´øtagµÄ£¬ËùÒÔ²»Í¬tenantµÄÐéÄâ»ú£¬¼´±ãÁ¬½Óµ½Í¬Ò»¸öbr-intÉÏ£¬ÒòΪtag²»Í¬£¬Ò²ÊDz»ÄÜÏ໥ͨÐŵġ£È»¶øÍ¬Ò»¸ö»úÆ÷ÉϵÄtagµÄ¼ÆÊýÊǽöÔÚ±¾»úÓÐЧµÄ£¬²¢²»Ê¹ÓÃÎÒÃÇ´´½¨private
networkµÄʱºòÖ¸¶¨µÄÈ«¾ÖΨһµÄvlanid»òÕßsegmentid£¬Ò»¸öcompute½ÚµãÉϵÄbr-intÉϵÄtag
1ºÍÁíһ̨compute½ÚµãÉϵÄbr-intµÄtag1ºÜ¿ÉÄÜÊÇÁ½ÂëÊ¡£È«¾ÖµÄvlanidºÍsegmentid½ö½öÔÚbr-intÒÔϵÄÐéÄâÍø¿¨ºÍÎïÀíÍøÂçÖÐʹÓã¬ÐéÄâ»úËùÓÐÄÜ¿´µ½µÄ¶«Î÷£¬µ½br-intΪֹ£¬¿´²»µ½´òͨbr-intËùҪʹÓõÄvlanidºÍsegmentid¡£
´Ó¾Ö²¿ÓÐЧµÄtagingµ½È«¾ÖÓÐЧµÄvlanid»òÕßsegmentidµÄת»»£¬¶¼ÊÇͨ¹ýopenvswitchµÄ¹æÔò£¬ÔÚbr-tun»òÕßbr-eth1ÉÏʵÏÖ¡£
|