iT邦幫忙

2026 iThome 鐵人賽

DAY 19
0
Kubernetes

初見 Kubernetes - 純網站後端開發踏入 K8s 世界的經驗分享系列 第 19 篇

Day 19 - Ingress,讓同一個入口按路徑找到服務

  • 分享至 

  • xImage
  •  

昨天透過 NodePort 作為將後端 API 服務對叢集外開放的 Service Type,不過如果要對外揭露的服務越來越多,前端、API 各佔多個入口,如此瀏覽器 URL 與 CORS 設定很快就會變複雜。

而今天要把這些入口改成同一個 host,在同一個 FQDN 的情況下配置以下 URL prefix 規則:/ 給前端,/api/ 給 API。

從 NodePort 測試入口切換到 Ingress

以 k3d 來說,k3d 使用的 K3s 預設安裝 Traefik;Traefik 依 /api 規則先把流量送到 api-gateway Service,再由應用 Gateway 轉送到兩個 API。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: demo-entry
  namespace: team-a
spec:
  ingressClassName: traefik
  rules:
    - host: demo.example.internal
      http:
        paths:
          - path: /api
            pathType: Prefix
            backend:
              service:
                name: api-gateway
                port:
                  number: 80
          - path: /
            pathType: Prefix
            backend:
              service:
                name: portal-web
                port:
                  number: 80

host 是讓外部 Client 呼叫的 FQDN,實際上會依不同環境而有所不同,例如我的主域名是 demok8s.com的話,我也可以將 host 設定為 api.demok8s.com,這樣外部只能透過這一個 FQDN 呼叫到 Ingress 服務。

Ingress 將 /api 的 request 原封不動轉送給應用 Gateway,再由 Gateway 的 route 決定 /api/a、/api/b 如何導向兩個 API,以及是否移除 prefix 等相關轉送規則。

切換時,先確認 ClusterIP Service 與 EndpointSlice 有可用 Pod,再 apply Ingress。

並改從外部呼叫 Ingress 所設定的 FQDN + API Route 確認沒問題後,才移除 NodePort 入口。

當前端和 API 都由 Ingress 提供後,就可把 runtime URL 改成 /api/...,讓瀏覽器使用同源請求。

kubectl -n team-a get ingress,service,endpointslices
curl -H 'Host: demo.example.internal' http://localhost:8081/api/a/health

如此 Ingress 基礎服務就算完成了。

其他平台如何處理 Ingress

前面的 ingressClassName: traefik 代表使用 Traefik 的 Ingress,當配置其他叢集時,必須先確認實際安裝的 Controller 與 IngressClass。

  • Amazon EKS:AWS Load Balancer Controller 可依 Ingress 建立 Application Load Balancer(ALB)。
  • Google GKE:GKE Ingress controller 可依 Ingress 建立 Google Cloud Application Load Balancer。
  • Azure AKS:Application Gateway for Containers 的 ALB Controller 支援 Ingress,也支援 Gateway API。
  • VMware Tanzu 等環境:Avi Kubernetes Operator(AKO)可讓 Ingress 對接 NSX ALB(Avi)。

也有 Contour、Kong 等 Controller,選用哪一種,要看叢集平台、既有負載平衡設備、TLS 與路由需求。

ingress-nginx 已停止維護

Kubernetes 社群的 ingress-nginx 已在 2026 年 3 月 24 日退役,之後不再發布版本、修正 bug 或提供安全更新。

既有部署不會因此立刻停止運作,但不宜再作為新部署選項。

不過還有一個名字很像的 F5 的 NGINX Ingress Controller 是另一個專案,2026 年仍有發佈新版本。

這也與 Ingress API 的「功能已凍結」不同。Ingress API 仍是 Kubernetes 的 API,並沒有因 ingress-nginx 退役而被移除。

參考資料


上一篇
Day 18 - Probe,持續觀察、確認 Pod 是否準備好、是否異常
系列文
初見 Kubernetes - 純網站後端開發踏入 K8s 世界的經驗分享 共 19 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言