Nginx Ingress作為ACK託管叢集中的流量入口網關,通過靈活的路由規則將外部請求精確轉寄至內部服務。配合使用HTTPS安全加密、灰階發布、通過註解自訂配置等能力,Nginx Ingress可以滿足安全、高可用、可擴充的L7層網路訪問需求。
因傳統型負載平衡CLB按規格計費停止售賣,Container Service for Kubernetes自2025年08月28日起,通過控制台新安裝Nginx Ingress Controller時,將預設使用NLB執行個體,CLB執行個體轉為白名單開放;對於仍需建立CLB的情境,將預設使用按使用量計費模式。詳細內容,請參見【產品變更】關於建立Service與Nginx Ingress Controller預設負載平衡類型與計費方式變更的公告。
注意事項
請勿刪除Nginx Ingress Controller預設使用的服務。安裝組件後將預設建立
kube-system命名空間下的nginx-ingress-lb服務,將其刪除將會導致組件運行不穩定,嚴重時會出現崩潰。請通過組件管理或者OpenAPI方式配置組件的自訂參數。通過其他渠道修改組件配置可能會導致組件功能異常,且會影響組件後續的升級過程。
請優先使用Nginx Ingress配置詞典來實現所需功能。若使用Snippet或Lua代碼等方式對組件進行額外配置,所出現的與預期功能不符等問題無法得到支援人員。
請及時升級Nginx Ingress Controller組件,以避免上遊社區版組件的Bug或漏洞導致業務受損。
前提條件
已安裝Nginx Ingress Controller組件。安裝完成後,組件將關聯一個傳統型負載平衡 CLB執行個體作為Nginx Ingress的流量入口。
已註冊網域名稱。
建立樣本應用
樣本應用將部署兩個名稱分別為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. 驗證網域名稱和路徑生效 在瀏覽器中訪問 還可參考解析生效測試方法進行確認,如發現解析不生效,可參考解析不生效問題快速排查。 |
|
配置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 Controller後端部署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異常問題排查。













