1. 程式人生 > >kubernetes學習 Service (二)

kubernetes學習 Service (二)

二、Cluster IP 底層實現

  延續 kubernetes學習 Service (一) 的內容。

  我們知道PodIP是在容器中配置的,那麼 ServiceCLUSTER IP 又是配置在哪裡?CLUESTER-IP 又是如何對映到 Pod IP 的?

  答案是:iptable。

 

  Cluster IP 是一個虛擬 IP,是由kubernetes 節點上的iptables規則管理的。

  可以通過root許可權 iptables-save 命令打印出當前節點的 iptables 規則,擷取與httpd-svc Cluster IP 

 

      

 

    上面的規則包含兩條含義:

      * 如果 CLUSTER 內的 Pod 要訪問 httpd-svc,則允許

      * 其他原地址訪問 httpd-svc,跳轉到規則 KUBE-SVC-RL3JAE4GN7VOGDGP

 

  

    (1) 1/3的概率 跳轉到規則 KUBE-SEP-J7KWCV7US6EDHKCC

    (2) 1/3的概率 跳轉到規則 KUBE-SEP-2Y5J5AVRJG7LJDZ6

    (3) 1/3的概率 跳轉到規則 KUBE-SEP-RBOZOACVG7XXV2VP

 

  

  即,將請求分別轉發到後端的三個Pod。通過上面的分析,我們得到結論:iptables 將訪問 Service 的流量轉發到後端 Pod,而且使用類似輪詢的負載均衡策略。

      另外,Cluster 的每一個節點都配置了相同的 iptables 規則,這樣就確保了整個 Cluster 都能通過 ServiceCluster IP 訪問 Service。

 

三、DNS 訪問 Service

   Cluster 中,除了可以通過 Cluster IP 訪問 Service,Kubernetess 還提供了更為方便的 DNS 

訪問。

   kubeadm 部署時會預設安裝 kube-dns 元件

   

  kube-dns 是一個 DNS 伺服器。每當有新的 Service 被建立,kube-dns 會新增該 Service 的 DNS 記錄。Cluster 中的 Pod 可以通過<SERVICE_NAME>.<NAMESPACE_NAME> 訪問 Service。 

  比如說我們可以用 httpd-svc.default 訪問 Service httpd-svc

   

   如上所示,我們在臨時的 busybox Pod 中驗證了 DNS 的有效性。另外由於 Podhttpd-svc 同屬於 default namespace, 因此可以省略 default 直接用 httpd-svc 訪問 Service

  

   用 nslookup 檢視 httpd-svcDNS 資訊

   

   未完,待續。。。