openstack(liberty): 简单网络连接图

openstack起初的网络部分是和计算核心nova合在一起的,后来被拆分出来,独立成为一个模块, 现在名为Neutron.

本博文是学习记录,记录的是基于GRE tunnel技术的neutron和计算主机之间的连接和通信流程。下面直接上图,结合图做一些简单的介绍(这些介绍的内容,主要来自RDO。)

在介绍上面这个图之前,需要简单的介绍一下,什么是GRE tunnel。

  • GRE(Generic Routing Encapsulation):通用路由封装协议。
  • GRE是VPN的第三层隧道协议,采用了隧道(Tunnel)技术。
  • Tunnel是虚拟的点对点连接,即点对点连接的虚拟接口。

至于更详细的内容,可以google。

下面就对neutron网络做简单的介绍,了解这个后,对openstack的深入学习,会有很大的帮组。因为我个人觉得,云计算里面,网络的虚拟化和管理,是相对比较难的一块,比起存储和计算的虚拟化要难。

网络连接图的Compute Host中,qbr是Linux bridge,虚拟出来的。这个主要是处理openstack的security group的,虽然openstack的网络核心部分采用的是open vswitch,但是这个和iptables规则不兼容,所以,安全策略就落在了虚拟出来的Linux bridge上了。后续,这个linux bridge可以看作firewall bridge。

在具体介绍之前,我先查看下我的测试环境devstack中的网络设备之间的连接关系:

 1 [[email protected]10-121-5-244 ~]# ovs-vsctl show
 2 56f3ae0a-87b4-4050-bc79-9a92a76590e3
 3     Bridge br-ex
 4         Port "qg-5d13ee78-0a"
 5             Interface "qg-5d13ee78-0a"
 6                 type: internal
 7         Port br-ex
 8             Interface br-ex
 9                 type: internal
10     Bridge br-tun
11         fail_mode: secure
12         Port patch-int
13             Interface patch-int
14                 type: patch
15                 options: {peer=patch-tun}
16         Port br-tun
17             Interface br-tun
18                 type: internal
19     Bridge br-int
20         fail_mode: secure
21         Port "qr-c36567ef-4d"
22             tag: 1
23             Interface "qr-c36567ef-4d"
24                 type: internal
25         Port patch-tun
26             Interface patch-tun
27                 type: patch
28                 options: {peer=patch-int}
29         Port "qr-2e4c72e5-5f"
30             tag: 1
31             Interface "qr-2e4c72e5-5f"
32                 type: internal
33         Port br-int
34             Interface br-int
35                 type: internal
36         Port "tapf2d4361c-39"
37             tag: 1
38             Interface "tapf2d4361c-39"
39                 type: internal
40     ovs_version: "2.4.0"

Compute host: instance networking (A,B,C)

An outbound packet starts on eth0 of the virtual instance, which is connected to a tap device on the host, tap7c7ae61e-05. This tap device is attached to a Linux bridge device, qbr7c7ae61e-05.

Ideally, the TAP device vnet0 would be connected directly to the integration bridge, br-int. Unfortunately, this isn‘t possible because of how OpenStack security groups are currently implemented. OpenStack uses iptables rules on the TAP devices such as vnet0 to implement security groups, and Open vSwitch is not compatible with iptables rules that are applied directly on TAP devices that are connected to an Open vSwitch port.

Compute Host图中,A, Q都是vnet0,也就是虚拟机的网络接口,B/C 以及 R/S都是Linux bridge的tap设备,防火墙的规则就是设置在linux bridge (qbr)的对应tap上的。

Compute host: integration bridge (D,E)

The integration bridge, br-int, performs VLAN tagging and un-tagging for traffic coming from and to your instances.

这个过程,br-int相当于一个VLAN的处理机,将从没有加tag的来自VM1的数据从入口D接收后,进行加tag,然后发向E口,相反,会将带有tag的vlan上的数据从E口接收后,再去tag,根据VLAN的端口映射规则将数据转发到D(或者是去向其他的VM,例如VM2,则是转发到T口)

而对于T/E的数据处理,和D/E的处理流程类似。区别主要在D和T对应的VLAN ID会不同而已。

Compute host: tunnel bridge (F,G)

The tunnel bridge translates VLAN-tagged traffic from the integration bridge into GRE tunnels. The translation between VLAN IDs and tunnel IDs is performed by OpenFlow rules installed on br-tun.

