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


除了 Cluster 內部可以訪問 Service,很多情況我們也希望應用的 Service 能夠暴露給 Cluster 外部。Kubernetes 提供了多種類型的 Service,默認是 ClusterIP。

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

NodePort 
Service 通過 Cluster 節點的靜態端口對外提供服務。Cluster 外部可以通過 
<NodeIP>:<NodePort> 訪問 Service。

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

下面我們來實踐 NodePort,Service httpd-svc 的配置文件修改如下:

添加 type: NodePort,重新創建 httpd-svc

Kubernetes 依然會為 httpd-svc 分配一個 ClusterIP,不同的是:

  1. EXTERNAL-IP 為 nodes,表示可通過 Cluster 每個節點自身的 IP 訪問 Service。

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

下面測試 NodePort 是否正常工作。

通過三個節點 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM