Nginx Ingress作為ACK託管叢集中的流量入口網關,通過靈活的路由規則將外部請求精確轉寄至內部服務。配合使用HTTPS安全加密、灰階發布、通過註解自訂配置等能力,Nginx Ingress可以滿足安全、高可用、可擴充的七層(L7)網路訪問需求。
-
因傳統型負載平衡CLB按規格計費停止售賣,Container Service for Kubernetes自2025年09月11日起,通過控制台建立負載平衡類型的Service與新安裝Nginx Ingress Controller時,將預設使用NLB執行個體。同時,通過控制台建立CLB執行個體類型的Service轉為白名單開放。對於仍需建立CLB的情境,將預設使用按使用量計費模式。更多詳細內容,請參見【產品變更】關於建立Service與Nginx Ingress Controller預設負載平衡類型與計費方式變更的公告。
-
由於Ingress NGINX開源專案於2026年3月後停止維護更新,Container Service for Kubernetes 將停止Nginx Ingress Controller組件維護,請充分瞭解使用風險。更多詳細內容,請參見【產品公告】關於停止維護Nginx Ingress Controller組件的公告。
注意事項
-
請勿刪除Nginx Ingress Controller預設使用的服務。安裝組件後將預設建立
kube-system命名空間下的nginx-ingress-lb服務,將其刪除將會導致組件運行不穩定,嚴重時會出現崩潰。 -
請通過組件管理或者OpenAPI方式配置組件的自訂參數。通過其他渠道修改組件配置可能會導致組件功能異常,且會影響組件後續的升級過程。
-
請優先使用Nginx Ingress配置詞典來實現所需功能。若使用Snippet或Lua代碼等方式對組件進行額外配置,所出現的與預期功能不符等問題無法得到支援人員。
-
請及時升級Nginx Ingress Controller組件,以避免上遊社區版組件的Bug或漏洞導致業務受損。
安裝Nginx Ingress Controller組件
建立樣本應用
樣本應用將部署兩個名稱分別為coffee和tea的無狀態工作負載(Deployment)以及對應的coffee-svc和tea-svc服務(Service)。
控制台
|
1. 建立資源
|
|
2. 查看建立結果 在Yaml 資源建立結果彈窗中,單擊資源右側操作列中的查看,確認建立結果。 |
kubectl
-
建立test-deployment-service.yaml檔案。
-
建立Deployment和Service。
kubectl apply -f test-deployment-service.yaml -
查看
coffee和tea的建立進度。kubectl get deployment coffee tea預期輸出:
NAME READY UP-TO-DATE AVAILABLE AGE coffee 2/2 2 2 14m tea 2/2 2 2 14m -
查看
coffee-svc和tea-svc服務。kubectl get service coffee-svc tea-svc預期輸出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE coffee-svc ClusterIP 192.168.xxx.xxx <none> 80/TCP 15m tea-svc ClusterIP 192.168.xxx.xxx <none> 80/TCP 15m
建立Nginx Ingress
以下樣本的規則(rules)中的網域名稱(host)以test-nginx-ingress.com為例,請替換為實際註冊網域名稱;規則中的路徑映射(paths)以建立樣本應用為例,請按實際情況修改。
控制台
|
1. 建立資源
|
|
2. 擷取訪問地址 建立完成後,等待約1分鐘,然後單擊右上方重新整理按鈕。若端點顯示對應的Elastic IP Address(即關聯公網CLB執行個體的服務地址),說明Nginx Ingress已建立成功。 若長時間未更新端點資訊,可單擊路由名稱,進入事件頁簽,進行異常排查。 |
kubectl
-
建立test-ingress.yaml檔案。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: test-nginx-ingress namespace: default spec: ingressClassName: nginx rules: - host: test-nginx-ingress.com # 請替換為實際註冊網域名稱 http: paths: - path: /coffee backend: service: name: coffee-svc port: number: 80 pathType: ImplementationSpecific - path: /tea backend: service: name: tea-svc port: number: 80 pathType: ImplementationSpecific - host: www.test-nginx-ingress.com # 請替換為實際註冊網域名稱 http: paths: - path: /coffee backend: service: name: coffee-svc port: number: 80 pathType: ImplementationSpecific - path: /tea backend: service: name: tea-svc port: number: 80 pathType: ImplementationSpecific重點參數說明:
-
name:Ingress的名稱。本樣本為test-nginx-ingress。 -
host:指定服務訪問網域名稱。本樣本為test-nginx-ingress.com,請替換為實際註冊網域名稱。 -
path:指定訪問的URL路徑。CLB將流量轉寄到backend之前,所有的入站請求都要先匹配host和path。本樣本為/coffee和/tea。 -
backend:由服務名稱和服務連接埠組成。-
服務名稱:Ingress轉寄的backend服務名稱。本樣本為
coffee-svc和tea-svc。 -
服務連接埠:服務暴露的連接埠。本樣本為
80。
-
-
-
建立Ingress。
kubectl apply -f test-ingress.yaml -
查看Ingress並擷取Elastic IP Address,如
8.xxx.xxx.117。kubectl get ingress預期輸出:
NAME CLASS HOSTS ADDRESS PORTS AGE test-nginx-ingress nginx test-nginx-ingress.com,www.test-nginx-ingress.com 8.xxx.xxx.117 80 2m39s -
請使用實際擷取的Elastic IP Address,驗證Nginx Ingress是否生效。
curl http://8.xxx.xxx.117/coffee -H "Host: test-nginx-ingress.com"預期輸出:
... <title>Hello World</title> ... <p><span>Server address:</span> <span>10.xxx.xxx.19:80</span></p> <p><span>Server name:</span> <span>coffee-96d4bc87-l29dh</span></p> <p class="smaller"><span>Date:</span> <span>08/Aug/2025:02:21:02 +0000</span></p> <p class="smaller"><span>URI:</span> <span>/coffee</span></p> ... <div id="footer"> <div id="center" align="center"> Request ID: 42e2d73c85b16b55b6ab52deb7d995d4<br/> © NGINX, Inc. 2018 </div> </div> ...
佈建網域名解析
註冊網域名稱。添加網域名稱的操作僅適用於非阿里雲註冊網域名稱。若通過阿里雲網域名稱註冊購買的網域名稱,會自動同步到DNS公網權威解析列表,可直接添加解析記錄。
|
1. 添加網域名稱
|
|
2. 添加解析記錄
更多詳細內容,請參見添加網站解析。 |
|
3. 驗證網域名稱和路徑生效 在瀏覽器中訪問 若訪問成功,頁面將返回 NGINX 後端 Pod 資訊,包括 Server address、Server name、Date 及 URI 欄位。 還可參考解析生效測試方法進行確認,如發現解析不生效,可參考解析不生效問題快速排查。 |
配置HTTPS安全加密(TLS配置)
購買正式認證,並完成申請認證,確認待使用的認證處於已簽發狀態。然後參考以下步驟下載認證並添加TLS配置,從而實現通過HTTPS加密通訊的方式訪問網域名稱。
控制台
|
1. 下載認證
更多詳細內容,請參見下載SSL認證。 |
|
2. 建立保密字典
|
|
3. 添加TLS配置
|
|
4. 驗證HTTPS訪問 在瀏覽器中訪問 |
kubectl
-
登入數位憑證管理服務控制台。在左側導覽列,選擇。
-
在正式認證頁簽,選中需要下載的認證,在認證列表左下方單擊下載。
-
在彈出的對話方塊,選擇Nginx伺服器類型下載認證包並解壓。
-
使用已下載的認證檔案(.pem)和認證私密金鑰檔案(.key)建立保密字典。
kubectl create secret tls nginx-ingress-tls --cert test-nginx-ingress.com.pem --key test-nginx-ingress.com.key -n default -
為
test-nginx-ingress路由添加TLS配置。請將命令中的test-nginx-ingress.com替換為實際註冊網域名稱。kubectl patch ingress test-nginx-ingress -p '{"spec":{"tls":[{"hosts":["test-nginx-ingress.com"],"secretName":"nginx-ingress-tls"}]}}' -
請使用實際的Elastic IP Address,驗證通過HTTPS加密通訊的方式訪問網域名稱及業務路徑生效。
curl -v -k https://8.xxx.xxx.117/coffee -H "Host: test-nginx-ingress.com"-
參數說明:
-
-v:顯示詳細的通訊過程,包括TLS握手資訊等。 -
-k(或 --insecure):若使用自我簽署憑證可以忽略認證驗證。
-
-
預期輸出:
... * Trying 8.xxx.xxx.117:443... * Connected to 8.xxx.xxx.117 (8.xxx.xxx.117) port 443 * ALPN: curl offers h2,http/1.1 * (304) (OUT), TLS handshake, Client hello (1): * (304) (IN), TLS handshake, Server hello (2): * (304) (IN), TLS handshake, Unknown (8): * (304) (IN), TLS handshake, Certificate (11): * (304) (IN), TLS handshake, CERT verify (15): * (304) (IN), TLS handshake, Finished (20): * (304) (OUT), TLS handshake, Finished (20): ... <title>Hello World</title> ... <p><span>Server address:</span> <span>10.xxx.xxx.159:80</span></p> <p><span>Server name:</span> <span>coffee-96d4bc87-6cstv</span></p> <p class="smaller"><span>Date:</span> <span>14/Aug/2025:09:27:42 +0000</span></p> <p class="smaller"><span>URI:</span> <span>/coffee</span></p> ... <div id="footer"> <div id="center" align="center"> Request ID: fee5fe107106748a35d99a2dbbbc6652<br/> © NGINX, Inc. 2018 </div> </div> ...
-
更多配置
灰階發布
當對服務進行版本更新升級時,需要使用到滾動升級、分批暫停發布、藍綠髮布以及灰階發布等發布方式。詳細操作,請參見通過Nginx Ingress實現灰階發布和藍綠髮布。
後端服務合約
指定後端服務的協議,設定後會添加註解nginx.ingress.kubernetes.io/backend-protocol。支援HTTP、HTTPS、gRPC、gRPCS四種服務合約。配置樣本,請參見為Nginx Ingress配置gRPC服務。
重寫路徑
當您在使用Nginx Ingress Controller的時候,Nginx會將路徑完整轉寄到後端(如,從Ingress訪問的/service1/api路徑會直接轉寄到後端Pod的/service1/api路徑)。如果您後端的服務路徑為/api,則會出現路徑錯誤,導致404的情況。該情況下,您可以通過配置nginx.ingress.kubernetes.io/rewrite-target的方式,來將路徑重寫至需要的目錄。
詳細操作,請參見配置URL重新導向的路由服務。
添加註解
Nginx Ingress支援通過添加註解(Annotations)來啟用更多功能。詳細操作,請參見Nginx Ingress配置詞典和Nginx Ingress進階用法。
可觀測性
在建立叢集時啟用Log Service,然後在阿里雲Log ServiceSLS查看Nginx Ingress的訪問日誌分析報表和監控Nginx Ingress即時狀態。相關內容,請參見採集與分析 Nginx Ingress 訪問日誌。
高負載情境
關於如何提升Nginx Ingress Controller高負載情境下的效能和穩定性,請參見配置高負載情境的Nginx Ingress Controller和Nginx Ingress Controller使用建議。
常見問題
為什麼從叢集內訪問叢集LoadBalancer的外部地址不通?
如何支援用戶端Header或者Cookie過大的請求?
Nginx Ingress如何配置跨域?
如何配置透傳用戶端IP?
相關文檔
-
關於Nginx Ingress Controller組件的版本和變更記錄,請參見Nginx Ingress Controller組件。
-
關於更多常見問題和異常排查方法,請參見Nginx Ingress FAQ和Nginx Ingress異常問題排查。