外網如何訪問 Service?- 天天5分鐘玩轉 Docker 容器技術(139)

除了 Cluster 內部能夠訪問 Service,不少狀況咱們也但願應用的 Service 可以暴露給 Cluster 外部。Kubernetes 提供了多種類型的 Service,默認是 ClusterIP。html

ClusterIP 
Service 經過 Cluster 內部的 IP 對外提供服務,只有 Cluster 內的節點和 Pod 可訪問,這是默認的 Service 類型,前面實驗中的 Service 都是 ClusterIP。
node

NodePort 
Service 經過 Cluster 節點的靜態端口對外提供服務。Cluster 外部能夠經過 
<NodeIP>:<NodePort> 訪問 Service。
負載均衡

LoadBalancer 
Service 利用 cloud provider 特有的 load balancer 對外提供服務,cloud provider 負責將 load balancer 的流量導向 Service。目前支持的 cloud provider 有 GCP、AWS、Azur 等。
ide

下面咱們來實踐 NodePort,Service httpd-svc 的配置文件修改以下: 學習

添加 type: NodePort,從新建立 httpd-svc 測試

Kubernetes 依然會爲 httpd-svc 分配一個 ClusterIP,不一樣的是: ui

  1. EXTERNAL-IP 爲 nodes,表示可經過 Cluster 每一個節點自身的 IP 訪問 Service。 spa

  2. PORT(S) 爲 8080:323128080 是 ClusterIP 監聽的端口,32312 則是節點上監聽的端口。Kubernetes 會從 30000-32767 中分配一個可用的端口,每一個節點都會監聽此端口並將請求轉發給 Service。 code

下面測試 NodePort 是否正常工做。 orm

經過三個節點 IP + 32312 端口都可以訪問 httpd-svc

接下來咱們深刻探討一個問題:Kubernetes 是如何將 <NodeIP>:<NodePort> 映射到 Pod 的呢?

與 ClusterIP 同樣,也是藉助了 iptables。與 ClusterIP 相比,每一個節點的 iptables 中都增長了下面兩條規則:

規則的含義是:訪問當前節點 32312 端口的請求會應用規則 KUBE-SVC-RL3JAE4GN7VOGDGP,內容爲:

其做用就是負載均衡到每個 Pod。

NodePort 默認是的隨機選擇,不過咱們能夠用 nodePort 指定某個特定端口。

如今配置文件中就有三個 Port 了:
nodePort 是節點上監聽的端口。
port 是 ClusterIP 上監聽的端口。
targetPort 是 Pod 監聽的端口。

最終,Node 和 ClusterIP 在各自端口上接收到的請求都會經過 iptables 轉發到 Pod 的 targetPort

應用新的 nodePort 並驗證:

nodePort: 30000 已經生效了。

小結

本章咱們討論訪問應用的機制 Service,學習瞭如何建立 Service;Service 的三種類型 ClusterIP、NodePort 和 LoadBalancer,以及它們各自的適用場景。

下一節咱們開始學習 Rolling Update。

書籍:
1.《天天5分鐘玩轉Docker容器技術》
https://item.jd.com/16936307278.html

2.《天天5分鐘玩轉OpenStack》
https://item.jd.com/12086376.html

相關文章
相關標籤/搜索