k8s~ingress_service_endpoint_pod四壯士

2023-12-21 21:00:33

在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      |       |      Service     |       |     Endpoint     |       |       Pod        |
|                  |       |                  |       |                  |       |                  |
|   host:          |       |   selector:      |       |   IP: 10.0.0.1   |       |   Label:         |
|   example.com    |-------|   app: myapp     |-------|   Port: 80       |-------|   app: myapp     |
|   path: /api     |       |                  |       |   IP: 10.0.0.2   |       |                  |
|                  |       |                  |       |   Port: 80       |       |                  |
+------------------+       +------------------+       +------------------+       +------------------+

在這個示意圖中,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@elasticsearch02 ~]# 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的資訊
NAME                                       ENDPOINTS                                                                 AGE
envoy-service                              10.42.0.150:9901,10.42.0.150:10000                                        70d
  • 這是對應的service的資訊
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的資訊
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四壯士的文章就寫到這裡吧,感謝閱讀!