在这里就体现出Neutron网络中的GRE tunnel机制了。就是G和Network Host的H口之间,将会建立GRE Tunnel。

Network host: tunnel bridge (H,I)

Traffic arrives on the network host via the GRE tunnel attached to br-tun. This bridge has a flow table very similar to br-tun on the compute host。

这个过程,非常类似上一个环节,只是数据处理的方向是反的,是从tunnel数据转向vlan的。

Network host: integration bridge

The integration bridge on the network controller serves to connect instances to network services, such as routers and DHCP servers.

Network host: DHCP server (O,P)

Each network for which DHCP is enabled has a DHCP server running on the network controller. The DHCP server is an instance of dnsmasq running inside a network namespace. A network namespace is a Linux kernel facility that allows groups of processes to have a network stack (interfaces, routing tables, iptables rules) distinct from that of the host.

这个namespace,在openstack环境下,可以通过ip netns查看,我的devstack测试平台上,执行这个命令得到下面的内容:

1 [[email protected]10-121-5-244 ~]# ip netns
2 qrouter-a7bf0605-3474-4f5c-bcbd-98a11bd175d4
3 qdhcp-77e45b4b-3238-467e-b38f-33dd86a5f83b

上面的qdhcp namespace的server主要是服务于private网络的IP地址分配的。而qrouter则主要负责数据对外的路由的。

在dhcp的namespace里面执行查看地址的命令,如下,看看都是什么信息呢?

 1 [[email protected]10-121-5-244 ~]# ip netns exec qdhcp-77e45b4b-3238-467e-b38f-33dd86a5f83b ip addr
 2 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
 3     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 4     inet 127.0.0.1/8 scope host lo
 5        valid_lft forever preferred_lft forever
 6     inet6 ::1/128 scope host
 7        valid_lft forever preferred_lft forever
 8 9: tapf2d4361c-39: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
 9     link/ether fa:16:3e:85:fa:a0 brd ff:ff:ff:ff:ff:ff
10     inet 10.0.0.2/24 brd 10.0.0.255 scope global tapf2d4361c-39
11        valid_lft forever preferred_lft forever
12     inet6 fdf8:e668:72e6:0:f816:3eff:fe85:faa0/64 scope global mngtmpaddr dynamic
13        valid_lft 86354sec preferred_lft 14354sec
14     inet6 fe80::f816:3eff:fe85:faa0/64 scope link
15        valid_lft forever preferred_lft forever

You can find the dnsmasq process associated with this namespace by search the output of ps for the id (the number after qdhcp- in the namespace name)

1 [[email protected]10-121-5-244 ~]# ps -fe | grep 77e45b4b-3238-467e-b38f-33dd86a5f83b
2 nobody    1658     1  0 Jan12 ?        00:00:00 dnsmasq --no-hosts --no-resolv --strict-order --except-interface=lo --pid-file=/opt/stack/data/neutron/dhcp/77e45b4b-3238-467e-b38f-33dd86a5f83b/pid --dhcp-hostsfile=/opt/stack/data/neutron/dhcp/77e45b4b-3238-467e-b38f-33dd86a5f83b/host --addn-hosts=/opt/stack/data/neutron/dhcp/77e45b4b-3238-467e-b38f-33dd86a5f83b/addn_hosts --dhcp-optsfile=/opt/stack/data/neutron/dhcp/77e45b4b-3238-467e-b38f-33dd86a5f83b/opts --dhcp-leasefile=/opt/stack/data/neutron/dhcp/77e45b4b-3238-467e-b38f-33dd86a5f83b/leases --dhcp-match=set:ipxe,175 --bind-interfaces --interface=tapf2d4361c-39 --dhcp-range=set:tag0,10.0.0.0,static,86400s --dhcp-lease-max=256 --conf-file= --domain=openstacklocal

Network host: Router (M,N)

A Neutron router is a network namespace with a set of routing tables and iptables rules that performs the routing between subnets.

下面,通过ip netns来看看router namespace下的地址信息(router的namespace,前面已经列举出来了的):

 1 [[email protected]10-121-5-244 ~]# ip netns exec qrouter-a7bf0605-3474-4f5c-bcbd-98a11bd175d4 ip addr
 2 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
 3     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 4     inet 127.0.0.1/8 scope host lo
 5        valid_lft forever preferred_lft forever
 6     inet6 ::1/128 scope host
 7        valid_lft forever preferred_lft forever
 8 10: qr-c36567ef-4d: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
 9     link/ether fa:16:3e:54:fa:80 brd ff:ff:ff:ff:ff:ff
