OVN系列7 -- 分布式DHCP
2022-02-03 本文已影响0人
苏苏林
DHCP是云网络的基础网络服务,为了提高性能和可用性,一般做成分布式DHCP,即各节点分别起DHCP服务且只为本节点的VM分配地址。但是一个VPC网络的IP地址池是全局资源,要是想完全做动态分配,一定需要一个集中式的管理。
所以分布式的DHCP一般还是使用静态地址分配地址,DHCP本身变为了一个地址管理方式,而不是一个分配方式。
如果vm中使用dhcp的方式申请地址,申请到的也是由控制器事先分配好的ip地址,由dhcp完成协议分配的流程而已。另有一篇介绍云网络使用dnsmasq实现分布式dhcp功能,点这里。
配置
### 配置sw子网
ovn-nbctl set logical_switch sw-300 \
other_config:subnet="30.1.1.0/24" \
other_config:exclude_ips="30.1.1.1..30.1.1.99"
### 配置dhcp option
CIDR_UUID300=$(ovn-nbctl create dhcp_options \
cidr=30.1.1.0/24 \
options='"lease_time"="3600" "router"="30.1.1.1" "server_id"="30.1.1.1" "server_mac"="c0:ff:ee:00:30:01"')
### vm接口绑定 dhcp option
ovn-nbctl lsp-add sw-300 sw-300-port-vm2
ovn-nbctl lsp-set-addresses sw-300-port-vm2 "fa:10:dd:1b:30:01 dynamic"
ovn-nbctl lsp-set-dhcpv4-options sw-300-port-vm2 $CIDR_UUID300
查看vm nic已经分到了 30.1.1.101,和目前zstack的实现类似,在dhcp client申请地址之前已经完成地址分配,地址由控制器(ovn_controller)在接口绑定 dhcp option就做好了分配。如果要做的更精确,上面的 dhcp_options 配置可以配置32位演吗的主机地址。
[root@172-26-201-95 ~]# ovn-nbctl list logical_switch_port sw-300-port-vm2
_uuid : 37c72600-a95e-4006-b105-a78f77bbf20d
addresses : ["fa:10:dd:1b:30:01 dynamic"]
dhcpv4_options : 8cc5ec26-7e77-4606-a4e2-00123a6ce675
dhcpv6_options : []
dynamic_addresses : "fa:10:dd:1b:30:01 30.1.1.101"
enabled : []
external_ids : {}
ha_chassis_group : []
name : sw-300-port-vm2
options : {}
parent_name : []
port_security : []
tag : []
tag_request : []
type : ""
up : false
流表分析
DHCP DHCPDISCOVER/REQUEST都会packet in到控制器,控制器回复OFFER和ACK,回送OVS,再由OVS修改三四层头发回VM。
### 1、dhcp REQUEST
cookie=0x5d4c7169, duration=1226.116s, table=25, n_packets=0, n_bytes=0, priority=100,udp,reg14=0x2,metadata=0x2,dl_src=fa:10:dd:1b:30:01,nw_src=30.1.1.101,nw_dst=255.255.255.255,tp_src=68,tp_dst=67 actions=controller(userdata=00.00.00.02.00.00.00.00.00.01.de.10.00.00.00.63.1e.01.01.65.33.04.00.00.0e.10.01.04.ff.ff.ff.00.03.04.1e.01.01.01.36.04.1e.01.01.01,pause),resubmit(,26)
cookie=0x5d4c7169, duration=1226.116s, table=25, n_packets=0, n_bytes=0, priority=100,udp,reg14=0x2,metadata=0x2,dl_src=fa:10:dd:1b:30:01,nw_src=30.1.1.101,nw_dst=30.1.1.1,tp_src=68,tp_dst=67 actions=controller(userdata=00.00.00.02.00.00.00.00.00.01.de.10.00.00.00.63.1e.01.01.65.33.04.00.00.0e.10.01.04.ff.ff.ff.00.03.04.1e.01.01.01.36.04.1e.01.01.01,pause),resubmit(,26)
### 2、dhcp DHCPDISCOVER报文匹配,送控制器处理,控制器做 put_dhcp_opts action,DHCP请求包转换为回复包(OFFER)
cookie=0xe4d5f032, duration=1226.116s, table=25, n_packets=0, n_bytes=0, priority=100,udp,reg14=0x2,metadata=0x2,dl_src=fa:10:dd:1b:30:01,nw_src=0.0.0.0,nw_dst=255.255.255.255,tp_src=68,tp_dst=67 actions=controller(userdata=00.00.00.02.00.00.00.00.00.01.de.10.00.00.00.63.1e.01.01.65.33.04.00.00.0e.10.01.04.ff.ff.ff.00.03.04.1e.01.01.01.36.04.1e.01.01.01,pause),resubmit(,26)
### 3、所有回复包(OFFER、ACK)的三四层头修改
cookie=0xa311c4bc, duration=1226.116s, table=26, n_packets=0, n_bytes=0, priority=100,udp,reg0=0x8/0x8,reg14=0x2,metadata=0x2,dl_src=fa:10:dd:1b:30:01,tp_src=68,tp_dst=67 actions=move:NXM_OF_ETH_SRC[]->NXM_OF_ETH_DST[],mod_dl_src:c0:ff:ee:00:30:01,mod_nw_src:30.1.1.1,mod_tp_src:67,mod_tp_dst:68,move:NXM_NX_REG14[]->NXM_NX_REG15[],load:0x1->NXM_NX_REG10[0],resubmit(,37)