十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊
量身定制 + 運營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇文章給大家介紹Rancher 2.0中如何使用服務(wù)發(fā)現(xiàn),內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
十載的岳陽縣網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。營銷型網(wǎng)站的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整岳陽縣建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“岳陽縣網(wǎng)站設(shè)計”,“岳陽縣網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。
Rancher 1.6中的服務(wù)發(fā)現(xiàn)
Rancher 1.6在Cattle環(huán)境中提供服務(wù)發(fā)現(xiàn)。Rancher自己的DNS微服務(wù)提供了內(nèi)部DNS功能。
Rancher的內(nèi)部DNS提供以下主要功能:
堆棧內(nèi)和跨堆棧的服務(wù)發(fā)現(xiàn)
堆棧中的所有服務(wù)都可以通過
容器發(fā)現(xiàn)
所有容器都通過他們的名字全局解析。
創(chuàng)建服務(wù)別名
為服務(wù)添加別名,并使用別名鏈接到其他服務(wù)。
發(fā)現(xiàn)外部服務(wù)
指向使用外部IP或域名部署在Rancher之外的服務(wù)。
Rancher 2.0中的服務(wù)發(fā)現(xiàn)
Rancher 2.0使用原生的Kubernetes DNS支持為Kubernetes工作負(fù)載和pod提供等效的服務(wù)發(fā)現(xiàn)。Cattle用戶將能夠在不丟失任何功能的情況下復(fù)制Rancher 2.0中的所有服務(wù)發(fā)現(xiàn)功能。
與Rancher 1.6 DNS微服務(wù)類似,Kubernetes在集群內(nèi)調(diào)度DNS pod和服務(wù),并配置kubelet以將所有DNS查找路由到此DNS服務(wù)。Rancher 2.0的Kubernetes集群將skyDNS部署為Kubernetes DNS服務(wù),這是默認(rèn)Kube-DNS實現(xiàn)的一種風(fēng)格。
服務(wù)解析
Rancher 1.6服務(wù)映射到某種類型的Kubernetes工作負(fù)載,您可以在此了解一個有關(guān)流行類型工作負(fù)載的簡短摘要:
https://rancher.com/docs/rancher/v2.x/en/k8s-in-rancher/workloads/#workloads
Kubernetes工作負(fù)載是指定為工作負(fù)載啟動的pod的部署規(guī)則的對象。工作負(fù)載對象本身無法通過DNS解析為Kubernetes集群中的其他對象。要查找和訪問工作負(fù)載,需要為工作負(fù)載創(chuàng)建Kubernetes服務(wù)。以下是Kubernetes服務(wù)的一些細(xì)節(jié):
https://kubernetes.io/docs/concepts/services-networking/service/
在Kubernetes中創(chuàng)建的任何服務(wù)都會獲得DNS名稱。為服務(wù)創(chuàng)建的DNS A記錄的格式為
在Kubernetes命名空間內(nèi),服務(wù)可以使用
因此,要查找和訪問應(yīng)用程序工作負(fù)載,需要創(chuàng)建一個獲取DNS記錄的服務(wù)。
Rancher通過使用您在UI中選擇的服務(wù)端口和服務(wù)類型自動創(chuàng)建服務(wù)以及工作負(fù)載,同時部署與工作負(fù)載名稱相同的工作負(fù)載和服務(wù)名稱,從而簡化了此過程。如果沒有暴露端口,則使用端口42。這種做法使得工作負(fù)載可以通過名稱在命名空間內(nèi)和跨命名空間發(fā)現(xiàn)。
例如,如下所示,我使用Rancher 2.0 UI在兩個名稱空間中部署了幾個類型為Deployment的工作負(fù)載。
我可以在Cluster> Project> Service Discovery選項卡下看到Rancher為工作負(fù)載自動創(chuàng)建的相應(yīng)DNS記錄。
如下所示,工作負(fù)載可供命名空間內(nèi)和跨命名空間的任何其他工作負(fù)載訪問。
Pod解析
在Kubernetes集群中運行的各個pod也會分配一個DNS記錄,其格式為
如果是在pod規(guī)范中設(shè)置,也可以使用hostname和subdomain字段解析Pod。相關(guān)內(nèi)容可以參考Kubernetes文檔:
https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/
為工作負(fù)載和外部服務(wù)創(chuàng)建別名
就像您可以為Rancher 1.6服務(wù)創(chuàng)建別名一樣,您也可以使用Rancher 2.0對Kubernetes工作負(fù)載執(zhí)行相同的操作。同樣,您也可以使用Rancher 2.0中的主機(jī)名或IP地址創(chuàng)建指向外部運行服務(wù)的DNS記錄。這些DNS記錄是Kubernetes服務(wù)對象。
使用2.0 UI,導(dǎo)航到Cluster> Project視圖,然后選擇Service Discovery選項卡。此處,為您的工作負(fù)載創(chuàng)建的所有現(xiàn)有DNS記錄都將列在每個命名空間下。
單擊“Add Record ”以創(chuàng)建新的DNS記錄,并查看鏈接到外部服務(wù)所支持的各種選項,或為另一個工作負(fù)載/ DNS記錄/pod組創(chuàng)建別名。
需要注意的一點是,在創(chuàng)建DNS記錄的這些選項中,Kubernetes本身支持以下選項:
指向外部主機(jī)名
指向一組與選擇器匹配的pod
其余功能由Rancher利用Kubernetes實現(xiàn):
指向外部IP地址
為另一個DNS記錄創(chuàng)建別名
指向另一個工作負(fù)載
從Docker Compose到Kubernetes YAML
現(xiàn)在讓我們看看如果我們想要使用Compose文件將應(yīng)用程序從1.6遷移到2.0而不是通過2.0 UI部署它,我們需要怎么做。
上文中介紹過,當(dāng)我們使用Rancher 2.0 UI部署工作負(fù)載時,Rancher會在內(nèi)部為服務(wù)發(fā)現(xiàn)創(chuàng)建必要的Kubernetes ClusterIP服務(wù)。但是,如果您是通過Rancher CLI或Kubectl客戶端部署工作負(fù)載,那么您應(yīng)該如何確保完成相同的服務(wù)發(fā)現(xiàn)行為?
通過Compose在命名空間內(nèi)和跨命名空間進(jìn)行服務(wù)發(fā)現(xiàn)
讓我們從以下docker-compose.yml文件開始,該文件顯示了堆棧中的兩個服務(wù)(foo和bar)。在Cattle堆棧中,這兩個服務(wù)可以使用其服務(wù)名稱相互訪問。
那么,如果我們將這兩個服務(wù)遷移到Rancher 2.0中的命名空間,會發(fā)生什么?
我們可以使用Kompose工具將此docker-compose.yml文件從Rancher 1.6轉(zhuǎn)換為Kubernetes YAML,然后使用Rancher CLI在Kubernetes集群中部署該應(yīng)用程序。
現(xiàn)在,此轉(zhuǎn)換會生成* -deployment.yaml文件,使用Rancher CLI部署它們會在命名空間內(nèi)創(chuàng)建相應(yīng)的工作負(fù)載。
這些工作負(fù)載可以在命名空間內(nèi)相互訪問嗎?我們可以使用Rancher 2.0 UI執(zhí)行工作負(fù)載foo的shell,然后看看ping另一個工作負(fù)載bar是否有效。
沒有!原因是我們只創(chuàng)建了Deployment類型的工作負(fù)載對象。為了使這些工作負(fù)載可被發(fā)現(xiàn),它們每個都需要一個指向它們的ClusterIP類型的服務(wù),該服務(wù)將被分配一個DNS記錄。用于此類服務(wù)的Kubernetes YAML應(yīng)如下所示。
請注意,ports是必填字段。因此,我們需要為其提供一些端口號,如此處所示的42。
通過CLI部署此服務(wù)后,服務(wù)foo可以成功ping到服務(wù)bar了!
因此,如果您使用Compose-to-Kubernetes-YAML路由將1.6服務(wù)遷移到Rancher 2.0,請確保您還為工作負(fù)載部署了相應(yīng)的ClusterIP服務(wù)。相同的解決方案也適用于工作負(fù)載的跨命名空間引用。
Compose的鏈接/外部鏈接
如果您是Cattle用戶,您一定知道在Rancher 1.6中,您可以創(chuàng)建指向其他服務(wù)的服務(wù)鏈接/別名,并在您的應(yīng)用程序中使用該別名來發(fā)現(xiàn)該鏈接的目標(biāo)服務(wù)。
例如下面的應(yīng)用程序,其中Web服務(wù)使用別名mongo鏈接到數(shù)據(jù)庫服務(wù)。
使用Kompose,將此Compose文件轉(zhuǎn)換為Kubernetes YAML生成相應(yīng)的部署和服務(wù)YAML規(guī)范。如果您在docker-compose.yml中的服務(wù)公開端口,Kompose默認(rèn)會生成Kubernetes ClusterIP服務(wù)YAML規(guī)范。
使用Rancher CLI部署這些工具會生成必要的工作負(fù)載。
但是此處缺少了服務(wù)鏈接mongo,因為Kompose轉(zhuǎn)換不支持docker-compose.yml文件中的鏈接。如此一來,工作負(fù)載web出現(xiàn)了錯誤,其pod繼續(xù)重新啟動,無法解析到數(shù)據(jù)庫服務(wù)的mongo鏈接。
我們?nèi)绾涡迯?fù)破壞的DNS鏈接?解決方案是創(chuàng)建另一個ClusterIP服務(wù)規(guī)范,并將其名稱設(shè)置為docker-compose中鏈接的別名。
部署此服務(wù)會創(chuàng)建必要的DNS記錄,并創(chuàng)建鏈接mongo,從而使web工作負(fù)載可用。
下圖顯示的就是web工作負(fù)載啟動的pod已進(jìn)入Running狀態(tài)。
未來從SkyDNS過渡到CoreDNS
從Rancher v2.0.7開始,Rancher部署了由Kubernetes版本1.10.x支持的skyDNS。在Kubernetes 1.11及更高版本中,CoreDNS可以作為DNS提供程序安裝。我們也正在評估CoreDNS,它將在Rancher的未來版本中作為skyDNS的替代品。
關(guān)于Rancher 2.0中如何使用服務(wù)發(fā)現(xiàn)就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。