50

Openshift-F5集成(南北流量走F5)

 5 years ago
source link: http://www.10tiao.com/html/360/201806/2663487943/1.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

前言

本文仅代表原作者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与Openshift集成目的

外部流量访问应用时,通过F5 BIG-IP硬件设备直接代理到集群中的Pod。
这样做的好处,很明显。

  • 使用硬件负载均衡器替换掉软件负载均衡器,提高性能。

  • F5有更灵活的配置,可以实现更复杂的流量控制



Openshift操作

Openshift通过BIG-IP Controller来控制BIG-IP设备。由于Openshift是基于Kubernetes的,所以它们使用同一个Controller(k8s-bigip-ctlr)。BIG-IP Controller为集群中的应用配置BIG-IP对象,提供南北流量的服务。

BIG-IP Controller有两种方式来使用F5 BIG-IP设备

  • 为Openshift中的Service提供代理流量

  • 为Openshift中的Route提供代理流量


为Openshift中的Service提供代理流量(不介绍具体部署操作)

这种方式,我们测试下来发现,需要为对外提供服务的Service绑定到F5的不同端口,同时外部访问应用时需要指定端口号。如:
app1.openshift.example.com:8000, app2.openshift.example.com:8001app3.openshift.example.com:8002,其中端口号不能重复。

  • 这种方式在真正使用时不能满足业务需求,除非在F5的前面再加一层代理,这又增加了架构的复杂性。

  • 理想的状态是,所以的App应用的HTTP请求都访问F5的80端口,而HTTPS的请求访问F5的443端口,根据请求的域名路由到对应的Pool中(每个Pool是一个Service下的所有Pod的列表)。

  • 很高兴告诉大家,第二种方式能够满足上面的需求



为Openshift中的Route提供代理流量

使用BIG-IP作为Openshift的Router,能实现以下功能:

  • 为Services创建BIG-IP本地流量规则

  • 提供HTTP/HTTPS路由

  • 为Route资源添加BIG-IP健康检查


本文只介绍,如何使用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

  • 对应每台F5设备创建一个Deployment

  • Deployment中的 --bigip-url 为设备的IP

  • Deployment中的 --bigip-partition为之前F5下创建的Partition,Openshift

  • Deployment中的 --route-vserver-addr 为F5对外提供服务的IP

oc create -f deployment.yml

查看BIG-IP Controller的部署进度

当BIG-IP Controller POD启动后,在F5上会自动创建两个virtual servers

  • "ose-vserver" 为HTTP请求

  • "https-ose-vserver" 为HTTPS请求
    这两个virtual servers是Openshift下所有的Route共用的。

创建新的应用F5-Test,并创建HTTP Route Openshift

  • 使用自己镜像仓库中的镜像:harbor.example.com/public/nginx:1.14

  • 该镜像的制作方法及说明参考:Openshfit上用ConfigMap来自定义Nginx配置


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,即能看到应用页面。

说明

  • Openshit上创建Service后,F5会自动创建新的Pool,Pool里的资源即为Service下的Pod

  • 请求到达F5后,F5根据请求的域名,找到对应的Pool,请求直接到达Pod。不会请求集群里的Route。



魏新宇

  • "大魏分享"运营者、红帽资深解决方案架构师

  • 专注开源云计算、容器及自动化运维在金融行业的推广

  • 拥有MBA、ITIL V3、Cobit5、C-STAR、TOGAF9.1(鉴定级)等管理认证。

  • 拥有红帽RHCE/RHCA、VMware VCP-DCV、VCP-DT、VCP-Network、VCP-Cloud、AIX、HPUX等技术认证。




About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK