在今天的文章中,我們將重點介紹 Ingress 如何幫助我們靈活地管理外部流量,讓多個服務共享同一個入口。這是 Kubernetes 網路架構中的關鍵元素,尤其在大型系統或多服務應用中,它能有效簡化流量管理並提高擴展性。
Ingress 是 Kubernetes 中的一種資源,它讓我們能定義如何將來自外部的 HTTP 和 HTTPS 請求路由到叢集內的服務(Service)。與 NodePort 和 LoadBalancer 不同,Ingress 能根據請求的路徑或域名進行精細化的流量管理,實現靈活的路由規則。
在 Kubernetes 中,Ingress Controller 負責實現 Ingress 資源的功能。是負責監控和處理 Ingress 規則的控制器,它確保外部的請求能根據 Ingress 規則正確路由到叢集內的服務。不同的 Kubernetes 環境可能會使用不同的 Ingress Controller,例如 NGINX、Traefik 或雲端供應商提供的控制器(如 Azure Application Gateway)。本文以 NGINX 為例,說明如何安裝 Ingress Controller。
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml
執行上述命令將在 Kubernetes 叢集中安裝 NGINX Ingress Controller。
在安裝完 Ingress Controller 後,接下來需要編寫 Ingress 規則,來定義如何根據請求路由流量。
以下是一個簡單的 Ingress YAML 文件範例,它根據不同的 URL 路徑,將流量路由到不同的服務:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapp-ingress
spec:
rules:
- host: "myapp.example.com" # 根據域名路由
http:
paths:
- path: / # 根據 URL 路徑路由
pathType: Prefix
backend:
service:
name: myapp-service
port:
number: 80
- path: /api # 將 "/api" 路徑導向另一個服務
pathType: Prefix
backend:
service:
name: api-service
port:
number: 8080
metadata
:用於定義 Kubernetes 資源的名稱,可以幫助 Kubernetes 識別和管理資源。host
:指定應用特定路由規則的域名。paths
:定義如何根據不同的 URL 路徑將流量導向各個服務。backend
:指定流量的目標後端服務及其對應的埠(port)。使用以下命令將YAML佈署到 Kubernetes 叢集:
kubectl apply -f ingress.yaml
行此命令後,Kubernetes 會根據我們定義的 Ingress 規則,在叢集中設置相應的流量路由。
在成功部署 Ingress 後,可以檢查 Ingress 資源是否正確配置:
kubectl get ingress
此命令會顯示 Ingress 的名稱、host(主機或域名)、路由的服務等資訊。
今天我們深入介紹了 Kubernetes 中的 Ingress,以及如何透過 Ingress Controller 來靈活地管理外部流量。Ingress 是一個強大且靈活的資源,特別適合需要精細化網路流量控制的大型應用架構。隨著應用架構的日益複雜,透過 Ingress 進行流量管理將變得越來越重要!