現在neutron支持創建不同的網絡指定不同的mtu,這個應用場景主要是vlan和vxlan混用的情況下。

具體配置
1、neutron.conf network_device_mtu=1450 # 生效的設備:neutron 網絡節點上的 qdhcp 和 qrouter network namespace 的 qr,qg 和 ns 接口以及對應的 veth tap 設備 /usr/lib/python2.7/site-packages/neutron/agent/linux/interface.py if self.conf.network_device_mtu: ns_dev.link.set_mtu(self.conf.network_device_mtu) if self.conf.ovs_use_veth: root_dev.link.set_mtu(self.conf.network_device_mtu)
2、ml2_conf.ini path_mtu = 9000 segment_mtu = 1500
flat網絡類型如何獲取MTU: /usr/lib/python2.7/site-packages/neutron/plugins/ml2/drivers/type_flat.py class FlatTypeDriver(helpers.BaseTypeDriver): # 父類BaseTypeDriver """Manage state for flat networks with ML2. The FlatTypeDriver implements the 'flat' network_type. Flat network segments provide connectivity between VMs and other devices using any connected IEEE 802.1D conformant physical_network, without the use of VLAN tags, tunneling, or other segmentation mechanisms. Therefore at most one flat network segment can exist on each available physical_network. """ def __init__(self): super(FlatTypeDriver, self).__init__() self._parse_networks(cfg.CONF.ml2_type_flat.flat_networks) # 如果定義了flat provider的physet_mtus,取physical_network_mtus和segment_mtu的最小值 def get_mtu(self, physical_network): seg_mtu = super(FlatTypeDriver, self).get_mtu() mtu = [] if seg_mtu > 0: mtu.append(seg_mtu) if physical_network in self.physnet_mtus: mtu.append(int(self.physnet_mtus[physical_network])) return min(mtu) if mtu else 0 /usr/lib/python2.7/site-packages/neutron/plugins/ml2/drivers/helpers.py class BaseTypeDriver(api.TypeDriver): """BaseTypeDriver for functions common to Segment and flat.""" def __init__(self): try: self.physnet_mtus = utils.parse_mappings( cfg.CONF.ml2.physical_network_mtus ) except Exception: self.physnet_mtus = [] def get_mtu(self, physical_network=None): return cfg.CONF.ml2.segment_mtu
vlan 網絡類型如何獲取MTU:
class VlanTypeDriver(helpers.SegmentTypeDriver): # 父類SegmentTypeDriver
"""Manage state for VLAN networks with ML2.
The VlanTypeDriver implements the 'vlan' network_type. VLAN
network segments provide connectivity between VMs and other
devices using any connected IEEE 802.1Q conformant
physical_network segmented into virtual networks via IEEE 802.1Q
headers. Up to 4094 VLAN network segments can exist on each
available physical_network.
"""
def __init__(self):
super(VlanTypeDriver, self).__init__(VlanAllocation)
self._parse_network_vlan_ranges()
# vlan的獲取mtu方式和flat一樣
def get_mtu(self, physical_network):
seg_mtu = super(VlanTypeDriver, self).get_mtu()
mtu = []
if seg_mtu > 0:
mtu.append(seg_mtu)
if physical_network in self.physnet_mtus:
mtu.append(int(self.physnet_mtus[physical_network]))
return min(mtu) if mtu else 0
/usr/lib/python2.7/site-packages/neutron/plugins/ml2/drivers/helpers.py
class BaseTypeDriver(api.TypeDriver):
"""BaseTypeDriver for functions common to Segment and flat."""
def __init__(self):
try:
self.physnet_mtus = utils.parse_mappings(
cfg.CONF.ml2.physical_network_mtus
)
except Exception:
self.physnet_mtus = []
def get_mtu(self, physical_network=None):
return cfg.CONF.ml2.segment_mtu
class SegmentTypeDriver(BaseTypeDriver):
"""SegmentTypeDriver for segment allocation.
Provide methods helping to perform segment allocation fully or partially
specified.
"""
def __init__(self, model):
super(SegmentTypeDriver, self).__init__()
self.model = model
self.primary_keys = set(dict(model.__table__.columns))
self.primary_keys.remove("allocated")vxlan 網絡類型如何獲取MTU:
class VxlanTypeDriver(type_tunnel.EndpointTunnelTypeDriver): # 父類EndpointTunnelTypeDriver
def __init__(self):
super(VxlanTypeDriver, self).__init__(
VxlanAllocation, VxlanEndpoints)
def get_type(self):
return p_const.TYPE_VXLAN
def initialize(self):
try:
self._initialize(cfg.CONF.ml2_type_vxlan.vni_ranges)
except n_exc.NetworkTunnelRangeError:
LOG.exception(_LE("Failed to parse vni_ranges. "
"Service terminated!"))
raise SystemExit()
def get_endpoints(self):
"""Get every vxlan endpoints from database."""
vxlan_endpoints = self._get_endpoints()
return [{'ip_address': vxlan_endpoint.ip_address,
'udp_port': vxlan_endpoint.udp_port,
'host': vxlan_endpoint.host}
for vxlan_endpoint in vxlan_endpoints]
def add_endpoint(self, ip, host, udp_port=p_const.VXLAN_UDP_PORT):
return self._add_endpoint(ip, host, udp_port=udp_port)
def get_mtu(self, physical_network=None):
mtu = super(VxlanTypeDriver, self).get_mtu()
return mtu - p_const.VXLAN_ENCAP_OVERHEAD if mtu else 0 # mtu - vxlan開銷,自動減去vxlan overhead
from neutron.plugins.common import constants as p_const
/usr/lib/python2.7/site-packages/neutron/plugins/common/constants.py
# Network Type MTU overhead
GENEVE_ENCAP_MIN_OVERHEAD = 50
GRE_ENCAP_OVERHEAD = 42
VXLAN_ENCAP_OVERHEAD = 50 # vxlan開銷
class EndpointTunnelTypeDriver(TunnelTypeDriver):
class TunnelTypeDriver(helpers.SegmentTypeDriver):
"""Define stable abstract interface for ML2 type drivers.
tunnel type networks rely on tunnel endpoints. This class defines abstract
methods to manage these endpoints.
"""
def get_mtu(self, physical_network=None):
seg_mtu = super(TunnelTypeDriver, self).get_mtu()
mtu = []
if seg_mtu > 0:
mtu.append(seg_mtu)
if cfg.CONF.ml2.path_mtu > 0:
mtu.append(cfg.CONF.ml2.path_mtu)
return min(mtu) if mtu else 0gre網絡類型如何獲取MTU:
class GreTypeDriver(type_tunnel.EndpointTunnelTypeDriver): # 父類也是EndpointTunnelTypeDriver
def __init__(self):
super(GreTypeDriver, self).__init__(
GreAllocation, GreEndpoints)
def get_type(self):
return p_const.TYPE_GRE
def initialize(self):
try:
self._initialize(cfg.CONF.ml2_type_gre.tunnel_id_ranges)
except n_exc.NetworkTunnelRangeError:
LOG.exception(_LE("Failed to parse tunnel_id_ranges. "
"Service terminated!"))
raise SystemExit()
def get_endpoints(self):
"""Get every gre endpoints from database."""
gre_endpoints = self._get_endpoints()
return [{'ip_address': gre_endpoint.ip_address,
'host': gre_endpoint.host}
for gre_endpoint in gre_endpoints]
def add_endpoint(self, ip, host):
return self._add_endpoint(ip, host)
def get_mtu(self, physical_network=None):
mtu = super(GreTypeDriver, self).get_mtu(physical_network)
return mtu - p_const.GRE_ENCAP_OVERHEAD if mtu else 0 # mtu - gre開銷,自動減去gre overhead
from neutron.plugins.common import constants as p_const
/usr/lib/python2.7/site-packages/neutron/plugins/common/constants.py
# Network Type MTU overhead
GENEVE_ENCAP_MIN_OVERHEAD = 50
GRE_ENCAP_OVERHEAD = 42 # gre開銷,為什么是42,還不清楚
VXLAN_ENCAP_OVERHEAD = 50 # vxlan開銷
L版發現neutron多了種網絡類型geneve,Geneve簡介,暫時還不知道怎么玩的
http://blog.csdn.net/yeasy/article/details/399281533、neutron.conf
advertise_mtu = true
以前的做法:
[root@controller2 ~(keystone_admin)]# cat /etc/neutron/dnsmasq-neutron.conf # 對所有network都生效
dhcp-option-force=26,1450 # 現在可以把這個去掉
log-facility=/var/log/neutron/neutron-dnsmasq.log
/usr/lib/python2.7/site-packages/neutron/agent/linux/dhcp.py
class Dnsmasq(DhcpLocalProcess):
# The ports that need to be opened when security policies are active
# on the Neutron port used for DHCP. These are provided as a convenience
# for users of this class.
if cfg.CONF.advertise_mtu:
mtu = self.network.mtu
# Do not advertise unknown mtu
if mtu > 0:
cmd.append('--dhcp-option-force=option:mtu,%d' % mtu) # 看這里
# Cap the limit because creating lots of subnets can inflate
# this possible lease cap.
cmd.append('--dhcp-lease-max=%d' %
min(possible_leases, self.conf.dnsmasq_lease_max))
cmd.append('--conf-file=%s' % self.conf.dnsmasq_config_file)
if self.conf.dnsmasq_dns_servers:
cmd.extend(
'--server=%s' % server
for server in self.conf.dnsmasq_dns_servers)參考鏈接
http://www.cnblogs.com/sammyliu/p/5079898.html
另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
網站名稱:Neutron-Automaticnetworkmtu-創新互聯
轉載來源:http://www.yijiale78.com/article4/cesioe.html
成都網站建設公司_創新互聯,為您提供企業建站、品牌網站制作、App設計、ChatGPT、網站設計、外貿建站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