網絡模型 - 天天5分鐘玩轉 Docker 容器技術(169)

本節咱們討論 Kubernetes 網絡這個重要主題。html

Kubernetes 做爲編排引擎管理着分佈在不一樣節點上的容器和 Pod。Pod、Service、外部組件之間須要一種可靠的方式找到彼此並進行通訊,Kubernetes 網絡則負責提供這個保障。本章包括以下內容:前端

  1. Kubernetes 網絡模型後端

  2. 各類網絡方案網絡

  3. Network Policy負載均衡

Kubernetes 網絡模型

Kubernetes 採用的是基於扁平地址空間的網絡模型,集羣中的每一個 Pod 都有本身的 IP 地址,Pod 之間不須要配置 NAT 就能直接通訊。另外,同一個 Pod 中的容器共享 Pod 的 IP,可以經過 localhost 通訊。ide

這種網絡模型對應用開發者和管理員至關友好,應用能夠很是方便地從傳統網絡遷移到 Kubernetes。每一個 Pod 可被看做是一個個獨立的系統,而 Pod 中的容器則可被看作同一系統中的不一樣進程。spa

下面討論在這個網絡模型下集羣中的各類實體如何通訊。知識點前面都已經涉及,這裏可當作複習和總結。代理

Pod 內容器之間的通訊

當 Pod 被調度到某個節點,Pod 中的全部容器都在這個節點上運行,這些容器共享相同的本地文件系統、IPC 和網絡命名空間。code

不一樣 Pod 之間不存在端口衝突的問題,由於每一個 Pod 都有本身的 IP 地址。當某個容器使用 localhost 時,意味着使用的是容器所屬 Pod 的地址空間。htm

好比 Pod A 有兩個容器 container-A1 和 container-A2,container-A1 在端口 1234 上監聽,當 container-A2 鏈接到 localhost:1234,實際上就是在訪問 container-A1。這不會與同一個節點上的 Pod B 衝突,即便 Pod B 中的容器 container-B1 也在監聽 1234 端口。

Pod 之間的通訊

Pod 的 IP 是集羣可見的,即集羣中的任何其餘 Pod 和節點均可以經過 IP 直接與 Pod 通訊,這種通訊不須要藉助任何的網絡地址轉換、隧道或代理技術。Pod 內部和外部使用的是同一個 IP,這也意味着標準的命名服務和發現機制,好比 DNS 能夠直接使用。

Pod 與 Service 的通訊

Pod 間能夠直接經過 IP 地址通訊,但前提是 Pod 得知道對方的 IP。在 Kubernetes 集羣中, Pod 可能會頻繁的銷燬和建立,也就是說 Pod 的 IP 不是固定的。爲了解決這個問題,Service 提供了訪問 Pod 的抽象層。不管後端的 Pod 如何變化,Service 都做爲穩定的前端對外提供服務。同時,Service 還提供了高可用和負載均衡功能,Service 負責將請求轉發給正確的 Pod。

外部訪問

不管是 Pod 的 IP 仍是 Service 的 Cluster IP,它們只能在 Kubernetes 集羣中可見,對集羣以外的世界,這些 IP 都是私有的。

Kubernetes 提供了兩種方式讓外界可以與 Pod 通訊:

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

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

以上就是 Kubernetes 網絡模型的相關討論。
下一節咱們來看看 Kubernetes 支持的網絡方案。

書籍:

1.《天天5分鐘玩轉Kubernetes》
https://item.jd.com/26225745440.html

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

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

相關文章
相關標籤/搜索