k8s~ingress_service_endpoint_pod四壯士

張佔嶺發表於2023-12-21

在Kubernetes中,Service和Endpoints是兩個重要的概念,它們之間存在著密切的關係。

  • Service:Service是Kubernetes中用於定義一組Pod的訪問方式的抽象。透過建立Service,可以為一組具有相同標籤的Pod提供統一的訪問入口,使得客戶端可以透過Service來訪問這些Pod,而無需瞭解其具體的IP地址和埠號。Service透過標籤選擇器(selector)來選擇匹配的Pod,並將請求轉發到這些Pod上。

  • Endpoints:Endpoints是Kubernetes中的另一個資源物件,它儲存了與一個Service相關聯的實際後端Pod的列表和對應的網路終結點資訊(即IP地址和埠號)。當Service被建立時,Kubernetes會自動管理Endpoints物件,將與Service標籤選擇器匹配的Pod的IP地址和埠號資訊儲存在Endpoints中。

因此,Service和Endpoints之間的關係可以總結為:Service定義了一組Pod的訪問方式,而Endpoints則儲存了這些Pod的實際網路終結點資訊,Service透過Endpoints來實現對後端Pod的負載均衡和代理轉發。

ingress,service,endpoints和pod四者關係

在這個示意圖中,Ingress定義了對外部流量的訪問規則,包括主機名(host)和路徑(path)等。Ingress透過指向一個Service來實現流量的轉發。Service根據自身的selector選擇與之匹配的Pod,並將請求轉發到這些Pod上。Endpoints儲存了與Service相關聯的後端Pod的IP地址和埠資訊,而Pod則是應用程式執行的實際容器。

因此,Ingress定義了對外部流量的訪問規則,Service提供了對後端Pod的訪問入口,Endpoints儲存了這些後端Pod的網路終結點資訊,而Pod是應用程式實際執行的地方。

endpoint顯示的ip是誰的?

Pod在Kubernetes中是有自己的IP地址的,這個IP地址通常由Kubernetes的網路外掛(如Calico、Flannel等)負責分配和管理。每個Pod都會被分配一個獨立的IP地址,用於在叢集內部進行通訊。

而Endpoints物件儲存的是與Service關聯的後端Pod的IP地址和埠資訊,它記錄了Service需要代理的實際後端Pod的網路終結點資訊。Endpoints並不儲存所有Pod的IP地址,而是僅儲存與特定Service相關聯的Pod的IP地址和埠資訊。

因此,可以說Pod具有自己的IP地址,並且Endpoints物件儲存了與Service相關的Pod的IP地址和埠資訊。

  • 這是一個pod的資訊
[root@lind~]# kubectl describe  pod envoy-deployment-786c44794b-rb6wm -n=default
Name:         envoy-deployment-786c44794b-rb6wm
Namespace:    default
Priority:     0
Node:         192.168.60.1/192.168.60.1
Start Time:   Tue, 19 Dec 2023 09:54:24 +0800
Labels:       app=envoy
              pod-template-hash=786c44794b
              workloadID_ingress-10aa232e236bc59c6a7d7d59053154a8=true
              workloadID_ingress-c7fdea094d8b2ab0912781e0867ce277=true
Annotations:  cattle.io/timestamp: 2023-12-19T01:54:22Z
              cni.projectcalico.org/podIP: 10.42.0.150/32
              cni.projectcalico.org/podIPs: 10.42.0.150/32
              field.cattle.io/ports:

  • 這是對應的endpoint的資訊
[root@lind~]# kubectl get endpoints -n=default
NAME                                       ENDPOINTS                                                                 AGE
envoy-service                              10.42.0.150:9901,10.42.0.150:10000                                        70d
  • 這是對應的service的資訊
[root@lind~]# kubectl get svc -n=default
NAME                                       TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                          AGE
envoy-service                              NodePort    10.43.189.206   <none>        9901:25568/TCP,10000:13908/TCP   70d
  • 這是對應的ingress的資訊
[root@lind~]# kubectl get ingress -n=default
NAME                            CLASS    HOSTS                           ADDRESS                                        PORTS   AGE
envoy-final-kc            <none>   test.xxx.com             192.168.60.2,192.168.60.3,192.168.60.4                80      13d

好了,今天的k8s四壯士的文章就寫到這裡吧,感謝閱讀!

相關文章