10     inet 10.0.0.1/24 brd 10.0.0.255 scope global qr-c36567ef-4d
11        valid_lft forever preferred_lft forever
12     inet6 fe80::f816:3eff:fe54:fa80/64 scope link
13        valid_lft forever preferred_lft forever
14 11: qg-5d13ee78-0a: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
15     link/ether fa:16:3e:37:7c:95 brd ff:ff:ff:ff:ff:ff
16     inet 172.24.4.2/24 brd 172.24.4.255 scope global qg-5d13ee78-0a
17        valid_lft forever preferred_lft forever
18     inet6 2001:db8::1/64 scope global
19        valid_lft forever preferred_lft forever
20     inet6 fe80::f816:3eff:fe37:7c95/64 scope link
21        valid_lft forever preferred_lft forever
22 12: qr-2e4c72e5-5f: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
23     link/ether fa:16:3e:cd:92:ad brd ff:ff:ff:ff:ff:ff
24     inet6 fdf8:e668:72e6::1/64 scope global
25        valid_lft forever preferred_lft forever
26     inet6 fe80::f816:3eff:fecd:92ad/64 scope link
27        valid_lft forever preferred_lft forever

这个当中,可以看看其路由信息:

1 [[email protected]10-121-5-244 ~]# ip netns exec qrouter-a7bf0605-3474-4f5c-bcbd-98a11bd175d4 ip route
2 default via 172.24.4.1 dev qg-5d13ee78-0a
3 10.0.0.0/24 dev qr-c36567ef-4d  proto kernel  scope link  src 10.0.0.1
4 172.24.4.0/24 dev qg-5d13ee78-0a  proto kernel  scope link  src 172.24.4.2 

nat表的信息如下:

 1 [[email protected]10-121-5-244 ~]# ip netns exec qrouter-a7bf0605-3474-4f5c-bcbd-98a11bd175d4 iptables -t nat -S
 2 -P PREROUTING ACCEPT
 3 -P INPUT ACCEPT
 4 -P OUTPUT ACCEPT
 5 -P POSTROUTING ACCEPT
 6 -N neutron-l3-agent-OUTPUT
 7 -N neutron-l3-agent-POSTROUTING
 8 -N neutron-l3-agent-PREROUTING
 9 -N neutron-l3-agent-float-snat
10 -N neutron-l3-agent-snat
11 -N neutron-postrouting-bottom
12 -A PREROUTING -j neutron-l3-agent-PREROUTING
13 -A OUTPUT -j neutron-l3-agent-OUTPUT
14 -A POSTROUTING -j neutron-l3-agent-POSTROUTING
15 -A POSTROUTING -j neutron-postrouting-bottom
16 -A neutron-l3-agent-POSTROUTING ! -i qg-5d13ee78-0a ! -o qg-5d13ee78-0a -m conntrack ! --ctstate DNAT -j ACCEPT
17 -A neutron-l3-agent-PREROUTING -d 169.254.169.254/32 -i qr-+ -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 9697
18 -A neutron-l3-agent-snat -j neutron-l3-agent-float-snat
19 -A neutron-l3-agent-snat -o qg-5d13ee78-0a -j SNAT --to-source 172.24.4.2
20 -A neutron-l3-agent-snat -m mark ! --mark 0x2/0xffff -m conntrack --ctstate DNAT -j SNAT --to-source 172.24.4.2
21 -A neutron-postrouting-bottom -m comment --comment "Perform source NAT on outgoing traffic." -j neutron-l3-agent-snat

Network host: External traffic (K,L)

"External" traffic flows through br-ex via the qg-5d13ee78-0a interface in the router name space, which connects to br-ex。

时间: 2024-10-03 03:17:12

openstack(liberty): 简单网络连接图的相关文章

python简单网络连接

聊天模式 client端 import socket sk = socket.socket() address = ('172.16.10.1',3000) sk.connect(address) while True: inp = input('>>>') if inp == 'exit': break sk.send(bytes(inp,'utf8')) data = sk.recv(1024) print(str(data,'utf8')) sk.close() #client端结

思科模拟器 简单网络连接操作

