(一)问题思考
思考:为什么现在的公有云买的云主机,使用公网ip地址连接后,在云主机上ifconfig看到的却是一个私网ip?
思考:公有云上每一个用户都可以建立多个vpc网络,云厂商如何实现这么多vpc网络的隔离?
使用vlan的话,最多产生1-4094个隔离的网络(网段). 不够云厂商使用
使用vxlan的话,最多产生4096*4096-2约等于16777214个隔离的网络(1677万)
使用vxlan,对于平台来说,可以节约IP地址,
对于用户来说,安全性提高(没有公网ip,就不会被攻击.需要公网ip,在进行绑定)
(二)配置步骤
1、控制节点配置
①三层网络vxlan控制节点配置:新增网卡ifcfg-eth2
为所有节点,增加一块网卡,作为vxlan网络的隧道通信ip
[root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth2
TYPE=Ethernet
BOOTPROTO=none
NAME=eth2
DEVICE=eth2
ONBOOT=yes
IPADDR=172.16.1.11
NETMASK=255.255.255.0
GATEWAY=172.16.1.254
DNS1=223.5.5.5
[root@controller ~]#ifup eth2
②三层网络vxlan控制节点配置,修改neutron配置
修改控制节点/etc/neutron/neutron.conf文件
[DEFAULT]
...
core_plugin = ml2
service_plugins =
修改为:
[root@controller ~]# vim /etc/neutron/neutron.conf
[DEFAULT]
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = True
③三层网络vxlan控制节点配置,修改ml2
将/etc/neutron/plugins/ml2/ml2_conf.ini修改为
[DEFAULT]
[ml2]
type_drivers = flat,vlan,vxlan
tenant_network_types = vxlan
mechanism_drivers = linuxbridge,l2population
extension_drivers = port_security
[ml2_type_flat]
flat_networks = provider,net172_16
[ml2_type_geneve]
[ml2_type_gre]
[ml2_type_vlan]
[ml2_type_vxlan]
#vxlan的ID范围,最多到1677万
#值若给的太大,重启会特别慢,而且可能会报错
vni_ranges = 1:100000
[securitygroup]
enable_ipset = True
④三层网络vxlan控制节点配置:linuxbridge_agent.ini修改
将/etc/neutron/plugins/ml2/linuxbridge_agent.ini修改为
[DEFAULT]
[agent]
[linux_bridge]
physical_interface_mappings = provider:eth0,net172_16:eth1
[securitygroup]
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
[vxlan]
enable_vxlan = True
#配置隧道通讯专用的ip,地址可以变动,只需和新增的网卡相同
local_ip = 172.16.1.11
l2_population = True
⑤三层网络vxlan控制节点配置l3_agent.ini
将/etc/neutron/l3_agent.ini添加如下
[DEFAULT]
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
external_network_bridge =
⑥重启各个服务
重启服务:
systemctl restart neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service
服务重启后启动l3-agent
systemctl enable neutron-l3-agent.service
systemctl start neutron-l3-agent.service
2、计算节点配置
①三层网络vxlan计算节点配置:linuxbridge_agent.ini
31的控制节点:
将/etc/neutron/plugins/ml2/linuxbridge_agent.ini修改为
[DEFAULT]
[agent]
[linux_bridge]
physical_interface_mappings = provider:eth0,net172_16:eth1
[securitygroup]
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
[vxlan]
enable_vxlan = True
#控制节点隧道专用ip
local_ip = 172.16.1.31
l2_population = True
32的控制节点;
将/etc/neutron/plugins/ml2/linuxbridge_agent.ini修改为
[DEFAULT]
[agent]
[linux_bridge]
physical_interface_mappings = provider:eth0,net172_16:eth1
[securitygroup]
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
[vxlan]
enable_vxlan = True
#控制节点隧道专用ip
local_ip = 172.16.1.32
l2_population = True
#重启服务
systemctl restart neutron-linuxbridge-agent.service
在控制节点查看:
#展示L3 agent则成功
[root@controller ~]# neutron agent-list
3、web界面操作
步骤1:修改oldboy外网为外部网络。管理员-网络-oldbly-编辑网络-修改为外部网络
修改为外部网络后网络拓扑的图标会变换
步骤2:创建一个内部测试vpc网络。项目-网络-创建网络(test,192.168.0.0/24)
步骤3:开启外部网络的路由功能。将网络(内网vpc)和外网oldboy连通
在computer1上:
[root@computer1 ~]# vim /etc/openstack-dashboard/local_settings
OPENSTACK_NEUTRON_NETWORK = {
'enable_router': True,
#重启apache:
[root@computer1 ~]# systemctl restart httpd
之前是没有路由器的
刷新后出现路由器
创建一个路由器
路由器创建成功
点击路由器,添加端口
指定子网
网络打通
基于vpc网络启动实例
ifconfig是看不到外网ip的
测试外网访问成功(vpc-路由器-外网)
目前虚机可以访问外网
但是外部网络无法访问虚机内部
外部用户只可以访问到vpc的外网卡地址
如何配置机器被外网访问
需要绑定一个外界网络的一个浮动ip。在对应实例右面选择绑定浮动ip。通过浮动ip地址链接至实例虚拟机。
(三)网络原理图:
查看网络容器:
ip netns
进入容器:
ip netns exec ... /bin/bash
查看地址情况:
ifconfig