您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“怎么使用Kubernetes服務(wù)暴露app”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
Kubernetes Pods 是會(huì)掛掉的。 Pods 實(shí)際上是有生命周期的。 當(dāng)一個(gè)工作節(jié)點(diǎn)死亡時(shí),運(yùn)行在該節(jié)點(diǎn)上的 Pods也會(huì)丟失。 ReplicaSet能通過創(chuàng)建新的pod來動(dòng)態(tài)地將集群恢復(fù)到所需狀態(tài),以保持應(yīng)用程序運(yùn)行。 另一個(gè)例子是,考慮一個(gè)帶有3個(gè)副本的圖像處理后端。 這些副本是可以交換的; 前端系統(tǒng)不應(yīng)該關(guān)心后端副本,甚至不應(yīng)該關(guān)心Pod丟失和重新創(chuàng)建。 也就是說,Kubernetes集群中的每個(gè)Pod都有一個(gè)惟一的IP地址,甚至是同一個(gè)節(jié)點(diǎn)上的Pod,因此需要一種自動(dòng)協(xié)調(diào)Pod之間更改的方法,以便您的應(yīng)用程序繼續(xù)運(yùn)行。
Kubernetes中的服務(wù)是一個(gè)抽象概念,它定義了一組邏輯Pods和訪問它們的策略。 服務(wù)支持獨(dú)立的Pods之間的松散耦合。 服務(wù)是使用YAML (preferred) 或JSON定義的,就像所有Kubernetes對(duì)象一樣。 服務(wù)所針對(duì)的pod集合通常由標(biāo)簽選擇器決定。
雖然每個(gè)Pod都有一個(gè)惟一的IP地址,但是如果沒有服務(wù),這些IP不會(huì)暴露在集群之外。 服務(wù)允許應(yīng)用程序接收流量。 通過在ServiceSpec中指定類型,可以以不同的方式公開服務(wù):
ClusterIP(默認(rèn)) -- 在集群中的內(nèi)部IP上暴露服務(wù)。 這種類型使得服務(wù)只能從集群內(nèi)部訪問。
NodePort -- 使用NAT在集群中每個(gè)選定節(jié)點(diǎn)的相同端口上暴露服務(wù)。 使用 <NodeIP>:<NodePort>
讓服務(wù)可以從集群外部訪問。 Superset of ClusterIP.
LoadBalancer -- 在當(dāng)前云中創(chuàng)建一個(gè)外部負(fù)載均衡器(如果支持),并向服務(wù)分配一個(gè)固定的外部IP。 Superset of NodePort.
ExternalName -- 通過返回帶有名稱的CNAME記錄,使用任意名稱(由規(guī)范中的externalName指定)暴露服務(wù)。 不使用代理。 這種類型需要v1.7或更高的 kube-dns
關(guān)于不同類型的服務(wù)的更多信息可以在使用源IP教程中找到。 也請(qǐng)看 Connecting Applications with Services.
另外,請(qǐng)注意,有些服務(wù)用例沒有在 spec 中定義 selector
。 沒有 selector 的服務(wù)被創(chuàng)建時(shí)也不會(huì)創(chuàng)建相應(yīng)的端點(diǎn)對(duì)象。 這允許用戶手動(dòng)將服務(wù)映射到特定的端點(diǎn)。 沒有選擇器的另一種可能是您嚴(yán)格使用type: ExternalName。
服務(wù)在一組 Pods 之間路由流量。 服務(wù)是一種抽象,它允許pod死亡并且在Kubernetes中存在多復(fù)本而不會(huì)影響應(yīng)用程序。 依賴于 Pods (如應(yīng)用程序中的前端和后端組件)之間的發(fā)現(xiàn)和路由是由Kubernetes服務(wù)處理。 服務(wù)使用標(biāo)簽和選擇器匹配一組pod,選擇器是允許對(duì)Kubernetes中的對(duì)象進(jìn)行邏輯操作的分組原語。 標(biāo)簽是附加到對(duì)象上的 key/value對(duì),可以以任何方式使用:
為開發(fā)、測(cè)試和生產(chǎn)指定對(duì)象
嵌入版本標(biāo)記
使用標(biāo)記對(duì)對(duì)象進(jìn)行分類
標(biāo)簽可以在創(chuàng)建時(shí)或以后附加到對(duì)象上。 它們可以隨時(shí)被修改。 可以使用下面的環(huán)境練習(xí)服務(wù)暴露。
kubectl get
命令可以查看現(xiàn)有的Pods: kubectl get pods
kubectl get services
命令可以查現(xiàn)有的服務(wù): kubectl get services
命令結(jié)果可以看到有一個(gè)名為kubernetes的服務(wù),它是在minikube啟動(dòng)集群時(shí)默認(rèn)創(chuàng)建的。
要?jiǎng)?chuàng)建一個(gè)新服務(wù)并將其公開給外部流量,我們將使用帶有NodePort參數(shù)的expose命令 (minikube還不支持LoadBalancer選項(xiàng)): kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
,接著再運(yùn)行kubectl get services查看服務(wù)。 我們現(xiàn)在有一個(gè)正在運(yùn)行的服務(wù)叫做kubernetes-bootcamp。 在這里,我們看到服務(wù)接收到一個(gè)惟一的集群ip、一個(gè)內(nèi)部端口和一個(gè)外部ip ( 節(jié)點(diǎn)的IP )。
為了查明外部打開了哪個(gè)端口(通過NodePort選項(xiàng)),我們將運(yùn)行describe service命令 : kubectl describe services/kubernetes-bootcamp
創(chuàng)建一個(gè)名為 NODE_PORT的環(huán)境變量,該變量具有指定的節(jié)點(diǎn)端口的值 : export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}');echo "NODE_PORT=$NODE_PORT"
現(xiàn)在,我們可以使用curl、節(jié)點(diǎn)的IP和外部公開的端口測(cè)試應(yīng)用程序是否在集群外部公開 curl $(minikube ip):$NODE_PORT
“怎么使用Kubernetes服務(wù)暴露app”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。