K8s · 網路與服務 · 第 22 課 · · 12min read

Kubernetes Ingress 入門:從 NodePort 的醜網址到一個 IP 走天下

學完 NodePort 才發現網址長得像 http://192.168.1.100:30080,使用者根本不會用。Ingress 就是 K8s 上的 Nginx 反向代理,讓你用標準 80 port、用路徑或域名分流。這篇從零講清楚 Ingress 跟 Ingress Controller 的差別、怎麼寫第一份 YAML、怎麼用 curl 驗證、新手最常踩的三個坑。

#Kubernetes #Ingress #Traefik #網路 #新手入門
章節目錄 · 3

為什麼需要 Ingress?先看 NodePort 的痛

如果你已經學過 NodePort,那網址大概長這樣:

http://192.168.1.100:30080

這個網址要丟給使用者用?不可能。沒有人會記 IP,更不會記一個五位數的 port

我們要的是這種:

http://myapp.com
http://myapp.com/api
http://www.myapp.com

標準的 80 port、用域名、用路徑分流。但 NodePort 給你的 port 範圍是 30000–32767,永遠開不到 80。

這個問題在 Docker 時代怎麼解?用 Nginx 反向代理:所有流量打進 Nginx,Nginx 看 URL 路徑或域名再轉給對應的容器。

K8s 上的等價解法叫 Ingress

Ingress 跟 Ingress Controller 是兩個東西,不要搞混

新手最常被卡住的地方就是這個。Ingress 不是一個東西,是兩個:

名稱是什麼比喻
Ingress(YAML)一份路由規則的設定檔寫滿路徑的「電話簿」
Ingress Controller真正跑在叢集裡的 Pod,監聽 80/443負責接電話、查電話簿、轉接的「總機小姐」
光寫 Ingress YAML 不會發生任何事,它只是一份規則。要有 Controller 拿著這份規則去聽 80 port、實際處理請求,才會運作。

常見的 Ingress Controller

  • Nginx:最普及,K8s 官方維護
  • Traefik:現代化、自動發現服務、k3s 預設內建
  • HAProxy:高效能、企業常見
標準 K8s 不內建任何 Controller,要自己裝。但如果你用 k3s(輕量版 K8s,本地測試很常用),它預設幫你裝好 Traefik,可以直接用。

這篇用 k3s + Traefik 示範。如果你用 minikube,把後面範例的 ingressClassName: traefik 改成 nginx 即可(記得先 minikube addons enable ingress)。

重點整理

  • NodePort 給的 port 是 30000-32767,沒辦法給使用者用。Ingress 就是為了讓你用標準 80/443 而存在
  • Ingress(YAML 規則)跟 Ingress Controller(實際運作的 Pod)是兩個東西,少了任何一個都不會動
  • k3s 預設裝 Traefik,ingressClassNametraefik;minikube 是 nginx
  • 三個必填apiVersion: networking.k8s.io/v1pathTypeingressClassName
  • Path-based 適合前後端共域名,Host-based 適合微服務各自有域名,實務常混用
  • Ingress 後面的 Service 用 ClusterIP 就好,不要再開 NodePort
下一篇會接著講 HTTPS / TLS 怎麼設,以及 cert-manager 自動續憑證。