iT邦幫忙

2024 iThome 鐵人賽

DAY 16
0
DevOps

DevOps菜鳥的30天實踐挑戰:從 CI/CD Pipeline 到雲端佈署系列 第 16

Day16 - 探索 Kubernetes Ingress:實現靈活的流量管理

  • 分享至 

  • xImage
  •  

在今天的文章中,我們將重點介紹 Ingress 如何幫助我們靈活地管理外部流量,讓多個服務共享同一個入口。這是 Kubernetes 網路架構中的關鍵元素,尤其在大型系統或多服務應用中,它能有效簡化流量管理並提高擴展性。


什麼是 Ingress?

Ingress 是 Kubernetes 中的一種資源,它讓我們能定義如何將來自外部的 HTTP 和 HTTPS 請求路由到叢集內的服務(Service)。與 NodePortLoadBalancer 不同,Ingress 能根據請求的路徑或域名進行精細化的流量管理,實現靈活的路由規則。

Ingress 的主要功能

  1. 路徑導向(Path-based Routing):根據 URL 路徑決定將流量導向哪個服務。
  2. 域名導向(Host-based Routing):根據不同域名將流量分配給不同的服務。
  3. SSL 支援:透過 Ingress Controller,為外部流量啟用 SSL,實現安全的 HTTPS 訪問。
  4. 負載平衡(Load Balancing):在多個 Pod 之間進行負載平衡,確保應用的高可用性。

https://ithelp.ithome.com.tw/upload/images/20240930/20169492Y705jyXXIF.png
圖片來源

Ingress 的優點

  • 減少外部負載平衡器數量:未使用 Ingress 時,每個服務需要一個外部負載平衡器(Load Balancer)處理外部流量,增加成本。Ingress 允許我們用一個入口點處理多個服務的流量。
  • 靈活的流量控制:與單純的 NodePortLoadBalancer 相比,Ingress 提供更靈活的路由規則,能根據不同的 URL 路徑或域名將流量導向不同的服務,適合多服務應用的需求。

https://ithelp.ithome.com.tw/upload/images/20240930/20169492FlDIS8FbpO.png
圖片來源


設置 Ingress

步驟 1:準備 Ingress Controller

在 Kubernetes 中,Ingress Controller 負責實現 Ingress 資源的功能。是負責監控和處理 Ingress 規則的控制器,它確保外部的請求能根據 Ingress 規則正確路由到叢集內的服務。不同的 Kubernetes 環境可能會使用不同的 Ingress Controller,例如 NGINXTraefik 或雲端供應商提供的控制器(如 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。

步驟 2:編寫 Ingress 規則

在安裝完 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)。

步驟 3:佈署 Ingress

使用以下命令將YAML佈署到 Kubernetes 叢集:

kubectl apply -f ingress.yaml

行此命令後,Kubernetes 會根據我們定義的 Ingress 規則,在叢集中設置相應的流量路由。

步驟 4:驗證 Ingress 配置

在成功部署 Ingress 後,可以檢查 Ingress 資源是否正確配置:

kubectl get ingress

此命令會顯示 Ingress 的名稱、host(主機或域名)、路由的服務等資訊。


Ingress 的應用場景

  1. 多服務共享一個域名:如果應用架構中有多個服務需要共享一個域名,並根據不同的路徑或子域名來路由流量,Ingress 是一個理想的選擇。
  2. 減少外部 IP 的使用:在雲端環境中,每個服務申請一個負載平衡器可能會增加成本。Ingress 允許多個服務共享一個外部 IP,有效降低開支。
  3. 安全的流量管理:Ingress Controller 通常支援 SSL 終止 (SSL Termination),可以在入口處對流量進行加密和解密處理,確保應用的安全性。

結語

今天我們深入介紹了 Kubernetes 中的 Ingress,以及如何透過 Ingress Controller 來靈活地管理外部流量。Ingress 是一個強大且靈活的資源,特別適合需要精細化網路流量控制的大型應用架構。隨著應用架構的日益複雜,透過 Ingress 進行流量管理將變得越來越重要!


參考文件


上一篇
Day15 - 使用 kubectl 佈署與管理 Kubernetes 應用:深入解析 Deployment
下一篇
Day17 - CI/CD 與 Kubernetes 的整合實踐:自動化應用部署
系列文
DevOps菜鳥的30天實踐挑戰:從 CI/CD Pipeline 到雲端佈署30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言