OpenStack 网络基础架构详解
网络服务核心机制
OpenStack 的网络管理组件(代号 neutron)提供一套完整的 API 接口,用于在云环境中配置和管理虚拟网络拓扑。该服务负责创建与维护包括虚拟网络、子网、路由器及防火墙在内的各类网络资源,并支持与计算服务(nova)的深度集成,实现虚拟机实例的网络接入。
Neutron 架构由主控服务 neutron-server、持久化数据库以及可扩展的代理模块构成。这些代理通过插件形式对接底层网络设施,如 Linux 内核网络栈、物理交换设备或 SDN 控制器,从而实现灵活的网络功能拓展。
关键网络协议与技术
以太网与 MAC 地址
以太网是基于 IEEE 802.3 标准的数据链路层协议,广泛应用于有线网络通信。每个网络接口卡(NIC)拥有唯一的 48 位媒体访问控制(MAC)地址,格式如 fa:16:3e:b0:34:49。在 OpenStack 中,每个虚拟机实例均分配独立的虚拟 MAC 地址。
Linux 下可通过以下命令查看网卡信息:
ip link show eth0
默认情况下,网卡仅接收目标地址匹配自身或广播地址(ff:ff:ff:ff:ff:ff)的数据帧。为支持多实例通信,计算主机需启用混杂模式(promiscuous mode),确保所有数据包被正确传递至操作系统。
VLAN 隔离机制
虚拟局域网(VLAN)允许单个物理交换机模拟多个逻辑独立网络。每个 VLAN 用唯一编号标识(1–4095),实现租户间流量隔离,即使实例运行于同一宿主机亦可保证安全。
当跨交换机连接时,必须将中继端口(trunk port)配置为支持 802.1Q 标签封装,以便在传输过程中携带源 VLAN 信息。建议为 OpenStack 部署预留专用 VLAN 范围(如 200–299),避免与现有网络冲突。
IP 寻址与路由
IP 地址由网络号与主机号组成,通过子网掩码(如 255.255.255.0 或 CIDR 表示法 /24)确定划分边界。同一子网内的设备可在二层直接通信。
路由表决定数据包转发路径。可通过以下命令查看当前路由配置:
ip route show
route -n
netstat -rn
例如,若目标地址不在本地网络,则数据包将经由默认网关(如 10.0.2.2)转发。使用 ip route get <target_ip> 可查询具体路由路径。
DHCP 与地址分配
动态主机配置协议(DHCP)通过广播方式自动分配 IP 地址。客户端发送 DHCPDISCOVER,服务器响应 DHCPOFFER,客户端请求后,服务器确认 DHCPACK 完成绑定。
OpenStack 使用 dnsmasq 实现 DHCP 服务,日志记录位于 /var/log/syslog,典型条目如下:
Apr 23 15:53:46 c100-1 dhcpd: DHCPDISCOVER from 08:00:27:b9:88:74 via eth2
Apr 23 15:53:48 c100-1 dhcpd: DHCPACK on 10.10.0.112 to 08:00:27:b9:88:74 via eth2
传输层协议:TCP/UDP/ICMP
- TCP:面向连接的协议,依赖端口号(1–65535)区分应用。服务器监听固定端口(如 22 代表 SSH),客户端使用临时端口发起连接。
- UDP:无连接协议,支持单播、广播与组播。常用于 DNS、NTP 及 VXLAN 等场景。组播需中间路由器支持多播路由。
- ICMP:用于网络诊断与错误报告。例如,当目标不可达或数据包过大时,会返回相应错误消息。
网络设备角色
- 交换机:工作在数据链路层(第2层),根据 MAC 地址转发帧。
- 路由器:连接多个网络,依据路由表进行三层转发。
- 防火墙:基于规则集过滤进出流量。
- 负载均衡器:分发请求至多个后端服务节点。
隧道技术与封装
隧道技术通过封装一种协议的数据载荷于另一协议之上,实现跨网络传输。
- GRE:通用路由封装,将私有网络的 IP 封装在公网包中传输。
- VXLAN:在 UDP 报头内封装以太网帧,构建跨物理网络的虚拟二层网络。
网络命名空间与虚拟路由
Linux 网络命名空间允许为不同进程创建独立的网络视图。每个命名空间拥有独立的:
- 网络设备列表
- 路由表
- iptables 规则集
这使得多个虚拟网络可以共存且其内部 IP 地址可重叠。通过 ip netns exec <name> <command> 可在指定命名空间中执行操作。
此机制等价于"虚拟路由与转发"(VRF)技术,即在同一设备上运行多个独立路由表实例。
网络地址转换(NAT)
NAT 在数据包传输过程中修改源或目标地址,使私有网络能够访问公共互联网。
- SNAT:修改出站数据包的源地址。常见于私有地址(如 10.0.0.0/8)访问公网时,将源地址替换为公网出口地址,并记录映射关系,实现双向通信。
- DNAT:修改入站数据包的目标地址。在 OpenStack 中,用于将实例访问 169.254.169.254 的请求重定向至实际元数据服务接口。