网络服务的运维(Neutron)
这个服务为Openstack管理所有的网络方面的虚拟网络基础设施(VNI)和访问层方面的物理网络基础设施(PNI)。H版本之前是没有neutron组件的,G版本中Quantum,最初的网络功能是在nova组件实现的,nova-network,底层采用的是linux bridge,为了规避无法快速组网和实现高级的网络功能,因此成立了全新的Neutron组件。
Neutron本身不提供任何的网络功能,提供网络功能的大部分是plugin。网络服务提供了几个抽象体:网络、子网以及路由器。每一个都包含它所模仿得物理硬件对应的功能:网络里面包含子网,不同的子网和网络之间的流量是由路由来进行传递的。在多租户的环境下提供给每个租户独立的网络环境。 目前Neutron的网络模式主要包含 Flat\Vlan\Vxlan\Gre等网络。
Neutron提供了五个子服务:neutron-l3-agent.service、neutron-linuxbridge-agent.service、neutron-server.service、neutron-dhcp-agent.service、neutron-metadata-agent.service
(1)neutron-server:实现Neutron API和API扩展、管理Network、子网和端口
(2)neutron-linuxbridge-agent:网桥
(3)neutron-dhcp-agent:负责DHCP的配置,主要作用是为虚拟机分配IP
(4)neutron-l3-agent:负责公网浮动IP和NAT,其他的三层特性,比如负载均衡,每一个network对应一个L3 agent
(5)neutron-metadata-agent:提供元数据的服务
一个标准的neutron网络是由Network\Subnet\Router\Port组成。
(1)Network:租户可以创建自己的网络,类似于VLAN的3层接口
(2)Subnet:一段IPV4/IPV6地址段,提供公网或者私网的地址
(3)Router:为地址提供地址的转换
(4)Port:管理实例的网卡,虚拟机和交换机的一个接口
LBaaS(负载均衡即服务)
负载均衡是将来访问的网络流量在运行相同应用的多个服务器之间进行分发的一种核心网络服务。负载均衡器可以是一个硬件设备,也可以由软件进行实现。
(1)负载均衡器一般可以分为两类:第4层和第7层的的负载,第4层是基于网络和传输层协议(IP\TCP\FTP\UDP等)来实现均衡负载。
(2)一些行业标准的算法:
轮询算法:轮流分发到各个服务器
加权轮循:每个服务器有一定的加权(weight),轮询的时候考虑加权
最少连接数:转发到有最少连接数的服务器上
最少响应时间:转发到响应时间最短的服务器
(3)常见的开源软件负载均衡器
HAproxy:支持虚拟机,基于TCP和HTTP的协议
LVS:4层负载均衡软件,可以实现Linux平台下简单的负载均衡
Nginx:Web服务器
FWaaS(防火墙即服务)
(1)规则
允许用户指定所匹配的名称,描述,针对的协议(TCP\UDP\ICMP\ANY),行为(Allow,Deny),源/目的IP地址/子网和端口号以及端口号区间。
(2)策略
规则的逻辑集合。策略可以进行共享和被审计的。
(3)防火墙
策略的逻辑集合。防火墙也是可以去进行共享的。
1.创建网络
[root@controller ~]# source /etc/keystone/admin-openrc.sh
[root@controller ~]# neutron net-create extnet --router:external=True //创建外网
[root@controller ~]# neutron subnet-create --gateway 192.168.200.1 --name extsubnet extnet 192.168.200.0/24 //创建外网子网
[root@controller ~]# neutron net-create intnet //创建内网
[root@controller ~]# neutron subnet-create --gateway 10.0.0.1 --name intsubnet intnet 10.0.0.0/24 //创建内网子网
[root@controller ~]# openstack network create --project admin --provider-network-type vlan --provider-physical-network provider --external testext //创建一个vlan模式的网络
2.创建路由
[root@controller ~]# neutron router-create router //创建路由
[root@controller ~]# neutron router-gateway-set router extnet //关联外网
[root@controller ~]# neutron router-interface-add router intsubnet //关联内网子网
3.创建、更新、删除安全组
功能点 | 作用描述 |
创建安全组 | 创建安全组时指定的安全组名称和描述 |
修改安全组 | 修改安全组的名称 |
添加安全组规则 | 可以指定名称、协议(TCP/UDP/ICMP),选择方向(出入口),指定远端的IP地址和安全组 |
添加单个协议(TCP/UDP/ICMP)单条入口和出口规则 | |
添加所有协议单条入口和出口规则 | |
删除安全组 | 同时删除一条或者多条安全组规则 |
安全组命令
[root@controller ~]# neutron --help |grep security
neutron CLI is deprecated and will be removed in the future. Use openstack CLI instead.
security-group-create Create a security group.
security-group-delete Delete a given security group.
security-group-list List security groups that belong to a given tenant.
security-group-rule-create Create a security group rule.
security-group-rule-delete Delete a given security group rule.
security-group-rule-list List security group rules that belong to a given tenant.
security-group-rule-show Show information of a given security group rule.
security-group-show Show information of a given security group.
security-group-update Update a given security group.
[root@controller ~]# neutron security-group-create test --tenant-id a9ef1cb9c3db40c0889807210939dee9 --description "This test"
//创建安全组,需要指定项目ID和说明信息,语法为(neutron security-group-create <name> --tenant-id <项目ID> --description<说明信息>)
[root@controller ~]# neutron security-group-update test --name S-test --description "update"
//更新安全组,语法为(neutron security-group-update <要更新的安全组名称> --name <更新后的名称> --description<更新后的说明信息>)
[root@controller ~]# neutron security-group-show S-test //查看更新后的安全组详细信息
[root@controller ~]# neutron security-group-show b036f467-0060-46e4-b87e-a3851e7f2cca -F FIELD //查看安全组详细信息,含规则
[root@controller ~]# neutron security-group-list //查看安全组列表
[root@controller ~]# neutron security-group-delete <安全组的ID> //删除单个安全组的话可以在命令后面加一个ID,删除多个就添加多个ID
4.运维安全组规则
参数 | 属性 |
--tenant-id | 指定租户/项目 |
--description | 添加描述信息 |
--direction{ingress,egress} | 指定入/出口方向 |
--ethertype | 指定以太网的类型(ipv4/6) |
--protocol | 指定分组协议 |
--port-range-min | 指定端口的起始范围 |
--port-range-max | 指定端口的结束范围 |
--remote-ip-prefix | 指定远端IP地址段 |
--remote-group-id | 指定远端安全组 |
[root@controller ~]# neutron security-group-rule-create 219de168-69ba-44d1-9428-25dea7638500 --tenant_id a9ef1cb9c3db40c0889807210939dee9 --description "test" --direction ingress --ethertype ipv4 --protocol tcp --port-range-min 22 --port-range-max 22 --remote-ip-prefix 0.0.0.0/0
//添加入方向来自0.0.0.0/0的tcp:22 端口的规则,语法如下:(neutron security-group-rule-create <安全组的ID> --tenant_id <项目ID> --description <添加说明信息> --direction <入出反向ingress或egress> --ethertype <网络类型> --protocol <协议类型> --port-range-min <起始端口> --port-range-max <结束端口> --remote-ip-prefix<远端IP>)
[root@controller ~]# neutron security-group-rule-create 219de168-69ba-44d1-9428-25dea7638500 --tenant_id a9ef1cb9c3db40c0889807210939dee9 --direction ingress --ethertype ipv4 --protocol 0 --remote-ip-prefix 0.0.0.0/0
//添加入方向的来自0.0.0.0/0的所有协议所有端口规则
[root@controller ~]# neutron security-group-rule-create 219de168-69ba-44d1-9428-25dea7638500 --tenant_id a9ef1cb9c3db40c0889807210939dee9 --direction ingress --ethertype ipv4 --protocol tcp --remote-ip-prefix 0.0.0.0/0
//添加入方向的来自0.0.0.0/0的所有TCP协议所有端口规则
[root@controller ~]# neutron security-group-rule-create 219de168-69ba-44d1-9428-25dea7638500 --tenant_id a9ef1cb9c3db40c0889807210939dee9 --direction egress --ethertype ipv4 --protocol tcp --remote-ip-prefix 0.0.0.0/0
//添加出方向的去往0.0.0.0/0的所有TCP协议所有端口规则
5.查看安全组规则的列表
--sort-key FIELD | 按照指定的方向对列表进行排序 |
--sort-dir{asc,desc} | 按指定方向对列表进行排序,默认为asc |
--no-nameconv | 不要将安全组ID转换为名称 |
[root@controller ~]# neutron security-group-rule-list --no-nameconv //查看所有的安全组规则
6.查看安全组信息
-D | 查看详细的描述信息 |
-F FIELD | 指定由服务器返回的字段 |
[root@controller ~]# neutron security-group-rule-show 02fe3e25-cc77-4fce-9b45-f5c68a37e3ff -D //查看某一个安全组规则的详细信息,后面要跟ID
- 删除一条或者多条安全组规则
[root@controller ~]# neutron security-group-rule-delete 02fe3e25-cc77-4fce-9b45-f5c68a37e3ff //删除单条安全组规则,如果删除多条就直接在后面跟对各ID,每个ID之间要空格