這篇文章將為大家詳細(xì)講解有關(guān)如何簡潔優(yōu)雅地實(shí)現(xiàn)Kubernetes的服務(wù)暴露,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名與空間、雅安服務(wù)器托管、營銷軟件、網(wǎng)站建設(shè)、修武網(wǎng)站維護(hù)、網(wǎng)站推廣。
如何使用端口映射在Rancher 2.0中暴露Kubernetes工作負(fù)載。
小編將介紹Kubernetes中用于為工作負(fù)載暴露公共端口的選項(xiàng)及其優(yōu)缺點(diǎn)。
使用容器部署應(yīng)用程序時(shí),常常需要將外部流量路由到應(yīng)用程序容器。
要提供外部訪問,通常使用的標(biāo)準(zhǔn)方法是在部署應(yīng)用程序的節(jié)點(diǎn)上公開公共端口,或在應(yīng)用程序容器前放置負(fù)載均衡器。
相信使用Rancher 1.6的Cattle的用戶,都熟悉如何使用端口映射來暴露服務(wù)。在本文中,我們將探討如何使用端口映射在Rancher 2.0中暴露Kubernetes工作負(fù)載。使用負(fù)載均衡解決方案是一個(gè)更大的主題,我們?nèi)蘸髸?huì)有專門的文章來探討它。
Rancher 1.6中的端口映射
Rancher 1.6中,用戶能夠通過端口映射來部署容器化應(yīng)用并暴露它們。
用戶可以選擇主機(jī)上的特定端口,或讓Rancher分配一個(gè)隨機(jī)端口,并打開該端口以允許外部訪問。 此公共端口會(huì)將流量路由到該主機(jī)上運(yùn)行的服務(wù)容器的專用端口。
Rancher 2.0中的端口映射
Rancher 2.0還支持將端口映射添加到部署在Kubernetes集群上的工作負(fù)載中。Kubernetes中用于為工作負(fù)載暴露公共端口的選項(xiàng)有:
HostPort
NodePort
如上所示,Rancher 2.0中端口映射的UI與1.6體驗(yàn)非常相似。Rancher在為Kubernetes集群創(chuàng)建部署時(shí),會(huì)在內(nèi)部添加必要的Kubernetes HostPort或NodePort規(guī)范。
下面讓我們更詳細(xì)地來分別看一下HostPort和NodePort。
什么是HostPort?
創(chuàng)建Kubernetes中的工作負(fù)載時(shí),你必須在“容器”部分的Kubernetes YAML規(guī)范中指定HostPort設(shè)置。當(dāng)您選擇HostPort進(jìn)行映射時(shí),Rancher會(huì)在內(nèi)部執(zhí)行此操作。
指定HostPort后,在部署pod容器的主機(jī)上,該端口會(huì)暴露給外部訪問。在<host IP>:<HostPort>上的流量將會(huì)被路由到pod容器的專用端口。
如下是我們的Nginx工作負(fù)載的Kubernetes YAML如何指定'ports'部分下的HostPort設(shè)置:
將HostPort用于Kubernetes pod,相當(dāng)于在Rancher 1.6中為Docker容器暴露一個(gè)公共端口。
HostPort的優(yōu)點(diǎn):
通過HostPort設(shè)置,您可以請(qǐng)求暴露主機(jī)上的任何可用端口。
配置很簡單,HostPort設(shè)置直接放在Kubernetes pod規(guī)范中。與NodePort相比,不需要?jiǎng)?chuàng)建其他對(duì)象來暴露應(yīng)用程序。
HostPort的缺點(diǎn):
使用HostPort會(huì)限制pod的調(diào)度,因?yàn)橹挥心切┚哂兄付ǘ丝诳捎玫闹鳈C(jī)才能用于部署。
如果工作負(fù)載的規(guī)模大于Kubernetes集群中的節(jié)點(diǎn)數(shù),部署會(huì)失敗。
指定了相同HostPort的任何兩個(gè)工作負(fù)載,都將無法部署在同一節(jié)點(diǎn)上。
如果運(yùn)行pod的主機(jī)出現(xiàn)故障,Kubernetes將不得不將pod重新安排到不同的節(jié)點(diǎn)。如此一來,可以訪問工作負(fù)載的IP地址將發(fā)生變化,從而破壞應(yīng)用程序的外部客戶端。當(dāng)pod重新啟動(dòng)時(shí)也會(huì)發(fā)生同樣的事情,Kubernetes會(huì)在不同的節(jié)點(diǎn)上重新安排它們。
什么是NodePort?
在我們深入研究如何創(chuàng)建NodePort來暴露Kubernetes工作負(fù)載之前,讓我們先了解一些Kubernetes服務(wù)的背景知識(shí)。
Kubernetes服務(wù)
Kubernetes服務(wù)是一個(gè)REST對(duì)象,它抽象了對(duì)Kubernetes pod的訪問。Kubernetes pod監(jiān)聽的IP地址不能用作公共訪問工作負(fù)載的可靠端點(diǎn),因?yàn)閜od有可能被動(dòng)態(tài)地銷毀和重新創(chuàng)建,從而更改其IP地址。
Kubernetes服務(wù)為pod提供靜態(tài)端點(diǎn)。因此,通過Kubernetes服務(wù)的界面,即使pod切換IP地址,依賴于通過這些pod啟動(dòng)的工作負(fù)載的外部客戶端也能夠繼續(xù)訪問工作負(fù)載,不會(huì)中斷,也對(duì)后端pod的重新創(chuàng)建無感。
默認(rèn)情況下,你可以在內(nèi)部IP上的Kubernetes集群中訪問服務(wù)。此內(nèi)部作用域使用服務(wù)規(guī)范的type參數(shù)定義。因此,默認(rèn)情況下,對(duì)于服務(wù),yaml是type:ClusterIP。
如果你想在Kubernetes集群外部暴露服務(wù),請(qǐng)參閱Kubernetes中的這些ServiceType選項(xiàng):
https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types。
而ServiceType中的其中一種類型就是我們下文要說的NodePort,它提供對(duì)為工作負(fù)載窗口創(chuàng)建的Kubernetes服務(wù)的外部訪問。
如何定義NodePort
再回過頭來看運(yùn)行Nginx鏡像的工作負(fù)載。對(duì)于此工作負(fù)載,我們需要對(duì)外暴露私有容器端口80。
要實(shí)現(xiàn)這一目的,我們可以為工作負(fù)載創(chuàng)建NodePort服務(wù)。NodePort服務(wù)規(guī)范如下所示:
如果我們指定NodePort服務(wù),Kubernetes將在每個(gè)節(jié)點(diǎn)上分配一個(gè)端口。 選擇的NodePort將在創(chuàng)建后在服務(wù)規(guī)范中可見,正如上所示?;蛘?,我們也可以在創(chuàng)建服務(wù)時(shí)指定要在規(guī)范中用作NodePort的特定端口。如果未指定特定的NodePort,將隨機(jī)選取Kubernetes集群上配置的范圍(默認(rèn)值:30000-32767)中的端口。
從Kubernetes集群外部,進(jìn)入<NodeIP>:<NodePort>的流量將被定向到工作負(fù)載(由kube-proxy組件完成這項(xiàng)工作)。NodeIP可以是Kubernetes集群中任何節(jié)點(diǎn)的IP地址。
NodePort的優(yōu)點(diǎn):
創(chuàng)建NodePort服務(wù)將為工作負(fù)載pod提供靜態(tài)的公共端點(diǎn)。因此,即使pod被動(dòng)態(tài)銷毀,Kubernetes也可以在集群中的任何位置部署工作負(fù)載,而無需更改公共端點(diǎn)。
pod的規(guī)模不受集群中節(jié)點(diǎn)數(shù)量的限制。Nodeport允許將公共訪問與pod的數(shù)量和位置分離。
NodePort的缺點(diǎn):
使用NodePort時(shí),即使工作負(fù)載從未在該節(jié)點(diǎn)上部署,<NodeIP>:<NodePort>也會(huì)在Kubernetes集群中為每個(gè)節(jié)點(diǎn)保留。
您只能從配置的范圍中指定端口,而不能指定任何隨機(jī)端口。
需要額外的Kubernetes對(duì)象(類型為NodePort的Kubernetes服務(wù))來暴露您的工作負(fù)載。因此,了解您的應(yīng)用程序是如何暴露的并不簡單。
從Docker Compose到Kubernetes YAML
上文的內(nèi)容介紹了與1.6相比,Cattle用戶能如何在Rancher 2.0 UI中添加端口映射。現(xiàn)在讓我們看看我們?nèi)绾瓮ㄟ^compose文件和Rancher CLI來做同樣的事情。
我們可以使用Kompose工具將docker-compose.yml文件從Rancher 1.6轉(zhuǎn)換為Kubernetes YAML,然后使用Rancher CLI在Kubernetes集群中部署應(yīng)用程序。
這是在1.6上運(yùn)行的上述Nginx服務(wù)的docker-compose.yml配置:
Kompose會(huì)為在Rancher 2.0中部署Nginx工作負(fù)載所需的Kubernetes部署和服務(wù)對(duì)象生成YAML文件。Kubernetes部署規(guī)范定義了pod和容器規(guī)范,而服務(wù)規(guī)范定義了對(duì)pod的公共訪問。
通過Kompose和Rancher CLI添加HostPort
即使docker-compose.yml指定了暴露的端口,Kompose也不會(huì)將所需的HostPort構(gòu)造添加到我們的部署規(guī)范中。因此,為了復(fù)制Rancher 2.0集群中的端口映射,我們可以手動(dòng)將HostPort構(gòu)造添加到nginx-deployment.yaml中的pod容器規(guī)范中,并使用Rancher CLI進(jìn)行部署。
通過Kompose和Rancher CLI添加NodePort
要通過Kompose為部署添加NodePort服務(wù),應(yīng)根據(jù)Kompose文檔將標(biāo)簽kompose.service.type添加到docker-compose.yml文件中:
https://github.com/kubernetes/kompose/blob/master/docs/user-guide.md#labels
現(xiàn)在docker-compose.yml已經(jīng)包含了所需的NodePort服務(wù)以及部署規(guī)范了,那么我們就可以開始使用這一docker-compose.yml運(yùn)行Kompose了。使用Rancher CLI,我們可以通過NodePort成功部署以暴露工作負(fù)載了。
這里探討了如何在Rancher 2.0中使用端口映射來將應(yīng)用程序工作負(fù)載暴露給公共訪問。Rancher 1.6中端口映射的功能可以輕松轉(zhuǎn)換到Kubernetes平臺(tái)。此外,Rancher 2.0 UI在創(chuàng)建或升級(jí)工作負(fù)載時(shí)為映射端口提供了相同的直觀體驗(yàn)。
關(guān)于如何簡潔優(yōu)雅地實(shí)現(xiàn)Kubernetes的服務(wù)暴露就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
網(wǎng)站欄目:如何簡潔優(yōu)雅地實(shí)現(xiàn)Kubernetes的服務(wù)暴露
路徑分享:http://jinyejixie.com/article4/iihhie.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、網(wǎng)站內(nèi)鏈、電子商務(wù)、網(wǎng)站維護(hù)、品牌網(wǎng)站制作、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)