Neutron网络服务详解:从原理到生产实践

Neutron网络服务详解:从原理到生产实践

一、Neutron概述

1.1 Neutron是什么?

Neutron为OpenStack提供完整的网络虚拟化功能,支持灵活的网络拓扑配置、安全组、负载均衡、VPN等高级网络功能。Neutron采用插件化架构,支持多种网络后端实现。

Neutron的核心功能:

  • 网络、子网、端口管理
  • 路由器和浮动IP
  • 安全组和网络ACL
  • 负载均衡即服务(LBaaS)
  • VPN即服务(VPNaaS)
  • 防火墙即服务(FWaaS)

1.2 Neutron架构

Neutron采用分层架构设计:

层级 组件 功能描述
API层 neutron-api REST API入口
插件层 ML2 Plugin 框架,支持多种驱动
Agent层 L2 Agent 二层交换
Agent层 L3 Agent 三层路由
Agent层 DHCP Agent IP地址分配
Agent层 Metadata Agent 实例元数据服务

二、Neutron核心概念

2.1 Network(网络)

Network是二层广播域隔离,每个Network都是独立的广播域。

Network类型:

类型 特点 适用场景
Local 仅本节点通信 单节点测试
Flat 无VLAN标签 简单网络
VLAN 802.1Q标签 多租户隔离
VXLAN VXLAN隧道 大规模部署
Geneve Geneve隧道 新一代虚拟网络

# 查看网络列表
openstack network list

# 创建网络
openstack network create --share --external public
openstack network create --internal private

# 创建VLAN网络
openstack network create --provider-network-type vlan \
  --provider-physical-network physnet1 \
  --provider-segment 100 \
  vlan100

# 创建VXLAN网络
openstack network create --provider-network-type vxlan \
  --vxlan-vni 1001 \
  vxlan100

# 查看网络详情
openstack network show private

# 更新网络
openstack network set --description "Private Network" private

# 删除网络
openstack network delete private

2.2 Subnet(子网)

Subnet是IP地址分配池,定义IP地址范围和网关。


# 创建子网
openstack subnet create --network private \
  --subnet-range 192.168.1.0/24 \
  --gateway 192.168.1.1 \
  --allocation-pool start=192.168.1.100,end=192.168.1.200 \
  --dns-nameserver 8.8.8.8 \
  private-subnet

# 查看子网列表
openstack subnet list

# 查看子网详情
openstack subnet show private-subnet

# 更新子网
openstack subnet set --dns-nameserver 8.8.4.4 private-subnet

# 删除子网
openstack subnet delete private-subnet

# 创建IPv6子网
openstack subnet create --network private \
  --subnet-range fd00::1/64 \
  --ipv6-address-mode slaac \
  private-ipv6

2.3 Port(端口)

Port是网络接入点,关联MAC地址和IP地址。


# 查看端口列表
openstack port list

# 查看端口详情
openstack port show 

# 创建端口
openstack port create --network private \
  --fixed-ip subnet=private-subnet,ip-address=192.168.1.50 \
  my-port

# 更新端口
openstack port set --name new-port-name my-port

# 绑定安全组
openstack port add security group web my-port

# 禁用端口
openstack port set --disable my-port

# 删除端口
openstack port delete my-port

2.4 Router(路由器)

Router实现网络间的三层路由功能。


# 创建路由器
openstack router create my-router

# 设置网关
openstack router set --external-gateway public my-router

# 创建内部接口
openstack router add subnet my-router private-subnet

# 查看路由器详情
openstack router show my-router

# 查看路由表
openstack router show my-router -f json | jq '.routes'

# 添加静态路由
openstack router add route my-router \
  --destination 10.0.0.0/24 \
  --nexthop 192.168.1.254

# 移除静态路由
openstack router remove route my-router \
  --destination 10.0.0.0/24 \
  --nexthop 192.168.1.254

# 移除内部接口
openstack router remove subnet my-router private-subnet

# 删除路由器
openstack router delete my-router

2.5 Floating IP(浮动IP)

浮动IP实现外部网络访问虚拟机。


# 创建浮动IP
openstack floating ip create public

# 查看浮动IP
openstack floating ip list

# 绑定到虚拟机
openstack server add floating ip my-instance 192.168.100.100

# 解绑浮动IP
openstack server remove floating ip my-instance 192.168.100.100

