在運維工作中,k8s中service和ingress的有什么區別?
在 Kubernetes(K8S)集群中,Service 和 Ingress 都是用于管理網絡流量和提供服務暴露的資源,但它們在功能、用途和實現方式上有顯著的區別。以下是詳細對比:
1. Service(服務)
1.1 定義
Service 是 Kubernetes 中的一個抽象資源,用于定義一組 Pod 的邏輯集合和一個外部可訪問的網絡接口。它通過一個虛擬 IP(ClusterIP)和端口將流量轉發到后端的 Pod。
1.2 主要功能
- 負載均衡:將流量均勻分配到后端的 Pod。
- 服務發現:提供一個穩定的網絡接口,Pod 的變化不會影響到客戶端。
- 內部通信:主要用于集群內部的服務通信。
1.3 類型
- ClusterIP(默認):僅在集群內部可訪問,提供一個虛擬 IP。
- NodePort:通過每個節點的 IP 和一個靜態端口暴露服務,外部可通過
<NodeIP>:<NodePort>訪問。 - LoadBalancer:在支持的云平臺上,通過云提供商的負載均衡器暴露服務。
- ExternalName:將服務映射到一個外部名稱,通常用于 CNAME。
1.4 使用場景
- 內部服務通信:Pod 之間通過 Service 的 ClusterIP 進行通信。
- 外部訪問:通過 NodePort 或 LoadBalancer 提供外部訪問。
2. Ingress(入口)
2.1 定義
Ingress 是 Kubernetes 中的一個 API 對象,用于管理外部訪問集群內服務的規則。它通常與 Ingress Controller 配合使用,提供基于 HTTP 和 HTTPS 的負載均衡、SSL 終止、基于路徑和域名的路由等功能。
2.2 主要功能
- 基于路徑和域名的路由:根據請求的域名和路徑將流量轉發到不同的后端服務。
- SSL 終止:支持 HTTPS,可以管理 SSL/TLS 證書。
- 負載均衡:將外部流量負載均衡到后端服務。
- 重定向和重寫:支持對請求路徑的重定向和重寫。
2.3 使用場景
- 外部訪問:提供對外部用戶的統一入口,管理多個服務的 HTTP/HTTPS 流量。
- 多域名支持:支持基于域名的路由,適用于多租戶環境。
- 安全:支持 SSL 終止,確保數據傳輸的安全。
3. 主要區別
| 特性 | Service | Ingress |
|---|---|---|
| 功能 | 負載均衡、服務發現、內部通信 | 基于路徑和域名的路由、SSL 終止、外部訪問 |
| 協議支持 | TCP/UDP | HTTP/HTTPS |
| 使用場景 | 集群內部服務通信、外部訪問(NodePort、LoadBalancer) | 外部訪問的統一入口,支持多域名和路徑路由 |
| 配置復雜度 | 相對簡單 | 相對復雜,需要 Ingress Controller |
| 依賴組件 | 無額外依賴 | 需要 Ingress Controller(如 Nginx Ingress Controller) |
| 負載均衡 | 基于 IP 和端口 | 基于 HTTP/HTTPS 請求的路徑和域名 |
| 安全性 | 無 SSL 終止功能 | 支持 SSL 終止,確保數據傳輸安全 |
4. 配置示例
4.1 Service 配置示例
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 9376
4.2 Ingress 配置示例
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /path1
pathType: Prefix
backend:
service:
name: service1
port:
number: 80
- path: /path2
pathType: Prefix
backend:
service:
name: service2
port:
number: 80
5. 我的總結
- Service 主要用于集群內部的服務通信和簡單的外部訪問(通過 NodePort 或 LoadBalancer),適合 TCP/UDP 協議。
- Ingress 提供更高級的外部訪問管理功能,支持基于 HTTP/HTTPS 的路由、SSL 終止和多域名支持,適用于復雜的外部訪問場景。
綜上所述,在實際使用中,可以根據具體需求選擇合適的資源類型。例如,對于簡單的內部服務通信,可以使用 Service;而對于需要對外提供 HTTP/HTTPS 服務的場景,可以使用 Ingress。

浙公網安備 33010602011771號