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