# 释放浮动IP
openstack floating ip delete 192.168.100.100

2.6 Security Group(安全组)

安全组提供实例级别的防火墙规则。


# 创建安全组
openstack security group create web-sg

# 查看规则
openstack security group rule list web-sg

# 添加规则
# 允许SSH
openstack security group rule create --protocol tcp \
  --dst-port 22 \
  --remote-ip 0.0.0.0/0 \
  web-sg

# 允许HTTP
openstack security group rule create --protocol tcp \
  --dst-port 80 \
  --remote-ip 0.0.0.0/0 \
  web-sg

# 允许Ping
openstack security group rule create --protocol icmp \
  --remote-ip 0.0.0.0/0 \
  web-sg

# 允许所有出站
openstack security group rule create --protocol tcp \
  --dst-port 1:65535 \
  --remote-ip 0.0.0.0/0 \
  -- egress \
  web-sg

三、Neutron配置文件详解

3.1 Neutron主配置文件


# /etc/neutron/neutron.conf

[DEFAULT]
# 日志配置
log_dir = /var/log/neutron
logging_context_format_string = %(asctime)s.%(msecs)03d %(levelname)s %(name)s [%(request_id)s] %(instance)s%(message)s

# 插件配置
core_plugin = ml2
service_plugins = router,firewall,lbaas,vpnaas

# API服务器配置
api_workers = 4
rpc_workers = 4

# 认证配置
auth_strategy = keystone

# 通知配置
notify_nova_on_port_status_changes = True
notify_nova_on_port_data_changes = True

# 消息队列配置
transport_url = rabbit://openstack:rabbit_pass@controller

[database]
connection = mysql+pymysql://neutron:neutron_db_pass@controller/neutron

