Cloud Native应用交付

  • 首页
  • 关于本站
  • 个人介绍
  • Downloads
  • Repo
    • Github
    • Container
  • F5
    • F5 Python SDK
    • F5-container
    • F5-LBaaS
  • 社交
    • 联系我
    • 微信/微博
    • 公众号
    • 打赏赞助
行至水穷处 坐看云起时
Cloud Native Application Services: cnadn.net
  1. 首页
  2. 化云为雨/Openstack
  3. 正文

Openstack L3-GRE网络与 F5 协作之租户内部BIGIP(ICEHOUSE)

2015年04月28日 13546点热度 0人点赞 2条评论

在还没有开始研究各种高大上的自动化控制之前,在还没有考虑各种复杂的企业场景之前,先来研究一下比较普遍的公有云下你希望购买几个server资源,并配上一个负载均衡设备,或者作为企业完全的虚拟化场景下做一些F5产品的测试场景。这些场景相对对SDN方面要求的弱些,就像ESXi上部署各种server,F5一样,是个虚拟化的过程。

此篇博客描述如何在租户内配置一个F5实例, 当一个租户获得资源后,在租户内部网络与传统网络并无二致,因此在实体网络经验下部署F5的经验统统可以用到。租户内部部署一台F5并不需要安装F5 plugin agent,这个实验环境与前面几篇文章有一些不一样,这是新装的一套环境,把controller节点和network节点二合一了,使用上无差异。

一、首先规划网络

