在还没有开始研究各种高大上的自动化控制之前,在还没有考虑各种复杂的企业场景之前,先来研究一下比较普遍的公有云下你希望购买几个server资源,并配上一个负载均衡设备,或者作为企业完全的虚拟化场景下做一些F5产品的测试场景。这些场景相对对SDN方面要求的弱些,就像ESXi上部署各种server,F5一样,是个虚拟化的过程。
此篇博客描述如何在租户内配置一个F5实例, 当一个租户获得资源后,在租户内部网络与传统网络并无二致,因此在实体网络经验下部署F5的经验统统可以用到。租户内部部署一台F5并不需要安装F5 plugin agent,这个实验环境与前面几篇文章有一些不一样,这是新装的一套环境,把controller节点和network节点二合一了,使用上无差异。
一、首先规划网络
1. 一般来说为F5可以设计3个网络,分别是mgmt,external,internal,因此首先为租户创建3个网络
2.到F5网站下载kvm的qcow镜像文件 downloads.f5.com, 测试中使用11.6版本,下载后,解压,并通过horizon的images界面上传
3. 创建实例资源配置flavor(管理员权限),创建一个新的flavor,根据不同需求,填写相关CPU,memory,disk资源大小,一般来说内存不应小于4G,vcpu不少于2个,磁盘不小于120G,如果你希望使用AAM,ASM这些模块的话,磁盘建议200G以上
4.加载实例,可通过images界面的launch或者instances界面launch一个新实例,选择刚才创建的flavor,如果希望使用私钥无密码登录方式,在此时可以配置key pair,networking部分选择刚才创建的三个网络,但注意顺序,系统将自动把第一个NIC作为管理接口
注意:此时检查一下compute节点里nova-compute.conf配置文件的libvirt配置项是否使用的是kvm,用qemu的会导致实例加载很慢。
1 2 3 4 5 |
root@compute:/home/gavin# cat /etc/nova/nova-compute.conf [DEFAULT] compute_driver=libvirt.LibvirtDriver [libvirt] virt_type=kvm |
5.同样的方法创建2台linux虚机,注意flavor根据实际情况选用,一个网络接入一台虚机
6.由于此时所有设备都在租户内部,且没有图形化机器,如果希望图形化管理F5则没法实现,因此可以将F5的某个接口例如mgmt映射到外部实体网络,本实验使用L3 router,因此通过在L3 router上为mgmt网络分配一个floating IP即可实现从外部访问mgmt接口地址
6.1 管理员权限下,创建一个internet网络,注意网络属性为shared和external network
最后所有网络如下:
6.2 进入租户网络界面-routers,创建一个新router,并增加mgmt网络的接口
同时为该router 关联外部网络gateway,关联之后,效果如下:
上图中将租户external网络10.168.168.0/24也连接到路由器是为了实现后面从public网络访问相关vs
最终完成后,网络拓扑如下:
注意因为之前internet网络的网关被填错网段IP导致dhcp时候没有给router自动设置缺省路由,因此此时的router里都是网段的直连路由,如果没有缺省路由,需要手工在路由器里添加:
1 2 3 4 5 6 7 8 9 |
root@controller:/home/gavin# ip netns exec qrouter-5b136b9b-a60c-431c-aba7-16c055b3dc23 netstat -nr Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 9.9.9.0 0.0.0.0 255.255.255.0 U 0 0 0 qg-252855d1-85 10.168.168.0 0.0.0.0 255.255.255.0 U 0 0 0 qr-8764f7a6-10 172.168.168.0 0.0.0.0 255.255.255.0 U 0 0 0 qr-41ba4ea6-06 ip netns exec qrouter-5b136b9b-a60c-431c-aba7-16c055b3dc23 ip route add default via 9.9.9.253 |
7 分配floating IP
点击F5实例后ACTION中的Associate floating IP,分别为F5的mgmt和external网络接口映射floating IP,映射完毕后相当于通过路由器做了1-1 NAT
最后各个实例情形如下:
F5实例启动后,系统的mgmt口将自动获取neutron 分配给的IP,并自动根据IP命名一个hostname,此时通过管理口的floating ip 9.9.9.24可以访问该F5,剩下的就是进入F5进行相关license,模块,vlan,selfIP的配置,注意在配置vlan的时候你需要根据界面显示的MAC地址判断该端口是属于那个subnet的。
注意:此时很可能能ping通F5 floating地址,也能ssh上去,但是HTTPS则无法访问,这是由于GRE网络的MTU问题,将F5的eth0接口MTU调小为1450:
1 2 3 4 5 6 7 8 9 |
[root@host-172-168-168-10:Active:Standalone] config # ifconfig eth0 eth0 Link encap:Ethernet HWaddr FA:16:3E:FB:D9:D0 inet addr:172.168.168.10 Bcast:172.168.168.255 Mask:255.255.255.0 inet6 addr: fe80::f816:3eff:fefb:d9d0/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1400 Metric:1 RX packets:41527 errors:0 dropped:0 overruns:0 frame:0 TX packets:50683 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:7294941 (6.9 MiB) TX bytes:14537124 (13.8 MiB) |
关于MTU控制,见这个文章
然后根据网络配置 pool vs sna routet等:
在F5里ping 8.8
1 2 3 4 5 |
[root@host-172-168-168-10:Active:Standalone] config # ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=45 time=79.3 ms 64 bytes from 8.8.8.8: icmp_seq=3 ttl=45 time=77.9 ms 64 bytes from 8.8.8.8: icmp_seq=4 ttl=45 time=77.8 ms |
.8.8 正常:
此时通过在各个linux上ping F5 self IP都是ok的,但是你会发现ping vip地址却无法ping通。这是因为由于VIP是在F5内部创立的,neutron根本不知道该IP,neutron为了安全默认不容许一个MAC上绑定多个IP,必须配置端口的 allowed_address_pair, 将某个IP关联到某个端口上。
注意:如果通过F5 lbaas agent来管理openstack内部的BIGP-VE,lbaas获取的self IP也没有allow到VE实例对应的neutron port上,因此也需要通过update 实例对应neutron port的allowed-address-pair
因此在这里我们需要将vip关联到external的网络端口上:
A. 首先为vip在neutron中创建端口
1 |
neutron port-create tenant-external --fixed-ip ip_address=10.168.168.150 --security-group c04fdf8a-80a3-417f-88e1-b9d37be07e44 --name f5-vip-3 --device-id bbe4b2a1-fc31-4fbf-be8e-fd25095f5f69 |
上述命令中 tenant-external是网络名,配置一个fixed IP,并为该port关联安全组,并关联设备ID,其中安全组的ID以及设备ID,可以通过horizion界面查看该网络其他端口获得,也可以通过neutron port-show your-port-id来获得,例如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
root@controller:/home/gavin# neutron port-show e5852ab5-c7de-4b50-b285-5650d50cf26b +-----------------------+-------------------------------------------------------------------------------------+ | Field | Value | +-----------------------+-------------------------------------------------------------------------------------+ | admin_state_up | True | | allowed_address_pairs | | | binding:host_id | compute | | binding:profile | {} | | binding:vif_details | {"port_filter": true, "ovs_hybrid_plug": true} | | binding:vif_type | ovs | | binding:vnic_type | normal | | device_id | bbe4b2a1-fc31-4fbf-be8e-fd25095f5f69 | | device_owner | compute:nova | | extra_dhcp_opts | | | fixed_ips | {"subnet_id": "ef198bb8-6257-4430-a43d-05f7e796630b", "ip_address": "10.168.168.2"} | | id | e5852ab5-c7de-4b50-b285-5650d50cf26b | | mac_address | fa:16:3e:49:69:7d | | name | | | network_id | b18be738-1ba3-476c-9824-9ce31c6108c7 | | security_groups | c04fdf8a-80a3-417f-88e1-b9d37be07e44 | | status | ACTIVE | | tenant_id | 496355a769d94241afbbdc76adbe1fb5 | +-----------------------+-------------------------------------------------------------------------------------+ |
port ID 则可以通过 neutron port-list获得。
B. vip port创建完毕后,将该IP或者IP段关联到F5 tenant-external selfip的端口上:
1 2 |
root@controller:/home/gavin# neutron port-update e5852ab5-c7de-4b50-b285-5650d50cf26b --allowed_address_pairs list=true type=dict ip_address=10.168.168.100 Updated port: e5852ab5-c7de-4b50-b285-5650d50cf26b |
可以看到下面命令输出中的allowed_address_pairs已经有了相关IP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
root@controller:/home/gavin# neutron port-show e5852ab5-c7de-4b50-b285-5650d50cf26b +-----------------------+-------------------------------------------------------------------------------------+ | Field | Value | +-----------------------+-------------------------------------------------------------------------------------+ | admin_state_up | True | | allowed_address_pairs | {"ip_address": "10.168.168.100", "mac_address": "fa:16:3e:49:69:7d"} | | binding:host_id | compute | | binding:profile | {} | | binding:vif_details | {"port_filter": true, "ovs_hybrid_plug": true} | | binding:vif_type | ovs | | binding:vnic_type | normal | | device_id | bbe4b2a1-fc31-4fbf-be8e-fd25095f5f69 | | device_owner | compute:nova | | extra_dhcp_opts | | | fixed_ips | {"subnet_id": "ef198bb8-6257-4430-a43d-05f7e796630b", "ip_address": "10.168.168.2"} | | id | e5852ab5-c7de-4b50-b285-5650d50cf26b | | mac_address | fa:16:3e:49:69:7d | | name | | | network_id | b18be738-1ba3-476c-9824-9ce31c6108c7 | | security_groups | c04fdf8a-80a3-417f-88e1-b9d37be07e44 | | status | ACTIVE | | tenant_id | 496355a769d94241afbbdc76adbe1fb5 | +-----------------------+-------------------------------------------------------------------------------------+ |
实际上为了未来方便,可以在该端口上绑定网段,这样未来创建vip就不需要挨个绑定了:
neutron port-update e5852ab5-c7de-4b50-b285-5650d50cf26b --allowed_address_pairs list=true type=dict ip_address=10.168.168.0/24
绑定网段后,以后创建vip,只需先创建一个对应的port,然后在F5上创建vs即可。
此时horizon实例界面显示如下:
100.150的IP都是后创建的vip 端口:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
root@controller:/home/gavin# neutron port-list +--------------------------------------+----------+-------------------+----------------------------------------------------------------------------------------+ | id | name | mac_address | fixed_ips | +--------------------------------------+----------+-------------------+----------------------------------------------------------------------------------------+ | 08fb0db5-f0fc-4c77-bcc2-fe9631b30848 | f5-vip-3 | fa:16:3e:8f:7f:97 | {"subnet_id": "ef198bb8-6257-4430-a43d-05f7e796630b", "ip_address": "10.168.168.150"} | | 1aa4d9f7-fa14-4103-846b-8ff9e2e6ba9c | | fa:16:3e:35:3c:49 | {"subnet_id": "d4aea7b7-4328-4557-b0d4-b511998f30d1", "ip_address": "192.168.168.2"} | | 252855d1-85ad-4ecc-9887-c5f2e6e9b6f4 | | fa:16:3e:75:88:04 | {"subnet_id": "7e1ba559-7234-413e-8f31-e24ea544d325", "ip_address": "9.9.9.20"} | | 273f3820-e3fd-40ef-94dd-ce1f354bb7a6 | f5-vip-1 | fa:16:3e:a3:80:43 | {"subnet_id": "ef198bb8-6257-4430-a43d-05f7e796630b", "ip_address": "10.168.168.100"} | | 41ba4ea6-0611-44dc-a2cc-1b3efd07828e | | fa:16:3e:09:03:74 | {"subnet_id": "b7633796-364a-46ce-858d-e372d5c07d8e", "ip_address": "172.168.168.254"} | | 6857045b-90b3-4ff8-a5b1-b2e8c30cee12 | | fa:16:3e:17:57:d3 | {"subnet_id": "ef198bb8-6257-4430-a43d-05f7e796630b", "ip_address": "10.168.168.1"} | | 75f947f7-7168-4794-9026-97579826e412 | | fa:16:3e:f9:88:89 | {"subnet_id": "d4aea7b7-4328-4557-b0d4-b511998f30d1", "ip_address": "192.168.168.13"} | | 7ccbdb1d-d91c-4b23-97d6-ac1596f06c2c | f5-vip-2 | fa:16:3e:ee:68:e5 | {"subnet_id": "ef198bb8-6257-4430-a43d-05f7e796630b", "ip_address": "10.168.168.200"} | | 8764f7a6-10ad-4f84-bc39-00862036fbff | | fa:16:3e:99:e6:dd | {"subnet_id": "ef198bb8-6257-4430-a43d-05f7e796630b", "ip_address": "10.168.168.254"} | | 8f9fb209-7e5b-4756-ae53-1c9857bb6b25 | | fa:16:3e:9e:15:da | {"subnet_id": "7e1ba559-7234-413e-8f31-e24ea544d325", "ip_address": "9.9.9.24"} | | 99d0009e-751d-4ae6-8ea4-78df49393310 | | fa:16:3e:12:bf:d1 | {"subnet_id": "7e1ba559-7234-413e-8f31-e24ea544d325", "ip_address": "9.9.9.21"} | | 9edf76a7-5ebc-4111-807a-274f8a700368 | | fa:16:3e:5a:73:da | {"subnet_id": "7e1ba559-7234-413e-8f31-e24ea544d325", "ip_address": "9.9.9.23"} | | a0b3dec3-a5be-461b-a5f6-bee8dc7c6dde | | fa:16:3e:18:4e:44 | {"subnet_id": "d4aea7b7-4328-4557-b0d4-b511998f30d1", "ip_address": "192.168.168.12"} | | d05f4508-a660-4615-aded-224650fefeb4 | | fa:16:3e:c4:57:4c | {"subnet_id": "7e1ba559-7234-413e-8f31-e24ea544d325", "ip_address": "9.9.9.25"} | | d2f3bbf8-0372-4aa1-b5a6-dede0cb4dddf | | fa:16:3e:fb:d9:d0 | {"subnet_id": "b7633796-364a-46ce-858d-e372d5c07d8e", "ip_address": "172.168.168.10"} | | e2d5edcb-1801-4914-8b7c-ce9949d5ce82 | | fa:16:3e:6d:e9:01 | {"subnet_id": "b7633796-364a-46ce-858d-e372d5c07d8e", "ip_address": "172.168.168.2"} | | e4087e44-ed47-448b-9965-1dac38d4fe60 | | fa:16:3e:5b:10:ce | {"subnet_id": "ef198bb8-6257-4430-a43d-05f7e796630b", "ip_address": "10.168.168.3"} | | e5852ab5-c7de-4b50-b285-5650d50cf26b | | fa:16:3e:49:69:7d | {"subnet_id": "ef198bb8-6257-4430-a43d-05f7e796630b", "ip_address": "10.168.168.2"} | +--------------------------------------+----------+-------------------+----------------------------------------------------------------------------------------+ |
最后,需要为vip关联floating IP以便能够从外部访问该VS,点击access&security 菜单,进入 faloting IPS 配置界面,将IP关联给vip:
现在, 可以通过从外部网络访问9.9.9.23实现访问该VIIP了:
最后拓扑如下,可以看到创建的vip也被显示在了图形上:
在整个上述过程中,并没有给internal端口设置allowed address pairs,由于snat使用的是automap,所以通讯正常,如果此时换为一个snat pool的话,同样需要在internal端口上设置allowed address pairs,否则snat将不通:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
root@controller:/home/gavin# neutron port-update a0b3dec3-a5be-461b-a5f6-bee8dc7c6dde --allowed_address_pairs list=true type=dict ip_address=192.168.168.0/24 Updated port: a0b3dec3-a5be-461b-a5f6-bee8dc7c6dde root@controller:/home/gavin# neutron port-show a0b3dec3-a5be-461b-a5f6-bee8dc7c6dde +-----------------------+---------------------------------------------------------------------------------------+ | Field | Value | +-----------------------+---------------------------------------------------------------------------------------+ | admin_state_up | True | | allowed_address_pairs | {"ip_address": "192.168.168.0/24", "mac_address": "fa:16:3e:18:4e:44"} | | binding:host_id | compute | | binding:profile | {} | | binding:vif_details | {"port_filter": true, "ovs_hybrid_plug": true} | | binding:vif_type | ovs | | binding:vnic_type | normal | | device_id | bbe4b2a1-fc31-4fbf-be8e-fd25095f5f69 | | device_owner | compute:nova | | extra_dhcp_opts | | | fixed_ips | {"subnet_id": "d4aea7b7-4328-4557-b0d4-b511998f30d1", "ip_address": "192.168.168.12"} | | id | a0b3dec3-a5be-461b-a5f6-bee8dc7c6dde | | mac_address | fa:16:3e:18:4e:44 | | name | | | network_id | 3bd17cd2-faca-4763-bfa8-7027b2b910d1 | | security_groups | c04fdf8a-80a3-417f-88e1-b9d37be07e44 | | status | ACTIVE | | tenant_id | 496355a769d94241afbbdc76adbe1fb5 | +-----------------------+---------------------------------------------------------------------------------------+ |
数据path如下:
本次实验测试的是LTM产品,实际上此时GTM,ASM,AFM等所有F5产品都可以使用。
总结起来可以发现,在租户内部部署一个F5如果使用全命令行会方便许多,主要步骤包含,将这些脚本化可实现自动化部署一套F5设备。
1.创建网络
2.创建实例
3.创建vip端口
4.更新self ip端口allowed addr pairs
5.分配floating ip
文章评论