[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = neutron
password = neutron_pass

[nova]
auth_url = http://controller:5000
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = nova_pass

[oslo_concurrency]
lock_path = /var/lib/neutron/tmp

3.2 ML2配置文件


# /etc/neutron/plugins/ml2/ml2_conf.ini

[ml2]
# 类型驱动
type_drivers = flat,vlan,vxlan,geneve

# 租户网络类型
tenant_network_types = vxlan,vlan

# 机制驱动
mechanism_drivers = openvswitch,linuxbridge,l2population

# 扩展驱动
extension_drivers = port_security,qos

# 网络类型配置
[ml2_type_flat]
flat_networks = external,public

[ml2_type_vlan]
network_vlan_ranges = physnet1:100:200

[ml2_type_vxlan]
vxlan_group = 239.1.1.1
vni_ranges = 1001:2000

[ml2_type_geneve]
genev vni_ranges = 1:65535

[securitygroup]
enable_security_group = True
enable_ipset = True
firewall_driver = iptables_hybrid

[qos]
available_qos_rule_types = bandwidth_limit

3.3 Open vSwitch Agent配置


# /etc/neutron/plugins/ml2/openvswitch_agent.ini

[ovs]
# 物理网络接口映射
bridge_mappings = physnet1:br-ex,external:br-ex

# 启用VXLAN隧道
enable_tunneling = True
local_ip = 10.0.0.11
tunnel_types = vxlan

# L2 Population
l2_population = True

[agent]
# ARP spoofing防护
arp_spoofing_protection = True

# 启用VXLAN分流
tunnel_csum = True

# 代理配置
polling_interval = 2
quitting_rpc_timeout = 120

[securitygroup]
firewall_driver = iptables_hybrid

3.4 Linux Bridge Agent配置


# /etc/neutron/plugins/ml2/linuxbridge_agent.ini

[linux_bridge]
# 物理网络接口映射
physical_interface_mappings = physnet1:ens4

# VXLAN配置
enable_vxlan = True
local_ip = 10.0.0.11
l2_population = True

[securitygroup]
firewall_driver = iptables_hybrid

四、高级网络功能

4.1 负载均衡即服务(Octavia)


# 创建负载均衡器
openstack loadbalancer create --name my-lb --vip-subnet-id public-subnet

# 创建监听器
openstack loadbalancer listener create --name http-listener \
  --protocol HTTP --port 80 \
  my-lb

# 创建负载均衡池
openstack loadbalancer pool create --name web-pool \
  --lb-algorithm ROUND_ROBIN \
  --listener http-listener \
  --protocol HTTP

# 添加成员
openstack loadbalancer member create --address 192.168.1.100 \
  --subnet-id private-subnet --port 80 \
  web-pool

# 创建健康检查
openstack loadbalancer healthmonitor create \
  --type HTTP --delay 5 --timeout 2 --max-retries 3 \
  --url-path /health \
  web-pool

4.2 VPN即服务


# 创建VPN服务
openstack vpn service create --name my-vpn \
  --router my-router

# 创建IKE策略
openstack vpn ike policy create --name ike-policy \
  --encryption-algorithm aes-256 \
  --auth-algorithm sha256 \
  --ike-version v2

# 创建IPsec策略
openstack vpn ipsec policy create --name ipsec-policy \
  --encryption-algorithm aes-256 \
  --auth-algorithm sha256 \
  --pfs group14

# 创建VPN连接
openstack vpn ipsec site connection create \
  --name site-connection \
  --vpnservice my-vpn \
  --ikepolicy ike-policy \
  --ipsecpolicy ipsec-policy \
  --peer-address 203.0.113.100 \
  --peer-id 203.0.113.100 \
  --peer-cidr 10.1.0.0/24 \
  --psk secret123

4.3 QoS策略


# 创建QoS策略
openstack network qos policy create --shared bandwidth-limit

# 创建带宽限制规则
openstack network qos rule create --type bandwidth-limit \
  --max-kbps 10000 \
  --max-burst-kbits 1000 \
  bandwidth-limit

# 应用QoS到端口
openstack port set --qos-policy bandwidth-limit my-port

# 应用QoS到网络
openstack network set --qos-policy bandwidth-limit private

五、常见问题与解决方案

5.1 虚拟机无法获取IP地址


# 检查DHCP Agent
openstack network agent list | grep dhcp

# 检查网络命名空间
ip netns list

# 检查DHCP Agent日志
sudo tail -f /var/log/neutron/neutron-dhcp-agent.log

# 检查端口状态
openstack port show 

# 重启DHCP Agent
sudo systemctl restart neutron-dhcp-agent

5.2 虚拟机无法访问外网


# 检查L3 Agent
openstack network agent list | grep l3

# 检查路由器网关
openstack router show my-router

# 检查浮动IP
openstack floating ip list

# 检查NAT规则
sudo iptables -t nat -L -n

# 检查路由表
ip route

5.3 VXLAN隧道不通


# 检查VXLAN接口
ip -d link show vxlan100

# 检查组播组
bridge mdb show

# 检查VTEP IP
ip addr show | grep 10.0.0

# 检查防火墙(UDP 4789端口)
sudo iptables -L -n | grep 4789

# 测试VXLAN连通性
nc -u -z 10.0.0.21 4789

5.4 安全组规则不生效


# 检查iptables规则
sudo iptables -L -n -v | grep 

# 检查ovs-vsctl
sudo ovs-vsctl show

# 检查安全组状态
openstack security group show web-sg

# 重启安全组Agent
sudo systemctl restart neutron-linuxbridge-agent

六、生产环境最佳实践

6.1 网络规划


# 推荐的网络分段
# Management: 10.0.0.0/24
# Tunnel: 10.0.1.0/24
# Storage: 10.0.2.0/24
# Tenant: 10.1.0.0/16
# External: 203.0.113.0/24

6.2 高可用配置


# L3 Agent高可用
# /etc/neutron/l3_agent.ini
[DEFAULT]
ha_router_namespaces = True
ha_vrrp_auth_password = your_vrrp_password
ha_confs_path = /var/lib/neutron/ha_confs

# 启用VRRP
agent_mode = dvr_snat  # 或 legacy

6.3 性能优化


# 增加Agent线程数
[DEFAULT]
api_workers = 8
rpc_workers = 8

# 优化VXLAN
[agent]
tunnel_csum = False
l2_population = True

# 优化iptables
[securitygroup]
firewall_driver = iptables_hybrid

6.4 监控告警


# 监控关键指标
# - Neutron Agent状态
# - DHCP租约数量
# - 路由器连接数
# - 浮动IP使用率
# - 安全组规则数量

# 配置告警
# - Agent离线告警
# - 端口数量告警
# - 带宽使用告警

七、总结

本文详细介绍了Neutron网络服务的核心概念、配置方法和最佳实践。

核心要点:

下篇预告: 《Cinder块存储服务详解》

发表回复

后才能评论