在 Kubernetes(簡稱 K8S)中,Ingress 是一種 API 資源物件,用於管理從叢集外部到叢集內部服務的 HTTP 和 HTTPS 連線。它主要用來定義網路路由規則,允許外部使用者透過特定的路徑訪問部署在叢集內的應用服務。Ingress 控制器則是實際實現這些規則的元件,通常執行在一個或多個 Pod 中,並監聽特定的 IP 地址和埠。
以下是 Ingress 的主要作用:
-
負載均衡:
Ingress 可以根據請求的 URL 路徑將流量分配到不同的後端服務,實現簡單的負載均衡功能。這有助於管理多個服務的流量,尤其是在微服務架構中,可以方便地為不同的服務分配流量。 -
名稱空間間的通訊:
Ingress 可以跨越多個名稱空間工作,使得不同名稱空間中的服務可以透過單一的入口點進行訪問。 -
路徑級路由:
Ingress 支援基於路徑的路由,這意味著可以根據請求的 URL 路徑將請求轉發到叢集內的不同服務。例如,example.com/path1
可能會指向 Service A,而example.com/path2
則指向 Service B。 -
TLS 終止:
Ingress 可以處理 TLS/SSL 加密,即它可以終止 SSL 連線,解密請求,並將它們轉發到正確的後端服務。這樣可以減少後端服務的工作負擔,因為後端服務處理的是已經解密的資料。 -
靜態資源服務:
Ingress 還可以用來直接提供靜態檔案,如 HTML 頁面等,而不需要透過後端服務。 -
其他特性:
許多 Ingress 控制器還提供了額外的功能,如重寫 URL、新增 HTTP 頭部、快取控制、速率限制等。
為了使用 Ingress,你需要一個執行中的 Ingress 控制器,如 Nginx Ingress Controller、Traefik 或者 ALB (Amazon Load Balancer) 等。這些控制器實現了 Ingress 資源所描述的行為,並且可以根據配置動態調整其行為。
綜上所述,Ingress 在 Kubernetes 中是一個非常重要的元件,它不僅簡化了服務暴露的方式,還為叢集內外的通訊提供了豐富的功能。