本文仅代表原作者PanMichael的个人观点。
在Openshift的技术交流中,我认识了陈沙克。作为Openshift的用户,陈总对Openshift的理解程度很深。本文为沙克公司的同事所写,已取得授权转载。
大魏注:
文章中所提的南北流量,实际上就是客户端对应用FQDN发起访问,通过Openshift的router解析的过程。在Openshift中,有router的概念。router的作用是对外暴露service的FQDN。
那么,router的本质是什么?
router本质上,一个router是以hostnetwork方式运行在一个node上的容器化hproxy,它的pod ip就是所在node的ip,对外暴露的端口就是:80、443、1936。
router就是一个以hostnetwork方式运行在node上的容器化haproxy,它占用了node的80、443、1936端口。所以,这也是为什么一个node上只能运行一个router的原因所在。
而F5与Openshift集成,实际上就是实现router的功能。
外部流量访问应用时,通过F5 BIG-IP硬件设备直接代理到集群中的Pod。 这样做的好处,很明显。
Openshift通过BIG-IP Controller来控制BIG-IP设备。由于Openshift是基于Kubernetes的,所以它们使用同一个Controller(k8s-bigip-ctlr)。BIG-IP Controller为集群中的应用配置BIG-IP对象,提供南北流量的服务。
BIG-IP Controller有两种方式来使用F5 BIG-IP设备
这种方式,我们测试下来发现,需要为对外提供服务的Service绑定到F5的不同端口,同时外部访问应用时需要指定端口号。如:
app1.openshift.example.com:8000
, app2.openshift.example.com:8001
,app3.openshift.example.com:8002
,其中端口号不能重复。
使用BIG-IP作为Openshift的Router,能实现以下功能:
本文只介绍,如何使用F5提供HTTP/HTTPS路由。这也是最核心的部分。
部署环境版本: 2台F5:v13 192.168.200.82 192.168.200.83 Openshift集群: v3.9.1
创建新的HostSub
Openshift
oc create -f hostsubnet.yml
创建一个VXLAN profile
F5
在F5的TMOS终端,创建一个多点模式的vxlan
create /net tunnels vxlan openshift_vxlan flooding-type multipoint
Local Address使用vip: 192.168.200.84 Secondary Address使用F5的设备IP:node1 192.168.200.82, node2 192.168.200.83
在F5 Node1上的TMOS创建Tunnel
create /net tunnels tunnel <float_tun_name> key 0 profile openshift_vxlan local-address 192.168.200.84 secondary-address 192.168.200.82 traffic-group traffic-group-1
在F5 Node2上的TMOS创建Tunnel
create /net tunnels tunnel <float_tun_name> key 0 profile openshift_vxlan local-address 192.168.200.84 secondary-address 192.168.200.83 traffic-group traffic-group-1
在每个F5设备VXLAN中创建Self IP
F5
IP为设备对应在Openshift的HostSubnet下的一个IP(只要在对应的HostSubnet下就OK) 在F5 Node1中创建Self IP
create /net self 10.129.6.82/14 allow-service none vlan openshift_vxlan
在F5 Node2中创建Self IP
create /net self 10.130.4.83/14 allow-service none vlan openshift_vxlan
在当前主F5设备的VXLAN下创建Floating IP
F5
如:当前主F5设备为node1,那Floating IP为主设备所在的HostSubnet下。
create /net self 10.128.6.84/14 allow-service none traffic-group traffic-group-1 vlan openshift_vxlan
创建一个新的Partition
F5
create auth partition OpenShift
创建访问F5 BIG-IP的私钥
Openshift
oc create secret generic bigip-login --from-literal=username=admin --from-literal=password=admin -n kube-system
创建RBAC认证
Openshift
oc create -f cluster-role.yml
部署BIG-IP Controller
Openshift
oc create -f deployment.yml
查看BIG-IP Controller的部署进度
当BIG-IP Controller POD启动后,在F5上会自动创建两个virtual servers
创建新的应用F5-Test,并创建HTTP Route
Openshift
oc new-project f5-test oc new-app harbor.example.com/public/nginx:1.14 --name=f5-test --allow-missing-images oc expose dc/f5-test --port=8080
创建Route
本地绑定hosts
192.168.200.80 f5-test.example.com
浏览器访问http://f5-test.example.com
,即能看到应用页面。
创建HTTPS Route(仍然使用上面的应用)
Openshift
本地绑定hosts
192.168.200.80 f5-test-2.example.com
浏览器访问https://f5-test.example.com
,即能看到应用页面。
说明
魏新宇