1. 一般来说为F5可以设计3个网络,分别是mgmt,external,internal,因此首先为租户创建3个网络(10GB@MQVLS(Y]VQ`EBS))R

2.到F5网站下载kvm的qcow镜像文件 downloads.f5.com, 测试中使用11.6版本,下载后,解压,并通过horizon的images界面上传

I_F}91$~A{XDNF$[2_0~KQU

3. 创建实例资源配置flavor(管理员权限),创建一个新的flavor,根据不同需求,填写相关CPU,memory,disk资源大小,一般来说内存不应小于4G,vcpu不少于2个,磁盘不小于120G,如果你希望使用AAM,ASM这些模块的话,磁盘建议200G以上

]~_[5$WAZ0OO~0UR49Y`{T2

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

HN[{F{0LE5Z@EX{`Z9N@1DH

5.同样的方法创建2台linux虚机,注意flavor根据实际情况选用,一个网络接入一台虚机

6.由于此时所有设备都在租户内部,且没有图形化机器,如果希望图形化管理F5则没法实现,因此可以将F5的某个接口例如mgmt映射到外部实体网络,本实验使用L3 router,因此通过在L3 router上为mgmt网络分配一个floating IP即可实现从外部访问mgmt接口地址

6.1 管理员权限下,创建一个internet网络,注意网络属性为shared和external network

35F{I{OH@`3W`A68$$B0T0G

最后所有网络如下:

J786U[5~L4RK2Z7XE)5]]7W

6.2 进入租户网络界面-routers,创建一个新router,并增加mgmt网络的接口

17@]_ARA1}P1{CZ7QE3L1GP

同时为该router 关联外部网络gateway,关联之后,效果如下:

W`EMT[~TJ[BN50IDWDG]UVW上图中将租户external网络10.168.168.0/24也连接到路由器是为了实现后面从public网络访问相关vs

最终完成后,网络拓扑如下:

Q~FTF0$CPPAHFTR$D@5W438

注意因为之前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

TH7{IG(H4EX`14576VSQ4ON

最后各个实例情形如下:

]OVB4)5BS)}Y)$M701SFB46

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控制,见这个文章

5YF5LMSC}~MD0WFM(7T0AEV

然后根据网络配置 pool vs sna routet等:

D4)_D$N6EVV1}XI]UD@0@2L

在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实例界面显示如下:

W0SA6FQAF@UHVIN50FZ)L8J

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:

355@Q[II}2LRBOTA`)~_1@Y

1YWSRJR9N962I2OUPWT{{`J

现在, 可以通过从外部网络访问9.9.9.23实现访问该VIIP了:

$[YC)J9C]2XZ~$3}T90F]3T

最后拓扑如下,可以看到创建的vip也被显示在了图形上:

}[JB9{SGV~$VQZG]53]O$03

在整个上述过程中,并没有给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如下:

f5-tenant-inside

本次实验测试的是LTM产品,实际上此时GTM,ASM,AFM等所有F5产品都可以使用。

总结起来可以发现,在租户内部部署一个F5如果使用全命令行会方便许多,主要步骤包含,将这些脚本化可实现自动化部署一套F5设备。

1.创建网络

2.创建实例

3.创建vip端口

4.更新self ip端口allowed addr pairs

5.分配floating ip

 

 

 

 

 

 

相关文章

  • Icehouse Vxlan 配置
  • openstack heat模板之配置基本LB到F5 BIGIP
  • Openstack L3-GRE网络与 F5 协作之内部BIGIP跨租户(ICEHOUSE)
  • openstack L3-GRE 网络结构分析记录 (Icehouse) 第六篇(LBaaS-haproxy)
  • Ubuntu 14.04安装openstack icehouse版本(多节点模式)
本作品采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可
标签: F5 lbaas openstack 租户内负载均衡
最后更新:2017年10月27日

纳米

linjing.io

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理。

页面AI聊天助手

纳米

linjing.io

☁️迈向Cloud Native ADC ☁️

认证获得:
TOGAF: ID 152743
Kubernetes: CKA #664
Microsoft: MCSE MCDBA
Cisco: CCNP
Juniper: JNCIS
F5:
F5 Certified Solution Expert, Security
F5 Certified Technology Specialist, LTM/GTM/APM/ASM
F5 Certified BIG-IP Administrator
  • 点击查看本博技术要素列表
  • 归档
    分类
    • AI
    • Automation
    • Avi Networks
    • Cisco ACI
    • CISCO资源
    • F5 with ELK
    • F5-Tech tips
    • F5技术
    • Juniper
    • Linux
    • NGINX
    • SDN
    • ServiceMesh
    • WEB编程
    • WINDOWS相关
    • 业界文章
    • 交换机技术
    • 化云为雨/Openstack
    • 协议原理
    • 容器/k8s
    • 我的工作
    • 我的生活
    • 网站技术
    • 路由器技术
    • 项目案例
    标签聚合
    envoy neutron F5 network docker nginx api k8s flannel istio gtm bigip irule openstack DNS
    最近评论
    汤姆 发布于 8 个月前(09月10日) 嗨,楼主,里面的json怎么下载啊,怎么收费啊?
    汤姆 发布于 8 个月前(09月09日) 大佬,kib的页面可以分享下吗?谢谢
    zhangsha 发布于 1 年前(05月12日) 资料发给我下,谢谢纳米同志!!!!lyx895@qq.com
    李成才 发布于 1 年前(01月02日) 麻烦了,谢谢大佬
    纳米 发布于 1 年前(01月02日) 你好。是的,因为以前下载系统插件在一次升级后将所有的下载生成信息全弄丢了。所以不少文件无法下载。DN...
    浏览次数
    • Downloads - 183,650 views
    • 联系我 - 118,966 views
    • 迄今为止最全最深入的BIGIP-DNS/GTM原理及培训资料 - 116,201 views
    • Github - 103,543 views
    • F5常见log日志解释 - 79,727 views
    • 从传统ADC迈向CLOUD NATIVE ADC - 下载 - 74,503 views
    • Sniffer Pro 4 70 530抓包软件 中文版+视频教程 - 74,320 views
    • 迄今为止最全最深入的BIGIP-DNS/GTM原理及培训资料 - 67,770 views
    • 关于本站 - 60,798 views
    • 这篇文档您是否感兴趣 - 55,463 views
    链接表
    • F5SE创新
    • Jimmy Song‘s Blog
    • SDNlab
    • Service Mesh社区
    • 三斗室
    • 个人profile
    • 云原生社区

    COPYRIGHT © 2023 Cloud Native 应用交付. ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang

    京ICP备14048088号-1

    京公网安备 11010502041506号