在Kubernetes 中,Ingress 和 Service 是兩個不同的概念,但它們通常一起使用以提供對應用程序的外部訪問。以下是它們之間的關系:
-
Service:
- Service 是 Kubernetes 中一種用于暴露應用程序的網絡服務的抽象。
- Service 可以將 Pod 組織成一個單一的訪問點,并提供負載均衡以確保流量被均勻分配到這組 Pod 中。
- Service 主要用于集群內部的服務發(fā)現和負載均衡,通常使用 ClusterIP、NodePort 或 LoadBalancer 類型。
-
Ingress:
- Ingress 是 Kubernetes 中用于公開和管理集群中服務的 API 對象。
- Ingress 允許從集群外部訪問集群內部的服務,提供了一種將外部流量路由到集群內 Service 的機制。
- Ingress 定義了規(guī)則,指定了外部流量如何映射到后端服務。這些規(guī)則可能包括主機名、路徑和后端服務的映射關系。
-
關系:
- Ingress 通常與 Service 一起使用,將外部流量引導到 Service。
- Ingress 規(guī)則中的后端服務通常是指已在集群內定義的 Service。
- Service 通過 ClusterIP 暴露在集群內,而 Ingress 則負責將流量從集群外部引導到這些 Service 上。
例子:
假設有一個 Service 和一個相應的 Ingress:
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
selector:
app: myapp
ports:
- protocol: TCP
port: 80
targetPort: 8080
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapp-ingress
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /app
pathType: Prefix
backend:
service:
name: myapp-service
port:
number: 80
在這個例子中,myapp-service 是一個 Service,myapp-ingress 是一個 Ingress,規(guī)定了將 myapp.example.com/app 的請求路由到 myapp-service Service 中。流量從 Ingress 進入集群,然后被路由到相應的 Service。