Neutron中的dhcp过程分析

本文详细介绍了Neutron中DHCP过程,涉及Nova虚机获取固定IP的步骤,包括Neutron分配MAC和IP,Dnsmasq的参与,以及虚机启动时的数据流。在创建虚机时,Neutron生成MAC,分配IP并更新Dnsmasq的hosts文件,虚机启动后通过DHCP协议获取IP。最后,文章还梳理了Neutron中网络和DHCP Agent的概念。
摘要由CSDN通过智能技术生成
Nova 虚机获取固定IP (Fixed IP)主要分为两个步骤:
(1)在创建虚机过程中,Neutron 随机生成 MAC 和 从配置数据中分配一个固定IP 地址,并保存到 Dnsmasq 的 hosts 文件中,让 Dnsmasq 做好准备。
(2)虚机在启动时向 Dnsmasq 获取 IP 地址


1、创建虚拟机时的数据流


Nova-compute 在创建虚机时,需要 Neutron 所做的主要事情之一就是分配一个 MAC 和 一个或者多个固定 IP 地址,该过程从 Nova-compute 向 Neutron 申请 Port 开始:

步骤2-6:nova-compute向neutron-server申请port,neutron-server是用NeutronDbPlugin创建port,创建port时,生成了随机的mac地址,然后用这MAC地址创建port,同时IP是数据库中取出一个预配置的
          ps:创建port时,需要指定网络和mac
             REQ: curl -i http://controller:9696/v2.0/ports.json -X POST -H " X-Auth-Token: ...= " -H " User-Agent: python-neutronclient " -d ' {"port": {"binding:host_id": "compute1", "admin_state_up": true, "network_id": "0a4cd030-d951-401a-8202-937b788bea43" , "tenant_id": "43f66bb82e684bbe9eb9ef6892bd7fd6", "device_owner": "compute:nova", "security_groups": ["8c0dc337-0a6d-4ad7-94bf-a400ee32b2ac"], "device_id": "8671c14e-9ee4-4338-bcc5-8a5f0ea6e1d5"}} '

步骤7-10:创建port,并绑定到ovs
步骤12-14:通过消息队列告知DHCP Agent,port创建结束,并通知新分配的port信息
步骤15-17:DHCP Agent重新生成hosts文件,并重启dnsmasq进程,以供dhcp获取
步骤13返回的port信息示例如下:此时已经带有ip信息

{ " port " : { " status " : " DOWN " ,
neutron-server 通过调用 neutron.agent.rpc.PluginApi 类的 create_subnet 方法将子网信息发送给 DHCP Agent,具体代码如下: 1. 在 neutron/server/rpc.py 定义了 PluginApi 类,该类用于向各种插件发送 RPC 消息。 ```python class PluginApi(agent_rpc.PluginApi, l3_rpc.L3PluginApi, dhcp_rpc_base.DhcpPluginApi): def create_subnet(self, context, subnet): """Create a subnet.""" return self.call(context, self.make_msg('create_subnet', subnet=subnet), version='1.1') ``` 2. 在 neutron/agent/rpc.py 定义了 PluginApi 类的父类 agent_rpc.PluginApi,该类用于向各种 Agent(包括 DHCP Agent)发送 RPC 消息。 ```python class PluginApi(agent_rpc.API): """Agent side of the neutron RPC API.""" def create_subnet(self, context, subnet): """Create a subnet.""" return self._call_plugin('create_subnet', context=context, subnet=subnet) ``` 3. 在 neutron/agent/dhcp/agent.py 定义了 DHCP Agent,该 Agent 接收 PluginApi 发送的消息,并进行相应的处理,包括配置 DHCP 服务等。 ```python class DhcpAgentWithStateReport(DhcpAgent): def create_subnet(self, context, subnet): """Handle the subnet create RPC event.""" # 解析子网信息 network_id = subnet['network_id'] subnet_id = subnet['id'] cidr = subnet['cidr'] gateway_ip = subnet['gateway_ip'] # ... 其他操作 # 配置 DHCP 服务 self.enable_dhcp_helper(network_id, subnet_id, device_owner, cidr, gateway_ip, dhcp_server_ips) ``` 需要注意的是,在 neutron.conf 文件需要配置 DHCP Agent 启用 DHCP 服务,具体配置项为: ```ini [DEFAULT] # ... dhcp_agent_notification = True ``` 这个配置项需要设置为 True,才能使 neutron-server 发送子网信息给 DHCP Agent。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值