多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] ## 一 引出为什么要用vxlan ### 1.什么是vxlan vxlan(virtual Extensible LAN)虚拟可扩展局域网,是一种overlay的网络技术,采用L2 over L4(MAC-in-UDP)的报文封装模式,将二层报文用三层协议进行封装,可实现二层网络在三层范围内进行扩展,同时满足数据中心大二层虚拟迁移和多租户的需求。 ### 2.VXLAN优点 VXLAN与VLAN相比能够提供更好的扩展性和灵活性,主要有以下特点: * 应用灵活部署: 通过 VXLAN 封装后的 2 层以太网帧可以跨 3 层网络边界,让组网以及应用部署变得更加灵活,同时解决多租户网络环境中 IP 地址冲突问题。 * 更好的扩展性: 传统VLAN ID字段为12-bit,VLAN数量最大为4096;VXLAN使用24-bit VNID(VXLAN network identifier),最大支持1678万个逻辑网络。 * 提高网络利用率: 传统以太网使用STP预防环路,STP导致网络冗余路径处于阻塞状态,VXLAN报文基于3层IP报头传输,能有效利用网络路径,支持ECMP(equal-cost multipath )和链路聚合协议。 ### 3.VXLAN相关术语 * VTEP设备:VXLAN Tunnel Endpoint(VTEP) VXLAN 使用 VTEP 设备对 VXLAN 报文进行封装与解封装,包括 ARP 请求报文和正常的 VXLAN 数据报文 VTEP 将原始以太网帧通过 VXLAN 封装后发送至对端 VTEP 设备,对端 VTEP 接收到 VXLAN 报文后解封装然后根据原始MAC进行转发 VTEP可以是物理交换机、物理服务器或者其他支持 VXLAN 的硬件设备或软件来实现。 * VNI号:Virtual Network ID(VNI) VNI封装在VXLAN头部,共24-bit,最大支持16,000,000逻辑网络。 可以理解为vxlan的vlan-id * VXLAN网关: VXLAN网关用于连接VXLAN网络和传统VLAN网络,VXLAN网关实现VNI和VLANID 之间的映射,VXLAN 网关实际上也是一台 VTEP 设备。 * 组播组: VTEP 设备要加入相同的组播组,主要用于控制平面地址学习。 ## 二 vxlan的部署 **网卡与IP信息** | 主机名 | eth0(默认) | eth1(flat测试) | eth2(vxlan测试) | | --- | --- | --- | --- | | controller | 10.0.0.11 | 172.16.0.11 | 172.16.1.11 | | compute01 | 10.0.0.31 | 172.16.0.31 | 172.16.1.31 | | compute02 | 10.0.0.32 | 172.16.0.32 | 172.16.1.32 | ### 步骤1:所有节点增加网卡 为所有节点,增加一块网卡,作为vxlan网络的隧道通信ip,采用网段为`172.16.1.0`,具体IP分配见上文. **编辑网卡信息** ```sh vim /etc/sysconfig/network-scripts/ifcfg-eth2 TYPE=Ethernet BOOTPROTO=none NAME=eth2 DEVICE=eth2 ONBOOT=yes IPADDR=172.16.1.11 GATEWAY=172.16.1.254 NETMASK=255.255.255.0 ``` **启动网卡并验证** ```sh ifup eth2 #在计算节点测试ping 172.16.1.11 ``` ### 步骤2:控制节点修改neutron.conf 将`/etc/neutron/neutron.conf`中的以下数据 ```sh [DEFAULT] ... core_plugin = ml2 service_plugins = ``` 手动修改为 ```sh [DEFAULT] ... core_plugin = ml2 service_plugins = router allow_overlapping_ips = True ``` 也可是使用非交互式修改方法 ```sh openstack-config --set /etc/neutron/neutron.conf DEFAULT service_plugins router openstack-config --set /etc/neutron/neutron.conf DEFAULT allow_overlapping_ips True ``` ### 步骤3:控制节点修改配置ml2/ml2_conf.ini 通过非交互式方式修改`/etc/neutron/plugins/ml2/ml2_conf.ini`,修改对比如下图 ![修改前后对比](https://www.github.com/noah-luo/imags/raw/master/year/1558679138894.png) ```sh cd /etc/neutron/plugins/ml2/ openstack-config --set ml2_conf.ini ml2 type_drivers flat,vlan,vxlan openstack-config --set ml2_conf.ini ml2 tenant_network_types vxlan openstack-config --set ml2_conf.ini ml2 mechanism_drivers linuxbridge,l2population openstack-config --set ml2_conf.ini ml2_type_vxlan vni_ranges 1:100000 ``` ### 步骤4:控制节点修改/ml2/linuxbridge_agent.ini 只修改`/ml2/linuxbridge_agent.ini`的`vxlan`模块内容 ```sh cd /etc/neutron/plugins/ml2/ my_ip=$(ip addr show dev eth0|awk -F"[ |/]+" 'NR==3 {print $3'}) openstack-config --set linuxbridge_agent.ini vxlan enable_vxlan True openstack-config --set linuxbridge_agent.ini vxlan local_ip $my_ip openstack-config --set linuxbridge_agent.ini vxlan l2_population True tail -4 linuxbridge_agent.ini ``` > [vxlan] enable_vxlan = True local_ip = 172.16.1.11 l2_population = True ### 步骤5:控制节点修改l3_agent.ini 由于第一次使用该配置,故先备份在修改 **备份** ```sh cd /etc/neutron/ cp l3_agent.ini{,.bak} egrep -v "#|^$" l3_agent.ini.bak >l3_agent.ini ``` **修改** ```sh openstack-config --set l3_agent.ini DEFAULT interface_driver neutron.agent.linux.interface.BridgeInterfaceDriver openstack-config --set l3_agent.ini DEFAULT external_network_bridge "" cat l3_agent.ini ``` > [DEFAULT] > interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver > external_network_bridge = > [AGENT] ### 步骤6:控制节点重启/启动服务 ~~~sh #重启一下服务 systemctl restart neutron-server.service systemctl restart neutron-linuxbridge-agent.service systemctl restart neutron-dhcp-agent.service systemctl restart neutron-metadata-agent.service #启动并开机自启l3服务 systemctl enable neutron-l3-agent.service systemctl start neutron-l3-agent.service ~~~ ### 步骤7:计算节点配置[所有] 配置ml2/linuxbridge_agent.ini的vxlan模块数据 ```sh cd /etc/neutron/plugins/ml2/ my_ip=$(ip addr show dev eth0|awk -F"[ |/]+" 'NR==3 {print $3'}) openstack-config --set linuxbridge_agent.ini vxlan enable_vxlan True openstack-config --set linuxbridge_agent.ini vxlan local_ip $my_ip openstack-config --set linuxbridge_agent.ini vxlan l2_population True tail -4 linuxbridge_agent.ini ``` > [vxlan] enable_vxlan = True local_ip = 172.16.1.31 l2_population = True **重启服务** ```sh systemctl restart neutron-linuxbridge-agent.service ``` **最后在控制节点验证** ```sh neutron agent-list #确保有6个服务,且包含neutron-l3-agent服务 ``` ## web配置和操作 ### 1.修改dashboard启用路由 ```sh sed '/enable_router/' /etc/openstack-dashboard/local_settings systemctl restart httpd.service sed -n '/enable_router/p' /etc/openstack-dashboard/local_settings #结果: 'enable_router': True, ``` ### 2.web界面实际操作 1. 项目--计算--实例 删除所有实例 2. 管理员--系统--网络 修改noah网络,勾选外部网络,取消勾选共享 3. 项目--网络--路由器 创建路由器:路由器名称[test-inter],外部网络[noah] 添加接口:进入路由器--接口--添加接口 4. 项目--网络--网络拓扑 看外网[noah]是否下挂了路由器[test-inter] 路由器下是否挂载了内网网络[net172_16] 5. 项目--计算--映像 创建两个实例,网路选择我们内网网络[net172_16] 然后可以给实例关联外网IP 6. q 7. q 8.