如图所示,对思科设备进行简单入门实验,完成全网互通 推荐步骤: 1.先配置PC机的IP地址和网关 2.激活交换机的对应接口(思科模拟器是自动开启的,这里就不用激活了) 3.为路由器添加IP地址和静态路由 操作开始: 步骤一:双击图上的PC2机,进入配置界面 进入后,进行配置 对剩下的5台PC机进行同样的配置,这里就不一一说明了,跟PC2的操作一样,只是IP和网关不同 步骤二:配置交换机,这个实验不需要配置 步骤三:配置路由器,双击路由器图标,跟交换机一样进入第三个菜单,进入配置界面,然后进行配置

openstack架构简单介绍J版(更新中)

title : OPENSTACK架构简单介绍 openstack的发展及历史 openstack是什么? OpenStack是一个美国国家航空航天局和Rackspace合作研发的云端运算?软件,以Apache许可证授权.而且是一个自由软件和开放源码项目. 通俗点来讲,openstack就是一个用python编写的linux软件,openstack是一个开源云平台. openstack能干嘛? openstack最基础的功能就是产生云主机(vm虚拟机).用这些虚拟机能够做你想做的非常多事.比如产

物理真实网络连接和虚拟机联网的方式详解

物理真实网络连接和虚拟机联网的方式详解 一.物理真实网络连接图详解 二.查找VMware指定虚拟IP: 1. 2. 3. 三.注意:Linux虚拟网络连接有以下几种: 1.NAT方式(这种方式CentOS可以上外网) 2.桥接方式(bridging)(这种方式CentOS可以上外网) 3.hostonly方式(注意:这种方式CentOS不可以上外网) 四.虚拟机的IP在window上ping下,看能不能拼的通,如果拼的通,说明linux上可以上外网 1.查看linux下ip 2.在window上

Openstack Liberty网络架构实现分析(一)

春节前在研究Openstack最新版本Liberty网络时,发现了一篇较好的介绍Liberty网络实现和一些新技术的文章.经过仔细研究后决定写写研究后的体会. 此系列文章分为7个部分,分别介绍: 1.Liberty网络总览 2.网络架构 3.Neutron配置 4.网络创建 5.添加路由.网络和子网 6.在租户网络启动虚机 7.在FLAT网络启动虚机 文章连接:OpenStack Liberty Neutron Deployment (Part 1-7 Overview) http://www.

openstack(liberty):部署实验平台(一,基础网络环境搭建)

openstack项目的研究,到今天,算是要进入真实环境了,要部署实验平台了.不再用devstack了.也就是说,要独立controller,compute,storage和network了.要做这个的第一步,就是要将各个服务器的软件环境(操作系统是否满足liberty的要求,centos最好是7以上),以及服务器之间的网络连接通路打通,方便后续的软件安装需要. 下面看看我的节点拓扑图,有5台机器,其中参与这个openstack的节点有4个,计划中的controller,network,stor

android中检測网络连接状态简单总结

相应差点儿没有不跟网络打交道的android应用,那么在实际中就需求检測手机是否有网络连接.甚至须要推断是何种方式连接,这样能给用户带来更好的体验和一些使用指导,以下给出一些经常使用的推断.假设要知道是否有网络.以及是採用wifi连接的还是3G连接的.调用以下相应方法模型就OK了.代码例如以下: TestNetworkActivity: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

Openstack liberty源码分析 之 云主机的启动过程3

接上篇Openstack liberty源码分析 之 云主机的启动过程2, 简单回顾下:nova-conductor收到nova-scheduler返回的主机列表后,依次发送异步rpc请求给目标主机的nova-compute服务,下面继续来看nova-compute服务的处理过程: nova-compute 根据路由映射,nova-compute中处理云主机启动请求的方法为 nova/compute/manager.py.ComputeManager.py.build_and_run_insta

VMware网络连接模式说明及故障排查

一.VMware网络连接模式-桥接.NAT以及仅主机模式的详细介绍和区别 VMware 桥接模式 VMware桥接模式,也就是将虚拟机的虚拟网络适配器与主机的物理网络适配器进行交接,虚拟机中的虚拟网络适配器可通过主机中的物理网络适配器直接访问到外部网络(例如图中所示的局域网和Internet,下同).简而言之,这就好像在上图所示的局域网中添加了一台新的.独立的计算机一样.因此,虚拟机也会占用局域网中的一个IP地址,并且可以和其他终端进行相互访问.桥接模式网络连接支持有线和无线主机网络适配器.如果