跳至主要内容

Ingress

什麼是 Ingress

在 Kubernetes 中,Ingress 是一個管理外部訪問集群內部服務的 API 對象。它提供了一個單一的入口點,並基於路徑或主機名將外部流量路由到不同的服務。

為什麼需要 Ingress

當你的應用程式中有多個 Service 需要對外暴露,並且需要靈活地管理路由和 TLS/SSL 時,Ingress 是一個非常強大的工具。它可以幫助你:

  • 集中管理外部訪問
  • 基於路徑或主機名路由流量
  • 配置 HTTPS 証書
  • 減少負載均衡器的數量,降低成本

基本應用場景

  • 多服務應用:一個應用有多個微服務,每個服務對應不同的路徑或子域名。
  • HTTPS 支持:需要配置和管理 TLS/SSL 証書,保護流量安全。
  • 負載均衡和路由:需要靈活的負載均衡和路由策略。

Ingress 與 Service 的區別

特性IngressService (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。

  1. 安裝 Ingress Controller

首先,你需要安裝一個 Ingress Controller。這裡以 Nginx Ingress Controller 為例:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml
  1. 部署 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
  1. 創建 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