點擊上方藍色“大數據實戰演練”,選擇“設爲星標”或“置頂”
回覆“資料”領取獨家整理的學習資料!
每一個成功人士的背後,必定曾經做出過勇敢而又孤獨的決定。
放棄不難,但堅持很酷~
nodePort
nodePort 提供了集羣外部客戶端訪問 service 的一種方式,它提供了集羣外部客戶端訪問 service 的端口,即 k8s 集羣 nodeIP:nodePort 。
適用於外部用戶要訪問 k8s 集羣中的服務。
優點:通過 k8s 集羣的任意節點(裝有 kube-proxy 的)加上 nodePort 都可以訪問服務。
缺點:網絡請求路由較複雜。在併發量很大的情況下,有可能會造成拒絕連接。(親自遇到過這種場景,設置成 hostPort 方式訪問,就扛住了。)
port
port 是暴露在 cluster ip 上的端口,它提供了集羣內其它容器訪問 service 的入口,即:ClusterIP:port 。
適用於k8s集羣內部各服務通信。
hostPort
這是一種直接定義Pod網絡的方式。hostPort 是直接將容器的端口與所調度的節點上的端口路由,hostPort 是暴露在 pod 所調度的機器上的端口,可以使用 pod 所在的節點 ip:hostPort 來訪問服務。
適用於外部用戶要訪問k8s集羣中的服務。
缺點:Pod 重新調度的時候該 Pod 被調度到的節點可能會變動,這樣就變化了,所以用戶必須手動維護一個 Pod 與所在宿主機的對應關係。
優點:相較於 nodePort 的方式,減少了網絡請求的路由,提高請求效率和併發。
targetPort
targetPort 是 pod 上的端口,從 port/nodePort 上來的流量,經過kube-proxy流入到後端 pod 的 targetPort 上,最後進入容器。
與製作鏡像時暴露的端口一致(通過 DockerFile 中的 EXPOSE 暴露)。
containerPort
containerPort 是在 pod 控制器中定義的、pod 中的容器需要暴露的端口,通常暴露的端口就是你程序啓動時的端口。
小結
總的來說,port 和 nodePort 都是 service 的端口,前者暴露給 k8s 集羣內部服務訪問,後者暴露給 k8s 集羣外部流量訪問。從上兩個端口過來的數據都需要經過反向代理 kube-proxy ,流入後端 pod 的 targetPort 上,最後到達 pod 內的容器。
nodeport 與 hostport 都是通過,主機 ip+端口 的方式訪問,區別爲:hostport 是通過固定主機 ip ,nodeport 是通過 k8s 集羣任意節點ip訪問。
往期推薦
掃一掃,我們的故事就開始了。
如果這篇文章對你有所啓發,點贊、轉發都是一種支持!
另外公衆號改變了推送規則,大家看文章不要忘記點擊最下方的在看,點贊按鈕,這樣微信自動識別爲常看公衆號,否則很可能推送的文章可能淹沒在別的文章找不到,謝謝大家
讓我知道你在看
本文分享自微信公衆號 - 大數據實戰演練(gh_f942bfc92d26)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。