架构图
与 OpenStack 其他服务一样,Neutron 采用的是分布式架构,包括 Neutorn Server、各种 plugin/agent、database 和 message queue。
- Neutron server 接收 api 请求。
- plugin/agent 实现请求。
- database 保存 neutron 网络状态。
- message queue 实现组件之间通信。
metadata-agent
instance 在启动时需要访问 nova-metadata-api 服务获取 metadata 和 userdata,这些 data 是该 instance 的定制化信息,比如 hostname, ip, public key 等。
但 instance 启动时并没有 ip,那如何通过网络访问到 nova-metadata-api 服务呢?
答案就是 neutron-metadata-agent。 该 agent 让 instance 能够通过 dhcp-agent 或者 l3-agent 与 nova-metadata-api 通信。
- Neutron 通过 plugin 和 agent 提供网络服务
- plugin 位于 Neutron server,包括 core plugin 和 service plugin
- agent 位于各个节点,负责实现网络服务
- core plugin 提供 L2 功能,ML2 是推荐的 plugin
- 使用最广泛的 L2 agent 是 linux bridage 和 open vswitch
- service plugin 和 agent 提供扩展功能,包括 dhcp, routing, load balance, firewall, vpn 等
实际网络分类
在实际环境中,通常会有四种网络:
Management 网络
用于节点之间消息队列的内部通信和访问数据库服务
API 网络
通过 API 网络向用户提供服务,Keystone, Nova, Neutron, Glance, Cinder, Horizon 的 endpoints 均配置在 API 网络上。通常,管理员也通过 API 网络 SSH 管理各个节点
VM 网络
用于实例之间的通信,可以选择的类型包括 local, flat, vlan, vxlan 和 gre
External 网络
External 网络指的是 VM 网络之外的网络,该网络不由 Neutron 管理。 Neutron 可以将 router attach 到 External 网络,为 instance 提供访问外部网络的能力