Ingress
什麼是 Ingress
在 Kubernetes 中,Ingress 是一個管理外部訪問集群內部服務的 API 對象。它提供了一個單一的入口點,並基於路徑或主機名將外部流量路由到不同的服務。
為什麼需要 Ingress
當你的應用程式中有多個 Service 需要對外暴露,並且需要靈活地管理路由和 TLS/SSL 時,Ingress 是一個非常強大的工具。它可以幫助你:
- 集中管理外部訪問
- 基於路徑或主機名路由流量
- 配置 HTTPS 証書
- 減少負載均衡器的數量,降低成本
基本應用場景
- 多服務應用:一個應用有多個微服務,每個服務對應不同的路徑或子域名。
- HTTPS 支持:需要配置和管理 TLS/SSL 証書,保護流量安全。
- 負載均衡和路由:需要靈活的負載均衡和路由策略。
Ingress 與 Service 的區別
特性 | Ingress | Service (LoadBalancer) |
---|---|---|
主要用途 | 管理多個服務的外部存取 | 將單一服務暴露給外部網路 |
流量管理 | 使用單一入口點,根據路徑或主機名稱來路由流量 | 每個 Service 創建一個獨立的負載平衡器 |
成本 | 減少負載平衡器的數量,降低成本 | 每個 Service 需要一個負載平衡器,成本較高 |
彈性 | 高度彈性,可根據路徑和主機名稱進行路由 | 不彈性,基於 IP 和端口進行路由 |
HTTPS 支援 | 集中配置 TLS/SSL | 需在每個 Service 上配置 TLS/SSL |
配置難度 | 較複雜,需配置 Ingress 資源和控制器 | 簡單,適合快速暴露單一服務 |
典型情境 | 大型應用或生產環境,需要多服務路由和 HTTPS | 簡單應用或開發環境 |
動態配置 | 支援動態配置,可以在不重啟 Ingress 控制器的情況下更新路由規則 | 不支援動態配置,需要重啟 Service 來更新路由規則 |
負載平衡 | 只支援輪詢負載平衡 | 支援多種負載平衡算法,如輪詢、最少連接等 |
什麼是 Ingress Controller
Ingress Controller 是一個運行在 Kubernetes 集群中的應用程式,它負責監聽和處理進入集群的流量,並根據 Ingress 資源中定義的規則來將流量導向到相應的 Service。
常見的 Ingress Controller 有:
範例
在這個範例中,將創建了一個 Ingress 資源,根據路徑將流量路由到不同的服務:
當訪問 http://example.com/app1 時,流量會被路由到 service1。 當訪問 http://example.com/app2 時,流量會被路由到 service2。
- 安裝 Ingress Controller
首先,你需要安裝一個 Ingress Controller。這裡以 Nginx Ingress Controller 為例:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml
- 部署 Service
定義兩個 ClusterIP 服務
apiVersion: v1
kind: Service
metadata:
name: service1
spec:
selector:
app: app1
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
name: service2
spec:
selector:
app: app2
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: ClusterIP
- 創建 Ingress 資源
創建一個 Ingress 資源,定義路由規則:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /app1
pathType: Prefix
backend:
service:
name: service1
port:
number: 80
- path: /app2
pathType: Prefix
backend:
service:
name: service2
port:
number: 80