文/邵珂 蔡國(guó)華 萬(wàn)國(guó)雷
中國(guó)搜索kubernetes應(yīng)用平臺(tái)項(xiàng)目是一個(gè)PaaS服務(wù)平臺(tái),以kubernetes為應(yīng)用基礎(chǔ),整合項(xiàng)目管理系統(tǒng)、CMDB管理系統(tǒng)以及CI/CD的整體運(yùn)營(yíng)平臺(tái),目的是為向用戶提供一個(gè)Docker應(yīng)用的統(tǒng)一管理平臺(tái),統(tǒng)一分配、管理資源。將kubernetes的資源管理接口封裝為應(yīng)用功能,實(shí)現(xiàn)可視化web管理,極大地降低了kubernetes的使用門檻。我們還計(jì)劃逐步完善平臺(tái)內(nèi)的應(yīng)用生態(tài)環(huán)境,提供豐富的組件及接口供用戶調(diào)用。平臺(tái)自2018年7月開始研發(fā),10月投入上線,并持續(xù)迭代開發(fā)新版本。目前,應(yīng)用平臺(tái)支持并提供跨網(wǎng)段計(jì)算節(jié)點(diǎn)、flannel、calico網(wǎng)絡(luò)、萬(wàn)兆網(wǎng)絡(luò)分布式存儲(chǔ)等資源,已有數(shù)十個(gè)項(xiàng)目在平臺(tái)上穩(wěn)定運(yùn)行。
Kubernetes是Google基于Borg開源的容器編排調(diào)度引擎,作為CNCF(Cloud Native Computing Foundation)最重要的組件之一,它的目標(biāo)不僅僅是一個(gè)編排系統(tǒng),而且提供一個(gè)規(guī)范,可以讓你描述集群的架構(gòu),定義服務(wù)的最終狀態(tài),Kubernetes可以幫你將系統(tǒng)自動(dòng)地達(dá)到和維持在這個(gè)狀態(tài)。Kubernetes作為云原生應(yīng)用的基石,相當(dāng)于一個(gè)云操作系統(tǒng)。Kubernetes設(shè)計(jì)理念和功能其實(shí)就是一個(gè)類似Linux的分層架構(gòu),如下圖所示。
圖1 kubernetes分層設(shè)計(jì)理念
核心層:Kubernetes最核心的功能是,對(duì)外提供API構(gòu)建高層的應(yīng)用,對(duì)內(nèi)提供插件式應(yīng)用執(zhí)行環(huán)境。
應(yīng)用層:部署(無(wú)狀態(tài)應(yīng)用、有狀態(tài)應(yīng)用、批處理任務(wù)、集群應(yīng)用等)和路由(服務(wù)發(fā)現(xiàn)、DNS解析等)、Service Mesh(部分位于應(yīng)用層)。
管理層:系統(tǒng)度量(如基礎(chǔ)設(shè)施、容器和網(wǎng)絡(luò)的度量),自動(dòng)化(如自動(dòng)擴(kuò)展、動(dòng)態(tài)Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)、Service Mesh(部分位于管理層)。
接口層:kubectl命令行工具、客戶端SDK以及集群聯(lián)邦。
生態(tài)系統(tǒng):在接口層之上的龐大容器集群管理調(diào)度的生態(tài)系統(tǒng),可以劃分為兩個(gè)范疇。
Kubernetes外部:日志、監(jiān)控、配置管理、CI/CD。
Kubernetes內(nèi)部:CRI(容器運(yùn)行接口)、CNI(容器網(wǎng)絡(luò)接口)、CSI、(容器服務(wù)接口)、鏡像倉(cāng)庫(kù)、集群自身的配置和管理等。
高可用集群所需節(jié)點(diǎn)配置如下。
角色 數(shù)量 描述etcd節(jié)點(diǎn) 3 為kubernetes提供配置管理數(shù)據(jù)庫(kù),要求較高穩(wěn)定性master節(jié)點(diǎn) 2 Kubernetes控制節(jié)點(diǎn),可與etcd節(jié)點(diǎn)重用,HA+主備模式,要求較高穩(wěn)定性node節(jié)點(diǎn) 20-100運(yùn)行應(yīng)用負(fù)載的節(jié)點(diǎn),可根據(jù)需要提升機(jī)器配置或增加節(jié)點(diǎn)數(shù)。要求CPU 24核以上,物理內(nèi)存64G以上網(wǎng)絡(luò)分布式存儲(chǔ)服務(wù)的節(jié)點(diǎn),部署GlusterFS集群服務(wù),可根據(jù)需要擴(kuò)容節(jié)點(diǎn)。要求較高穩(wěn)定性,萬(wàn)兆網(wǎng)絡(luò)、大硬盤Harbor服務(wù) 2 私有鏡像倉(cāng)庫(kù)服務(wù),HA+主備模式,要求較高穩(wěn)定性存儲(chǔ)節(jié)點(diǎn) 10-20
所有服務(wù)器被分為三大部分:一部分為master服務(wù);另一部分為node服務(wù);還有一部分為存儲(chǔ)服務(wù)。其中,master服務(wù)器因需要實(shí)現(xiàn)LB,需要在同一網(wǎng)段,存儲(chǔ)服務(wù)器因考慮到效率和穩(wěn)定性,也需要在同一網(wǎng)段且最好是萬(wàn)兆網(wǎng)絡(luò)。節(jié)點(diǎn)服務(wù)器對(duì)網(wǎng)絡(luò)依賴不高,各服務(wù)器間路由可達(dá)即可。集群全部服務(wù)器操作系統(tǒng)均可采用centos7.4版本,鏡像yum源要求centos和epel,各節(jié)點(diǎn)時(shí)區(qū)設(shè)置一致、時(shí)間同步。
Master架構(gòu)包含etcd集群和kubernetes master服務(wù)組件。kuberntes 系統(tǒng)使用 etcd 存儲(chǔ)所有數(shù)據(jù),是最重要的組件之一,為保證安全性,etcd 需要安裝服務(wù)器證書,也需要安裝客戶端證書。
圖2 kubernetes master服務(wù)架構(gòu)
圖3 kubernetes node服務(wù)架構(gòu)
master節(jié)點(diǎn)主要包含三個(gè)組件:apiserver、scheduler controller-manager。其中:
apiserver提供集群管理的REST API接口,包括認(rèn)證授權(quán)、數(shù)據(jù)校驗(yàn)以及集群狀態(tài)變更等。
只有API Server才直接操作etcd,其他模塊通過(guò)API Server查詢或修改數(shù)據(jù),提供其他模塊之間的數(shù)據(jù)交互和通信的樞紐。
scheduler負(fù)責(zé)分配調(diào)度Pod到集群內(nèi)的node節(jié)點(diǎn),監(jiān)聽kube-apiserver,查詢還未分配Node的Pod,根據(jù)調(diào)度策略為這些Pod分配節(jié)點(diǎn)。
controller-manager由一系列的控制器組成,它通過(guò)apiserver監(jiān)控整個(gè)集群的狀態(tài),并確保集群處于預(yù)期的工作狀態(tài)。
master節(jié)點(diǎn)的高可用主要就是實(shí)現(xiàn)apiserver組件的高可用,通過(guò)部署配置haproxy對(duì)apiserver進(jìn)行負(fù)載均衡。
節(jié)點(diǎn)服務(wù)器主要包含docker服務(wù)、kuber-node組件。
3.2.1 Docker
docker 從 1.13 版本開始,將 iptables 的 filter 表的FORWARD 鏈的默認(rèn)策略設(shè)置為DROP,從而導(dǎo)致 ping其他 Node 上的 Pod IP 失敗,因此,必須在 filter 表的FORWARD 鏈增加一條默認(rèn)允許規(guī)則 iptables -I FORWARD-s 0.0.0.0/0 -j ACCEPT。
docker鏡像倉(cāng)庫(kù)使用國(guó)搜內(nèi)部私有倉(cāng)庫(kù) https://reg.docker.chinaso365.com,可配置在 /etc/docker/daemon.json,替換docker的默認(rèn)倉(cāng)庫(kù)。
3.2.2 Kube-node
kube-node 是集群中承載應(yīng)用的節(jié)點(diǎn),前置條件需要先部署好kube-master節(jié)點(diǎn)(因?yàn)樾枰僮饔脩艚巧壎?、批?zhǔn)kubelet TLS 證書請(qǐng)求等),它需要部署如下組件。
docker:運(yùn)行容器。
calico: 配置容器網(wǎng)絡(luò)。
kubelet: kube-node上最主要的組件。kube-proxy: 發(fā)布應(yīng)用服務(wù)與負(fù)載均衡。
Kubernetes基于CNI driver 調(diào)用各種網(wǎng)絡(luò)插件來(lái)配置kubernetes的網(wǎng)絡(luò),常用的CNI插件有 flannel、calico、weave等,這些插件各有優(yōu)勢(shì),也在互相借鑒學(xué)習(xí)優(yōu)點(diǎn)。比如,在所有node節(jié)點(diǎn)都在一個(gè)二層網(wǎng)絡(luò)時(shí)候,flannel提供hostgw實(shí)現(xiàn),避免vxlan實(shí)現(xiàn)的udp封裝開銷;calico針對(duì)L3 Fabric推出了IPinIP的選項(xiàng),利用了GRE隧道封裝。結(jié)合我們的業(yè)務(wù)需求,采用calico網(wǎng)絡(luò)組建方案。
圖4 calico組網(wǎng)示意
Calico是一個(gè)基于BGP的純?nèi)龑拥臄?shù)據(jù)中心網(wǎng)絡(luò)方案(不需要 Overlay),并且與 OpenStack、Kubernetes、AWS、GCE 等 IaaS 和容器平臺(tái)都有良好的集成。
Calico 在每一個(gè)計(jì)算節(jié)點(diǎn)利用 Linux Kernel 實(shí)現(xiàn)了一個(gè)高效的 vRouter 負(fù)責(zé)數(shù)據(jù)轉(zhuǎn)發(fā),而每個(gè) vRouter 通過(guò)BGP 協(xié)議負(fù)責(zé)把自己上運(yùn)行的 workload 的路由信息向整個(gè) Calico 網(wǎng)絡(luò)內(nèi)傳播——小規(guī)模部署可以直接互聯(lián),大規(guī)模下可通過(guò)指定的 BGP route reflector 來(lái)完成。 這樣保證最終所有的 workload 之間的數(shù)據(jù)流量都是通過(guò) IP 路由的方式完成互聯(lián)。Calico 節(jié)點(diǎn)組網(wǎng)可以直接利用數(shù)據(jù)中心的網(wǎng)絡(luò)結(jié)構(gòu)(無(wú)論是 L2 或者 L3),不需要額外的NAT、隧道或者 Overlay Network。
此外,Calico 基于 iptables 還提供了豐富而靈活的網(wǎng)絡(luò) Policy,保證通過(guò)各個(gè)節(jié)點(diǎn)上的 ACLs 提供 Workload 的多租戶隔離、安全組以及其他可達(dá)性限制等功能。
GlusterFS是kubernetes私有化部署方案中的最優(yōu)存儲(chǔ)解決方案,它是一個(gè)開源的分布式文件系統(tǒng),具有強(qiáng)大的橫向擴(kuò)展能力,通過(guò)擴(kuò)展能夠支持?jǐn)?shù)PB存儲(chǔ)容量和處理數(shù)千客戶端。GlusterFS借助TCP/IP或InfiniBand RDMA網(wǎng)絡(luò)將物理分布的存儲(chǔ)資源聚集在一起,使用單一全局命名空間來(lái)管理數(shù)據(jù)。GlusterFS基于可堆疊的用戶空間設(shè)計(jì),可為各種不同的數(shù)據(jù)負(fù)載提供優(yōu)異的性能。
我們建議采用分散卷的方式,通過(guò)指定冗余塊的數(shù)量(3:1)達(dá)到高可用,同時(shí)可提供性價(jià)比最優(yōu)的IO吞吐量和網(wǎng)絡(luò)性能。
性能測(cè)試,在萬(wàn)兆網(wǎng)絡(luò)環(huán)境下,IO約為本地磁盤IO性能的30%,千兆網(wǎng)絡(luò)環(huán)境下對(duì)比,接近阿里云NAS服務(wù)性能的2倍。
測(cè)試數(shù)據(jù)如下:
萬(wàn)兆環(huán)境 655360 bytes(655 kB)copied, 0.00240202 s, 273 MB/s千兆環(huán)境 655360 bytes(655 kB)copied, 0.0103234 s, 63.5 MB/s本地磁盤 655360 bytes(655 kB)copied, 0.000753129 s, 870 MB/s阿里云NFS 655360 bytes(655 kB)copied, 0.0177044 s, 37.0 MB/s
3.5.1 集群部署
部署方式:ansible統(tǒng)一部署管理工具,可實(shí)現(xiàn)etcd服務(wù)、docker服務(wù)、master節(jié)點(diǎn)、node節(jié)點(diǎn)、集群網(wǎng)絡(luò)、證書全自動(dòng)安裝。
集群管理:ansible統(tǒng)一部署管理工具,可實(shí)現(xiàn)node節(jié)點(diǎn)增、刪,master節(jié)點(diǎn)增加/替換,etcd節(jié)點(diǎn)增加/替換,集群升級(jí),備份恢復(fù)。
3.5.2 主要軟件及版本
Docker v18.06.1-ce Kubernetes v1.13 Etcd v3.2.24 Calico v3.4.1 Coredns v1.2.6 Glusterfs v4.1.5
3.5.3 Iptables/IPVS
因?yàn)閏alico網(wǎng)絡(luò)、kube-proxy等大量使用 iptables規(guī)則,安裝前清空所有iptables策略規(guī)則;CentOS的firewalld等基于iptables的防火墻直接卸載,避免不必要的沖突。
kube-proxy 組件監(jiān)聽 API server 中 service 和 endpoint的變化情況,從而為 k8s 集群內(nèi)部的 service 提供動(dòng)態(tài)負(fù)載均衡。kubernetes在v1.10之前主要通過(guò) iptables實(shí)現(xiàn),是穩(wěn)定、推薦的方式,但在當(dāng)服務(wù)多的時(shí)候會(huì)產(chǎn)生太多的 iptables 規(guī)則,大規(guī)模情況下有明顯的性能問(wèn)題;在v1.11 GA的 ipvs高性能負(fù)載模式,采用增量式更新,并可以保證 service 更新期間連接的保持。
3.5.4 Add-ones
DNS 是kubernetes集群首先需要部署的,集群中的其他 pods 使用它提供域名解析服務(wù);主要可以解析 集群服務(wù)名 SVC 和 Pod hostname;目前, k8s v1.9+ 版本可以有兩個(gè)選擇:kube-dns 和 coredns,可以選擇其中一個(gè)部署安裝。
Ingress就是從外部訪問(wèn)k8s集群的入口,將用戶的URL請(qǐng)求轉(zhuǎn)發(fā)到不同的service上。ingress相當(dāng)于nginx反向代理服務(wù)器,它包括的規(guī)則定義就是URL的路由信息;它的實(shí)現(xiàn)需要部署Ingress controller(比如 traefik ingress-nginx 等 ),Ingress controller通 過(guò) apiserver監(jiān) 聽ingress和service的變化,并根據(jù)規(guī)則配置負(fù)載均衡并提供訪問(wèn)入口,起到服務(wù)發(fā)現(xiàn)的作用。
Heapster 監(jiān)控整個(gè)集群資源的過(guò)程:首先,kubelet內(nèi)置的cAdvisor收集本node節(jié)點(diǎn)的容器資源占用情況;然后,heapster從kubelet提供的api采集節(jié)點(diǎn)和容器的資源占用;最后,heapster 持久化數(shù)據(jù)存儲(chǔ)到influxdb中。
EFG 插件是kubernetes項(xiàng)目的一個(gè)日志解決方案,它 包 括 三 個(gè) 組 件:Elasticsearch、Fluentd、 Grafana。Elasticsearch是日志存儲(chǔ)和日志搜索引擎;Fluentd 負(fù)責(zé)把kubernetes集群的日志發(fā)送給Elasticsearch;Grafana則是可視化界面查看和檢索存儲(chǔ)在 Elasticsearch 的數(shù)據(jù)。
3.5.6 集群升級(jí)
集群升級(jí)存在一定風(fēng)險(xiǎn),升級(jí)前對(duì) etcd數(shù)據(jù)做備份。快速升級(jí)是指只升級(jí)kubernetes版本,比較常見,如Bug修復(fù),重要特性發(fā)布時(shí)使用??焖偕?jí)可平滑實(shí)現(xiàn),不會(huì)對(duì)業(yè)務(wù)產(chǎn)生中斷。
其他升級(jí)是指升級(jí)kubernetes組件,包括etcd版本、docker版本,需制定詳細(xì)的升級(jí)方案和可能的業(yè)務(wù)中斷方案。
中國(guó)搜索kubernetes應(yīng)用平臺(tái)是用于管理數(shù)據(jù)中心主機(jī)集群上的容器化的應(yīng)用平臺(tái),是提升服務(wù)器性能利用率、高效部署與彈性計(jì)算、高冗余和定制化的PaaS服務(wù)平臺(tái)。該平臺(tái)的目標(biāo)是讓部署容器化的應(yīng)用簡(jiǎn)單和高效。
持續(xù)部署:平臺(tái)實(shí)現(xiàn)快速、可視化自動(dòng)部署功能。彈性伸縮:構(gòu)建具有需求預(yù)測(cè)和容器按需供給能力的彈性伸縮子系統(tǒng)。
組件管理:將一個(gè)應(yīng)用涉及的所有組件均做了統(tǒng)一管理。
高可靠性:自動(dòng)的故障遷移,達(dá)到秒級(jí)啟動(dòng),恢復(fù)業(yè)務(wù)。
生態(tài)衍生:將可標(biāo)準(zhǔn)化的應(yīng)用轉(zhuǎn)變?yōu)槟K化服務(wù),形成應(yīng)用生態(tài)圈。
圖5 中國(guó)搜索kubernetes應(yīng)用平臺(tái)-儀表盤(一)
圖6 中國(guó)搜索kubernetes應(yīng)用平臺(tái)-儀表盤(二)
在kubernetes集群高效管理的基礎(chǔ)上,我們實(shí)現(xiàn)了對(duì)整體應(yīng)用情況進(jìn)行統(tǒng)計(jì)分析,相對(duì)于傳統(tǒng)的物理層監(jiān)控,應(yīng)用平臺(tái)實(shí)現(xiàn)了按項(xiàng)目按應(yīng)用獲取、分析、展示資源分配情況、服務(wù)健康狀態(tài)、應(yīng)用飽和度等應(yīng)用層面的監(jiān)控。
通過(guò)集群節(jié)點(diǎn)狀態(tài)監(jiān)控和管理,查看集群服務(wù)器運(yùn)行狀態(tài),幫助管理人員實(shí)時(shí)了解整體情況,及時(shí)發(fā)現(xiàn)、排查故障隱患。
Kubernetes應(yīng)用平臺(tái)采用按項(xiàng)目分配和管理資源及應(yīng)用的模式,更貼近于常規(guī)的運(yùn)營(yíng)管理思路,用戶按項(xiàng)目為單位在平臺(tái)上申請(qǐng)權(quán)限,獲取服務(wù)所需資源,包括CPU使用量配額、內(nèi)存使用量配額、存儲(chǔ)使用量配額。項(xiàng)目與項(xiàng)目之間相互隔離,并可添加私有鏡像倉(cāng)庫(kù)認(rèn)證、kube-api接口調(diào)用認(rèn)證等訪問(wèn)控制。
項(xiàng)目管理模式實(shí)際對(duì)應(yīng)了kubernetes中的namespace,命名空間是一種在多個(gè)用戶之間劃分群集資源的方法(通過(guò)資源配額),旨在用于多個(gè)用戶分布在多個(gè)團(tuán)隊(duì)或項(xiàng)目中的環(huán)境中。
命名空間提供名稱范圍。資源名稱在名稱空間中必須是唯一的,而不是跨名稱空間。在Kubernetes中,在默認(rèn)情況下,同一名稱空間中的對(duì)象將具有相同的訪問(wèn)控制策略。
平臺(tái)支持項(xiàng)目成員管理,在項(xiàng)目管理中可定義多種角色,在命名空間的基礎(chǔ)上補(bǔ)充擴(kuò)展了kubernetes對(duì)應(yīng)用管理權(quán)限的管理機(jī)制。
項(xiàng)目管理員,擁有對(duì)項(xiàng)目資源的申請(qǐng)和修改權(quán)限。項(xiàng)目負(fù)責(zé)人,擁有對(duì)項(xiàng)目應(yīng)用的信息修改權(quán)限。項(xiàng)目成員,擁有對(duì)項(xiàng)目應(yīng)用的訪問(wèn)和控制權(quán)限。
應(yīng)用服務(wù)管理模塊,統(tǒng)一管理項(xiàng)目下的所有應(yīng)用,是應(yīng)用配置和訪問(wèn)的入口。包括創(chuàng)建應(yīng)用服務(wù)、查看應(yīng)用狀態(tài),獲取應(yīng)用服務(wù)信息。
平臺(tái)應(yīng)用服務(wù),即對(duì)應(yīng)調(diào)度kubernetes中的POD服務(wù),是一組一個(gè)或多個(gè)容器(Docker容器)化實(shí)例,具有共享存儲(chǔ)/網(wǎng)絡(luò),以及如何運(yùn)行容器的規(guī)范。pod的內(nèi)容始終位于同一位置并共同調(diào)度,并在共享上下文中運(yùn)行。pod模擬特定于應(yīng)用程序的“邏輯主機(jī)” ,它包含一個(gè)或多個(gè)相對(duì)緊密耦合的應(yīng)用程序容器。
通過(guò)平臺(tái)提供的應(yīng)用管理功能,我們可以對(duì)kubernetes上運(yùn)行的應(yīng)用進(jìn)行標(biāo)準(zhǔn)化的快速配置和應(yīng)用。通過(guò)應(yīng)用編排實(shí)現(xiàn)kubernetes應(yīng)用邏輯的自動(dòng)配置,通過(guò)配置管理實(shí)現(xiàn)configmap定義或更新,通過(guò)任務(wù)管理來(lái)啟動(dòng)、升級(jí)、回滾或停止應(yīng)用服務(wù),還可通過(guò)應(yīng)用監(jiān)控實(shí)時(shí)調(diào)用查看應(yīng)用監(jiān)控和運(yùn)行日志。
除了kubernetes默認(rèn)收集的docker運(yùn)行日志外,平臺(tái)還支持用戶自定義應(yīng)用日志的采集,即應(yīng)用產(chǎn)生的日志文件。通過(guò)平臺(tái)的應(yīng)用日志收集模塊配置分配日志收集服務(wù)至項(xiàng)目下,并自動(dòng)關(guān)聯(lián)項(xiàng)目下應(yīng)用的存儲(chǔ)服務(wù)來(lái)上傳日志。支持多日志格式解析、分類索引配置、自定義索引格式、自定義日志保存時(shí)間等。
平臺(tái)支持通過(guò)kubernetes api訪問(wèn)每個(gè)應(yīng)用容器,即通過(guò)web終端進(jìn)入容器內(nèi),進(jìn)行命令行操作,幫助對(duì)應(yīng)用的直觀運(yùn)行控制。容器終端的訪問(wèn)經(jīng)kubernetes api的訪問(wèn)控制及應(yīng)用平臺(tái)的權(quán)限控制,同時(shí)具備高安全性和便捷性。
有狀態(tài)服務(wù)是相對(duì)無(wú)狀態(tài)服務(wù)的一種kubernetes應(yīng)用部署模式,平臺(tái)支持無(wú)狀態(tài)應(yīng)用和有狀態(tài)應(yīng)用模式兩種應(yīng)用。使用有狀態(tài)應(yīng)用部署模式,應(yīng)用中的每個(gè)POD都擁有獨(dú)立分配且固定的SVCIP地址及存儲(chǔ)空間,如果容器重啟或漂移,它們所使用的資源將不變,使虛擬化更接近于物理層設(shè)備。通過(guò)有狀態(tài)應(yīng)用的模式可在kubernetes中實(shí)現(xiàn)組建運(yùn)行,如redis、kafka、MongoDB等集群模式服務(wù)。
平臺(tái)提供應(yīng)用備份和復(fù)制功能,快速解決應(yīng)用的重復(fù)部署或多環(huán)境部署需求。通過(guò)應(yīng)用復(fù)制,可快速創(chuàng)建測(cè)試環(huán)境、預(yù)發(fā)布環(huán)境、生產(chǎn)環(huán)境的同步,或者快速部署相同應(yīng)用需求的組件服務(wù)。
平臺(tái)通過(guò)域名配置實(shí)現(xiàn)kubernetes外部訪問(wèn)應(yīng)用,通過(guò)調(diào)用kubernetes接口實(shí)現(xiàn)Ingress配置,提供應(yīng)用對(duì)外服務(wù)的出口。通過(guò)自定義域名接入內(nèi)部服務(wù),支持自定義域名配置、路徑配置,支持http和tcp兩種模式。
Kubernetes平臺(tái)下運(yùn)行的應(yīng)用服務(wù)會(huì)存在一些在不同的應(yīng)用間互相調(diào)用或狀態(tài)控制的情況。基于容器間隔離的機(jī)制,我們采用API實(shí)現(xiàn)遠(yuǎn)程調(diào)用,在kubernetes應(yīng)用平臺(tái)已封裝好一套第三方接口服務(wù),滿足項(xiàng)目?jī)?nèi)部的應(yīng)用間互訪需求。平臺(tái)提供一套統(tǒng)一的客戶端SDK來(lái)滿足Java、Python工程項(xiàng)目的此類需求。調(diào)用流程如下。
容器a通過(guò)調(diào)用SDK請(qǐng)求在容器b上執(zhí)行命令,SDK實(shí)現(xiàn)步驟如下:
(1)容器a調(diào)用SDK,請(qǐng)求參數(shù)包括項(xiàng)目私有access key和命令行;
(2)SDK調(diào)用Project token接口鑒權(quán),返回鑒權(quán)結(jié)果,成功返回token,失敗返回錯(cuò)誤代碼;
(3)SDK攜帶token請(qǐng)求kubernetes API,調(diào)用接口執(zhí)行操作命令;
(4)Kubernetes API在容器b上順序執(zhí)行操作命令,并異步返回結(jié)果給SDK;
(5)SDK將執(zhí)行結(jié)果異步返回給容器a上的應(yīng)用。