Kubernetes Gateway API趨勢
Kubernetes已成為全球開發(fā)人員和IT運(yùn)營團(tuán)隊(duì)使用的最受歡迎的開源容器編排平臺之一。它提供了一種高效、自動(dòng)、可擴(kuò)展和自愈的方式部署和管理容器化應(yīng)用程序,并且能實(shí)現(xiàn)資源配比優(yōu)化。對于任何想要使用容器來增強(qiáng)其IT運(yùn)營的組織來說,它是一個(gè)必不可少的工具。順便說一句,它得到了廣泛的社區(qū)支持,是目前K8S社區(qū)最熱門的項(xiàng)目之。
Kubernetes:
https://github.com/orgs/kubernetes-sigs/repositories
隨著越來越多的企業(yè)采用Kubernetes作為其容器化應(yīng)用交付平臺,可靠和安全的入口控制變得非常重要。
SIG Gateway API(簡稱“Gateway API”)是一種Kubernetes網(wǎng)絡(luò)解決方案,它使管理員能夠以可擴(kuò)展和自動(dòng)化的方式配置和管理網(wǎng)絡(luò)基礎(chǔ)設(shè)施。
SIG Gateway API:
https://gateway-api.sigs.k8s.io/
Gateway API是一個(gè)Kubernetes增強(qiáng)定義,它引入了一種聲明式和可擴(kuò)展的方式來管理網(wǎng)絡(luò)基礎(chǔ)設(shè)施,包括負(fù)載均衡器、防火墻和代理。它提供了一種統(tǒng)一的方式來管理這些資源,跨不同的云提供商,跨Kubernetes發(fā)行版。它簡化了配置過程,減少運(yùn)營開銷。Gateway API成為Kubernetes生態(tài)系統(tǒng)的一個(gè)重要組成部分,并得到了Google、亞馬遜云科技和Microsoft等主要供應(yīng)商的支持。
Kubernetes Gateway API:
https://gateway-api.sigs.k8s.io/implementations/
BIG-IP的應(yīng)用交付(ADC)能力和場景
作為市場領(lǐng)導(dǎo)者,F(xiàn)5 BIG-IP提供了廣泛而先進(jìn)的應(yīng)用程序交付功能,如流量管理、安全和流量加速。它使得企業(yè)能夠靈活的擴(kuò)展其應(yīng)用程序、提高可用性,增加安全等級,幫助企業(yè)向其用戶提供快速、安全和高可用的應(yīng)用程序。
F5 BIG-IP擅長LoadBalancing、SSL/TLS卸載、應(yīng)用程序加速、安全性和HA等等。在網(wǎng)絡(luò)方案方面,F(xiàn)5 BIG-IP適用于中到大型企業(yè)的網(wǎng)絡(luò)環(huán)境,支持多云和多協(xié)議。同時(shí),它可以在公共云、私有云或物理數(shù)據(jù)中心中運(yùn)行。
將BIG-IP與Kubernetes Gateway API集成的意義
總結(jié)為一句話,那就是:在Kubernetes環(huán)境中釋放BIG-IP強(qiáng)大的ADC功能。
基于上述對kubernetes社區(qū)Gateway API趨勢的理解以及對BIG-IP強(qiáng)大功能的評估,我們孵化了項(xiàng)目“BIG-IP Kubernetes Gateway API Controller”。
BIG-IP Kubernetes Gateway API Controller:
https://github.com/f5devcentral/bigip-kubernetes-gateway
BIG-IP Kubernetes GatewayAPI Controller是來自F5 Inc.開源項(xiàng)目,它實(shí)現(xiàn)了一種基于BIG-IP LTM的實(shí)現(xiàn)方式。
借助BIG-IP Kubernetes GatewayAPI Controller,通過YAML格式在Kubernetes中部署與業(yè)務(wù)相關(guān)的Gateway API配置,相關(guān)配置可以自動(dòng)的轉(zhuǎn)換為BIG-IP的相應(yīng)LTM/網(wǎng)絡(luò)配置,在BIG-IP上實(shí)現(xiàn)各種Gateway功能,如TLS卸載、負(fù)載平衡、流量路由、四七層業(yè)務(wù)發(fā)布等等。
通過Gateway API在不同流量解決方案中的規(guī)范一致性,BIG-IP Kubernetes GatewayAPI Controller幫助用戶實(shí)現(xiàn)了南北向與東西向流量解決方案的共存與協(xié)同。這意味著用戶在linkerd或Istio等服務(wù)網(wǎng)格解決方案場景中可以繼續(xù)獲得F5 BIG-IP強(qiáng)大的企業(yè)級特性。
BIG-IP集成Gateway API設(shè)計(jì)思路
BIG-IP Kubernetes GatewayAPI Controller是golang語言的開源實(shí)現(xiàn),以獨(dú)立程序的方式運(yùn)行在pod中。
資源監(jiān)控
與所有其他CRD實(shí)現(xiàn)一樣,BIG-IP Kubernetes GatewayAPI Controller監(jiān)控Kubernetes GatewayAPI CRD資源(gateway.networking.k8s.io/v1beta1),并將它們轉(zhuǎn)換為BIG-IP相關(guān)配置以部署到BIG-IP設(shè)備上。
為了訪問Kubernetes的各種必要資源,我們需要使用特定的ServiceAccount和ClusterRole,它們需要具備特定的權(quán)限。請?jiān)L問下方網(wǎng)址以獲取權(quán)限詳情。
https://github.com/f5devcentral/bigip-kubernetes-gateway/blob/master/deploy/1.clusterrole-and-bindin...
在實(shí)現(xiàn)層面上,一方面,BIG-IP Kubernetes GatewayAPI Controller連接到上游Kubernetes,通過list-watch機(jī)制監(jiān)視群集中的Gateway API更新事件。此機(jī)制被封裝在client-go(k8s.io/client-go)和controller-runtime(sigs.k8s.io/controller-runtime)中。
另一方面,BIG-IP Kubernetes GatewayAPI Controller負(fù)責(zé)連接到下游BIG-IP,解析、轉(zhuǎn)換并部署Gateway API配置到BIG-IP LTM。
這里,Controller負(fù)責(zé)解決兩個(gè)問題:
我們在以下兩部分分別闡述他們的設(shè)計(jì)方案。
網(wǎng)絡(luò)啟用
就網(wǎng)絡(luò)連接而言,我們知道Kubernetes有不同的CNI類型,如flannel(overlay網(wǎng)絡(luò))、calico(underlay網(wǎng)絡(luò))等。
對于overlay網(wǎng)絡(luò),Controller需要配置BIG-IP流量網(wǎng)絡(luò)和Kubernetes網(wǎng)絡(luò)之間的隧道,以便南北流量可以通過。通過自動(dòng)化的網(wǎng)絡(luò)配置,實(shí)現(xiàn)了BIG-IP與Pods的高性能直通,避免iptables使用以及流量繞行導(dǎo)致的性能下降,在網(wǎng)絡(luò)部署服務(wù)時(shí),用戶無需過度關(guān)注網(wǎng)絡(luò)細(xì)節(jié),Controller會(huì)幫助用戶實(shí)現(xiàn)自動(dòng)化配置與發(fā)現(xiàn)工作。
對于任意underlay網(wǎng)絡(luò),BIG-IP可通過二層互聯(lián),或靜態(tài)、動(dòng)態(tài)路由實(shí)現(xiàn)與Pods網(wǎng)絡(luò)的直接互聯(lián)。
所有網(wǎng)絡(luò)設(shè)置都是自動(dòng)的。
資源映射
BIG-IP LTM的資源類型包括Virtual、iRule、Pool等,為了實(shí)現(xiàn)ADC功能,我們需要清楚Gateway API資源對象在BIG-IP LTM的表現(xiàn)形式。簡單來說,我們可以將K8S Gateway API資源映射為以下BIG-IP資源:
隨著更多的Gateway API功能的引入,我們可能會(huì)考慮使用更多的BIG-IP資源類型。
在資源映射過程中可能還會(huì)有更多的細(xì)節(jié)。例如,HTTPRoute資源,在BIG-IP端,我們可以使用iRule實(shí)現(xiàn),也可以使用l7policy來實(shí)現(xiàn)。iRule是程序級別的靈活性,它不僅可以處理第7層流量,還可以處理第4層流量,因此目前,我們的實(shí)現(xiàn)中是通過轉(zhuǎn)換為iRule代碼的方式來實(shí)現(xiàn)HTTPRute定義中的過濾器和匹配。
部署策略
BIG-IP提供了多種配置工具,如AS3、iControl Rest、tmsh等。
在Controller中,我們目前使用iControl Rest+事務(wù)(transaction)的方式部署資源列表,使用增量的方式處理資源變更,這個(gè)過程被封裝成BIG-IP iControl Rest golang模塊。它具有增量、快速、自發(fā)現(xiàn)的特點(diǎn)。
當(dāng)然,另一個(gè)可能性是通過AS3來實(shí)現(xiàn),這是F5推薦的方法。在未來的BIG-IP Next產(chǎn)品中,AS3將成為唯一的外部配置工具。我們將持續(xù)關(guān)注它,核實(shí)其性能,并在適當(dāng)?shù)臅r(shí)機(jī)和適當(dāng)?shù)姆绞郊傻紺ontroller中。
展望
隨著越來越多的客戶參與,我們將兼容Gateway API更多/必要的.Spec功能,例如在“Experimental”Channel中定義的功能。
Kubernetes Gateway API:
https://gateway-api.sigs.k8s.io/concepts/versioning/#release-channels-eg-experimental-standard
正如我們之前提到的,在未來我們將兼容AS3下發(fā)方式。BIG-IPNext尚未發(fā)布,我們將在適當(dāng)?shù)臅r(shí)間考慮支持它。