openstack实例创建到正常访问整个过程分析【详细】

云计算 waitig 633℃ 百度已收录 0评论

实例从创建到正常上网的过程:

首先创建一个实例:

我们在启动云主机的时候,会选这个int-net这个网络,
创建后:看见ip分配成功:

详细过程:
底层网络发生了什么变化
对于 instance “liang——computer”,Neutron 会在 subnet 中创建一个 port,分配 IP 和 MAC 地址,并将 port 分配给它。

端口:可以进出流量的接口,往往绑定上若干 MAC 地址和 IP 地址,以进行寻址。一般为虚拟交换机上的虚拟接口。虚拟机挂载网卡到端口上,通过端口访问网络。当端口有 IP 的时候,意味着它属于某个子网。

当 liang_computer 启动时:
1. 宿主机上的 neutron-linuxbridge-agent 会根据 port 信息创建 tap 设备,并连接到 local 网络所在的 bridge
2. 同时该 tap 会映射成 liang_computer 的虚拟网卡,即 virtual interface (VIF)。

下面我们验证一下以上信息:
Liang_computer 部署到了计算节点,通过 brctl show 查看 bridge 的配置。

【注意:】像这个qbr****就是linux网桥

从命名上可知 tap42240dd1-9d 对应着 port “(42240dd1)”

通过 virsh edit 命令查看 liang_computer 的配置,确认 VIF 就是 tap42240dd1-9d。

另外,VIF 的 MAC 地址为 fa:16:3e:4b:df:ab,这个数据就是从 port “(42240dd1)” 取过来的。

在 liang_computer 中执行 ifconfig,通过 MAC 地址可以确认 eth0 与 tap42240dd1-9d 对应。

将外网连接到 Neutron 的虚拟路由器,这样 instance 才能访问外网。【Route1连接了6网段和1网段】

Router1上已经设置好了两个 subnet 的 Gateway IP。


liang_computer 位于计算节点,现在已经可以 Ping 到 ext_subnet 网关 192.168.1.1 了。 通过 traceroute 查看一下 liang_computer 到 192.168.1.1的路径:

数据包经过两跳到达 192.168.6.1 网关。
1.数据包首先发送到 router1 连接 的 interface。

  1. 然后通过连接 ext_net 的 interface 转发出去,最后到达 192.168.1.1。

    当数据包从 router 连接外网的接口发出的时候,会做一次 Source NAT,将包的源地址修改为 router 的接口地址 10.10.10.2,这样就能够保证目的端能够将应答的包发回给 router,然后再转发回源端 instance。
    SNAT【是源地址转换,其作用是将ip数据包的源地址转换成另外一个地址。
    】 让 instance 能够直接访问外网,但外网还不能直接访问 instance。因为 instance 没有外网 IP。这里 “直接访问 instance” 是指通信连接由外网发起,例如从外网 ssh。

云主机在floating—ip下与外网的的通信:
1. 当 router 接收到从外网发来的包,如果目的地址是 floating IP 192.168.1.* 将目的地址修改为 云主机 的 IP 192.168.6.*。这样外网的包就能送达到 云主机。
2. 当 云主机 发送数据到外网,源地址 IP 192.168.6.* 将被修改为 floating IP 192.168.1.*
总之: floating IP 能够让外网直接访问租户网络中的 instance。这是通过在 router 上应用 iptalbes 的 NAT 规则实现的。

TAP设备其实就是一个Linux内核虚拟化出来的一个网络接口。
接下来就是qbr,这之前就说了,是一个Linux Bridge,很是奇怪,我们在这个架构中,使用的OpenvSwitch实现虚拟交换设备的,为什么会出现Linux Bridge呢?其实就是说,OpenvSwitch不支持现在的OpenStack的实现方式,因为OpenStack是把iptables规则丢在TAP设备中,以此实现了安全组功能。没办法,所以用了一个折中的方式,在中间加一层,用Linux Bridge来实现吧,这样,就莫名其妙了多了一个qbr网桥。在qbr上面还存在另一个设备,这也是一个TAP设备。通常以qvb开头,它和br-int连接在一起,形成一个连接通道,使得qbr和br-int之间顺畅通信。br-int是由OpenvSwitch虚拟化出来的网桥,但事实上它已经充当了一个虚拟交换机的功能了。br-int的主要职责就是把它所在的计算节点上的VM都连接到它这个虚拟交换机上面

qvbXXX/qvoXXX等设备:这是一对veth pair devices,用来连接bridge device和switch


本文由【waitig】发表在等英博客
本文固定链接:openstack实例创建到正常访问整个过程分析【详细】
欢迎关注本站官方公众号,每日都有干货分享!
等英博客官方公众号
点赞 (0)分享 (0)