你能給大家解釋一下k8s裏面五花八門的各種port嗎?

點擊上方藍色“大數據實戰演練”,選擇“設爲星標”或“置頂”

回覆“資料”領取獨家整理的學習資料!




每一個成功人士的背後,必定曾經做出過勇敢而又孤獨的決定。

放棄不難,但堅持很酷~

 1 

nodePort

nodePort 提供了集羣外部客戶端訪問 service 的一種方式,它提供了集羣外部客戶端訪問 service 的端口,即 k8s 集羣 nodeIP:nodePort 。

適用於外部用戶要訪問 k8s 集羣中的服務。

優點:通過 k8s 集羣的任意節點(裝有 kube-proxy 的)加上 nodePort 都可以訪問服務。

缺點:網絡請求路由較複雜。在併發量很大的情況下,有可能會造成拒絕連接。(親自遇到過這種場景,設置成 hostPort 方式訪問,就扛住了。)

 2 

port

port 是暴露在 cluster ip 上的端口,它提供了集羣內其它容器訪問 service 的入口,即:ClusterIP:port 。

適用於k8s集羣內部各服務通信。

 3 

hostPort

這是一種直接定義Pod網絡的方式。hostPort 是直接將容器的端口與所調度的節點上的端口路由,hostPort 是暴露在 pod 所調度的機器上的端口,可以使用 pod 所在的節點 ip:hostPort 來訪問服務。

適用於外部用戶要訪問k8s集羣中的服務。

缺點:Pod 重新調度的時候該 Pod 被調度到的節點可能會變動,這樣就變化了,所以用戶必須手動維護一個 Pod 與所在宿主機的對應關係。

優點:相較於 nodePort 的方式,減少了網絡請求的路由,提高請求效率和併發。

 4 

targetPort

targetPort 是 pod 上的端口,從 port/nodePort 上來的流量,經過kube-proxy流入到後端 pod 的 targetPort 上,最後進入容器。

與製作鏡像時暴露的端口一致(通過 DockerFile 中的 EXPOSE 暴露)。

 5 

containerPort

containerPort 是在 pod 控制器中定義的、pod 中的容器需要暴露的端口,通常暴露的端口就是你程序啓動時的端口。

 6 

小結

總的來說,port 和 nodePort 都是 service 的端口,前者暴露給 k8s 集羣內部服務訪問,後者暴露給 k8s 集羣外部流量訪問。從上兩個端口過來的數據都需要經過反向代理 kube-proxy ,流入後端 pod 的 targetPort 上,最後到達 pod 內的容器。

nodeport 與 hostport 都是通過,主機 ip+端口 的方式訪問,區別爲:hostport 是通過固定主機 ip ,nodeport 是通過 k8s 集羣任意節點ip訪問。



歡迎大家留言討論

👆 👆 👆


往期推薦

兩種方法輕鬆上手 ConfigMap,用作容器雲服務的配置中心

真好用!Kubernetes可視化工具,文末附下載地址


掃一掃,我們的故事就開始了。

如果這篇文章對你有所啓發,點贊、轉發都是一種支持!

另外公衆號改變了推送規則,大家看文章不要忘記點擊最下方的在看,點贊按鈕,這樣微信自動識別爲常看公衆號,否則很可能推送的文章可能淹沒在別的文章找不到,謝謝大家

讓我知道你在看

本文分享自微信公衆號 - 大數據實戰演練(gh_f942bfc92d26)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章