謹慎
Kubernetes SIG 網路與安全回應委員會宣布 Ingress NGINX 專案即將退休,維護將於 2026 年 3 月結束。 目前使用 NGINX 應用程式路由外掛的 AKS 叢集目前不需要立即採取行動。 Microsoft 將為應用程式路由附加 NGINX Ingress 資源提供關鍵安全修補程式的官方支援,支援至 2026 年 11 月。
AKS 正與上游 Kubernetes 對齊,將 Gateway API 作為入口和 L7 流量管理的長期標準。 我們建議您根據目前的設定開始規劃遷移路徑:
- 應用程式路由附加元件使用者:生產工作負載將完全支援至 2026 年 11 月。 遷移至 應用路由閘道 API 實作 ,以獲得基於閘道 API 的入口流量管理體驗。
-
OSS NGINX 使用者 有多種選擇:
- 在規劃長期閘道 API 遷移期間,請遷移至 NGINX 的應用程式路由外掛 ,享受官方支援至 2026 年 11 月。
- 遷移至 應用路由閘道 API 實作 ,以獲得基於閘道 API 的入口流量管理體驗。
- 遷移至 Application Gateway for Containers,該平台同時支援 Ingress API 與閘道 API。
- 服務網狀或進階入口需求:考慮 使用 Istio 服務網狀外掛的閘道 API 入口。 你可以將它用於 Ingress,而無需將 Sidecar 容器注入到你的工作負載內。 如果你需要請求標頭和主體大小限制、Lua 腳本或速率限制,請參考 Gateway API 的限制與替代方案。
應用程式路由外掛支援 Kubernetes Gateway API 進行流量入口管理。 Kubernetes Gateway API 是一組資源,提供標準化、角色導向且可擴充的流量管理框架,旨在成為 Ingress API 的後繼與演進。 因此,應用程式路由閘道 API 實作旨在作為 管理式 NGINX 附加元件的繼任者,該附加元件基於舊有的 Ingress API,並將於 2026 年 11 月後停止從 Azure 獲得 Azure 支援。 如果您使用的是受管理的 NGINX,必須在 2026 年 11 月前遷移到應用程式路由閘道 API 實作或其他支援的實作。
對於生產工作負載,此型號是 AKS Automatic 推薦的預設入口模型。 從 AKS 1.36 版本開始,新的 AKS 自動叢集預設透過應用程式路由外掛使用 Kubernetes Gateway API。 如需了解 AKS Automatic 生產預設值的背景資訊,請參閱 什麼是 Azure Kubernetes Service (AKS) Automatic?
與 Istio 服務網狀外掛的比較
應用程式路由附加元件 Kubernetes Gateway API 實作部署了 Istio 控制平面來管理 Kubernetes Gateway API 資源的基礎設施。 然而,它與 AKS 的 Istio 服務網狀外掛 有以下差異:
| Feature | 應用路由閘道 API | Istio服務網格附加元件 |
|---|---|---|
| Gateway 類別名稱 | approuting-istio |
istio |
| Sidecar 插入與 Istio CRD 支援 | 不支援。 只管理 Kubernetes Gateway API 資源的基礎設施 | 支援 |
| 修訂與升級 | 沒有修訂。 次要版本和修補程式版本更新都可就地升級 | 修訂過。 次要版本更新透過 Canary 升級,修補程式版本更新則採就地升級 |
何時在生產環境中使用應用程式路由閘道 API
當你想要下列效果時,請使用此實作作為預設輸入路徑:
- AKS Automatic 上預設提供可用於正式環境的受控輸入。
- 原生支援 Kubernetes Gateway API 的 HTTP/HTTPS 輸入。
- 受管理的閘道基礎架構,內建營運防護機制,例如閘道代理程式的自動擴縮與中斷預算設定。
當您需要本文目前支援以外的功能時,請考慮替代方案,例如:
- 服務網格流量管理。
- 功能列表列於 限制中。
局限性
你無法透過這個實作設定請求標頭和主體大小限制、Lua 腳本,或本地和全域速率限制。 Gateway API 沒有這些功能的標準欄位,且 App Routing Gateway API 實作不支援
EnvoyFilter。如果你在從 ingress-nginx 遷移時需要這些功能,可以考慮 使用 Gateway API ingress 搭配 Istio 服務網狀外掛。 你可以使用
Gateway、HTTPRoute和其他 Gateway API 資源,而無須將 Sidecar 容器注入工作負載中,並套用閘道層級的EnvoyFilter來對其進行設定。 由EnvoyFilter設定所造成的問題均不在 Azure 支援範圍內。 如果你選擇 Istio 服務網狀附加元件,即使是僅用於入口,也必須啟動並完成小幅修訂的 金絲雀升級 。針對每個用來替代 nginx 註解或程式碼片段的方案,都要對照你的 Istio 修訂版本進行測試。 例如, Envoy 的緩衝區過濾器 會透過在轉發前將完整請求實體保留在記憶體中,強制執行實體大小限制。 它不會溢出到磁碟。
你無法同時啟用應用程式路由閘道 API 實作和 Istio 服務網狀外掛 。 你必須先停用其中一台,然後在另一個操作中啟用另一台。 從 Istio 服務網狀外掛轉換到應用路由閘道 API 實作時,必須在停用 Istio 外掛後刪除 Istio GatewayClass 和 Istio CRD。 Istio 附加元件會安裝 CRD(例如
virtualservices.networking.istio.io、destinationrules.networking.istio.io,以及networking.istio.io、security.istio.io、telemetry.istio.io和extensions.istio.ioAPI 群組中的其他 CRD),停用該附加元件時,這些 CRD 不會被移除。 若這些 CRD 仍留在叢集上,應用程式路由閘道 API Istio 控制平面將無法啟動。 執行以下指令刪除它們:kubectl delete crd $(kubectl get crd -o name | grep -E 'istio\.io') kubectl delete gatewayclass istio備註
如果你已有 Istio 自訂資源(例如 VirtualServices 或 DestinationRules),刪除 CRD 也會同時刪除那些資源。 在繼續之前,請確定你不再需要它們。
應用程式路由閘道 API 實作使用與 Istio 外掛相同的資源自訂允許清單來驗證 ConfigMap 資源自訂。
Gateway由附加元件管理的 Webhook 會封鎖不在允許清單上的自訂項目。不支援透過應用程式路由閘道 API 實作進行出口流量管理。
官方並不支援將非 Microsoft 管理的側車 (例如自訂遙測、記錄功能或安全性代理程式) 注入由應用程式路由外掛程式管理的 Istio 閘道 Proxy Pod。 如果您選擇將自己的側車注入受控 Proxy Pod 中,Microsoft 對於您遇到的任何問題,只能盡力支援。
預設會在 Gateway Proxy Pod 上啟用 Envoy 存取記錄,但無法透過 Istio
TelemetryAPI 自訂記錄格式、範圍和提供者。 若要進行自訂,請改為在 Istio 服務網格附加元件 上使用 Gateway API ingress。
先決條件
更新 Azure CLI 版本
您必須使用 azure-cli 版本 2.86.0 或更高版本。 執行 az --version 查找 azure-cli 版本,然後執行 az upgrade 來升級。
啟用託管閘道 API CRD
啟用 管理閘道 API 安裝。 不支援將自我管理的 Gateway API CRD 與應用程式路由附加元件一起使用。
AKS 自動預設行為(AKS 1.36 及更新版本)
在運行 AKS 1.36 或更新版本的新 AKS Automatic 叢集中,透過應用程式路由外掛預設啟用 Kubernetes Gateway API。
你通常不需要執行功能啟用命令,除非你是:
- 使用現有的叢集。
- 我用的是較早期的 AKS 版本。
- 關閉後重新啟用該功能。
啟用應用程式路由閘道 API 實作
備註
如果你在 AKS 1.36 或更新版本上建立新的 AKS 自動叢集,這個功能預設是啟用的。 請使用本節的指令,適用於 AKS Standard 叢集、早期版本,或尚未啟用此功能的現有叢集。
在叢集建立時啟用
在建立 AKS Standard 叢集時,執行以下指令以啟用應用程式路由閘道 API 實作:
# Set environment variables
export CLUSTER=<cluster-name>
export RESOURCE_GROUP=<resource-group-name>
# Enable the application routing Gateway API implementation during AKS Standard cluster creation
az aks create --resource-group ${RESOURCE_GROUP} --name ${CLUSTER} --enable-gateway-api --enable-app-routing-istio
啟用現有叢集
執行以下指令以啟用現有叢集的應用程式路由閘道 API 實作:
# Set environment variables
export CLUSTER=<cluster-name>
export RESOURCE_GROUP=<resource-group-name>
# Enable the application routing Gateway API implementation for an existing cluster
az aks update --resource-group ${RESOURCE_GROUP} --name ${CLUSTER} --enable-gateway-api --enable-app-routing-istio
您應該會在 istiod 命名空間中看到 aks-istio-system Pod:
kubectl get pods -n aks-istio-system
NAME READY STATUS RESTARTS AGE
istiod-12a3bc45de-fghi6 1/1 Running 0 3m15s
istiod-78j9kl01mn-opqrs 1/1 Running 0 3m
您也應該會看到已部署 ValidatingWebhookConfiguration:
kubectl get validatingwebhookconfiguration
NAME WEBHOOKS AGE
aks-node-validating-webhook 1 117m
azure-service-mesh-ccp-validating-webhook 1 4m2s
如果你啟用了 Managed Gateway API Installation,你也會看到 Istio 閘道自訂 ConfigMap 被建立。
kubectl get cm -n aks-istio-system
NAME DATA AGE
...
istio-gateway-class-defaults 2 43s
...
使用 Kubernetes 閘道設定入口
部署範例應用程式
首先,在httpbin命名空間中部署範例default應用程式。
export ISTIO_RELEASE="release-1.27"
kubectl apply -f https://raw.githubusercontent.com/istio/istio/$ISTIO_RELEASE/samples/httpbin/httpbin.yaml
建立 Kubernetes 閘道和 HTTP 路由
接下來,在命名空間中 default 部署閘道 API 組態,並將設定 gatewayClassName 為 approuting-istio。
kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: httpbin-gateway
spec:
gatewayClassName: approuting-istio
listeners:
- name: http
port: 80
protocol: HTTP
allowedRoutes:
namespaces:
from: Same
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: httpbin
spec:
parentRefs:
- name: httpbin-gateway
hostnames: ["httpbin.example.com"]
rules:
- matches:
- path:
type: PathPrefix
value: /get
backendRefs:
- name: httpbin
port: 8000
EOF
備註
預設情況下,Istio 控制平面會將 GatewayClass 名稱 approuting-istio 附加到它所提供的 Gateway資源名稱後面。 您可以使用 Gateway 註解您的 gateway.istio.io/name-override 資源,以覆寫已佈建資源的名稱。 資源名稱必須小於 63 字元,且必須是有效的 DNS 名稱。
驗證是否已為 Deployment 建立 Service、HorizontalPodAutoscaler、PodDisruptionBudget 和 httpbin-gateway:
kubectl get deployment httpbin-gateway-approuting-istio
NAME READY UP-TO-DATE AVAILABLE AGE
httpbin-gateway-approuting-istio 2/2 2 2 6m41s
kubectl get service httpbin-gateway-approuting-istio
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
httpbin-gateway-approuting-istio LoadBalancer 10.0.54.96 <external-ip> 15021:30580/TCP,80:32693/TCP 7m13s
kubectl get hpa httpbin-gateway-approuting-istio
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
httpbin-gateway-approuting-istio Deployment/httpbin-gateway-approuting-istio cpu: 3%/80% 2 5 2 8m13s
kubectl get pdb httpbin-gateway-approuting-istio
NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGE
httpbin-gateway-approuting-istio 1 N/A 1 9m1s
傳送請求至範例應用程式
最後,嘗試向應用程式發送curlhttpbin請求。 首先,設定 INGRESS_HOST 環境變數:
kubectl wait --for=condition=programmed gateways.gateway.networking.k8s.io httpbin-gateway
export INGRESS_HOST=$(kubectl get gateways.gateway.networking.k8s.io httpbin-gateway -ojsonpath='{.status.addresses[0].value}')
然後,嘗試將 HTTP 請求傳送至 httpbin:
curl -s -I -HHost:httpbin.example.com "http://$INGRESS_HOST/get"
您應該會看到回應 HTTP 200 。
備註
若要使用應用程式路由 Gateway API 實作來保護輸入流量,並整合 Azure DNS 以管理主機名稱,請參閱 使用應用程式路由 Gateway API 實作設定 Azure DNS 和 TLS,以了解由應用程式路由操作員支援的自動化工作流程。 如需不依賴操作員整合的手動 TLS 終止工作流程,請參閱 使用應用程式路由閘道 API 實作保護傳入流量。
要使用 Terraform 建立一個啟用應用程式路由閘道 API 實作的 AKS 叢集,你需要:
- 已安裝 Terraform 版本
1.9.0或更新版本。 - 已安裝並驗證 Azure CLI。 執行
az --version查找azure-cli版本,然後執行az upgrade來升級。 在 Terraform 建立叢集後,你會使用 Azure CLI 連線到該叢集。 -
Kubectl 已安裝。 你可以用指令
az aks install-cli在本地安裝。 你用kubectl來部署範例應用程式和閘道 API 資源。
使用 Terraform 部署帶有應用程式路由閘道 API 實作的 AKS 叢集
本節說明如何使用 Terraform 部署 AKS 叢集,並啟用 Managed Gateway API 安裝及應用程式路由 Gateway API 實作。
備註
本節的範例程式碼位於 Azure Terraform GitHub 倉庫中。 您可以查看包含目前及先前版本的 Terraform 測試結果的日誌檔。
此範例會部署:
- 資源群組。
- 一個使用 Azure CNI 網路外掛和標準負載平衡器的 AKS 叢集。
- Managed Gateway API 安裝與應用程式路由 Gateway API 實作,皆透過 AzAPI 提供者在叢集上啟用。 啟用這兩個設定後,AKS 管理
approuting-istio的 GatewayClass 會被叢集存取。
建立一個目錄來測試並執行範例 Terraform 程式碼,並將其設為目前的目錄。
建立名為
main.tf的檔案,並插入下列程序代碼:terraform { required_version = ">= 1.9.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } azapi = { source = "Azure/azapi" version = "~> 2.0" } random = { source = "hashicorp/random" version = "~> 3.0" } } } provider "azurerm" { features {} } provider "azapi" { enable_preflight = true } resource "random_string" "suffix" { length = 6 upper = false special = false } locals { location = "eastus" resource_group_name = "rg-aks-gateway-api-${random_string.suffix.result}" cluster_name = "aks-gwapi-${random_string.suffix.result}" } resource "azurerm_resource_group" "example" { name = local.resource_group_name location = local.location } resource "azurerm_kubernetes_cluster" "example" { name = local.cluster_name location = azurerm_resource_group.example.location resource_group_name = azurerm_resource_group.example.name dns_prefix = local.cluster_name role_based_access_control_enabled = true default_node_pool { name = "system" node_count = 2 vm_size = "Standard_D4s_v4" upgrade_settings { drain_timeout_in_minutes = 0 max_surge = "10%" node_soak_duration_in_minutes = 0 } } identity { type = "SystemAssigned" } network_profile { network_plugin = "azure" load_balancer_sku = "standard" } } resource "azapi_update_resource" "gateway_api_app_routing" { type = "Microsoft.ContainerService/managedClusters@2026-03-01" resource_id = azurerm_kubernetes_cluster.example.id body = { properties = { ingressProfile = { gatewayAPI = { installation = "Standard" } webAppRouting = { gatewayAPIImplementations = { appRoutingIstio = { mode = "Enabled" } } } } } } response_export_values = [ "properties.ingressProfile" ] depends_on = [ azurerm_kubernetes_cluster.example ] } output "resource_group_name" { value = azurerm_resource_group.example.name } output "cluster_name" { value = azurerm_kubernetes_cluster.example.name } output "get_credentials_command" { value = "az aks get-credentials --resource-group ${azurerm_resource_group.example.name} --name ${azurerm_kubernetes_cluster.example.name} --overwrite-existing" }透過執行
terraform init指令來初始化 Terraform。 此指令會下載使用 Terraform 管理 Azure 資源所需的 Azure 提供程式。terraform init透過執行
terraform fmtandterraform validate指令來格式化並驗證設定。terraform fmt terraform validate透過執行
terraform plan指令建立 Terraform 執行計畫。 這個指令會顯示 Terraform 在你的 Azure 訂閱中所建立或修改的資源。terraform plan執行
terraform apply指令以套用 Terraform 執行計畫。 這個指令會建立你 Azure 訂閱中檔案中定義的main.tf資源。 出現提示時,請輸入yes以進行確認。terraform apply
使用 Terraform 連接 AKS 叢集
從 Terraform 輸出取得資源群組和叢集名稱。
terraform output -raw resource_group_name terraform output -raw cluster_name使用
kubectl指令設定az aks get-credentials以連線至你的叢集。 此命令會下載認證,並設定 Kubernetes CLI 來使用這些認證。 以先前步驟中的值取代<resource-group-name>和<cluster-name>。 或者,執行terraform output -raw get_credentials_command即可取得完整且可直接執行的指令。az aks get-credentials --resource-group <resource-group-name> --name <cluster-name>透過執行
kubectl get nodes指令確認叢集是否在運作。kubectl get nodes
請使用 Terraform 驗證閘道 API 設定
確認
istiodpods 是否在aks-istio-system命名空間中運行。kubectl get pods -n aks-istio-system確認
approuting-istioGatewayClass 是否存在且被接受。kubectl get gatewayclassapprouting-istioGatewayClass 應該在ACCEPTED欄中傳回True。
透過使用 Kubernetes 閘道器搭配 Terraform 來設定 Ingress
使用 Terraform 部署範例應用程式
在命名空間中部署範例 httpbin 應用程式 default :
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.27/samples/httpbin/httpbin.yaml
確認 httpbin 該艙和服務是否可用:
kubectl get pods -l app=httpbin
kubectl get svc httpbin
使用 Terraform 建立閘道器與 HTTPRoute 資源
應用程式路由閘道 API 實作範例包含一個 Gateway 清單,在 80 埠建立 HTTP 監聽器,並使用 AKS 管理 approuting-istio 的 GatewayClass。
建立名為
gateway.yaml的檔案,並插入下列程序代碼:apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: httpbin-gateway spec: gatewayClassName: approuting-istio listeners: - name: http port: 80 protocol: HTTP allowedRoutes: namespaces: from: Same套用以下
Gateway配置:kubectl apply -f gateway.yaml範例中還包含一個
HTTPRoute資訊清單,將對httpbin.example.com/get的請求路由至連接埠httpbin上的8000服務。建立名為
httproute.yaml的檔案,並插入下列程序代碼:apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: httpbin spec: parentRefs: - name: httpbin-gateway hostnames: - httpbin.example.com rules: - matches: - path: type: PathPrefix value: /get backendRefs: - name: httpbin port: 8000套用以下
HTTPRoute配置:kubectl apply -f httproute.yaml
驗證是否已為 Deployment 建立 Service、HorizontalPodAutoscaler、PodDisruptionBudget 和 httpbin-gateway:
kubectl get deployment httpbin-gateway-approuting-istio
kubectl get service httpbin-gateway-approuting-istio
kubectl get hpa httpbin-gateway-approuting-istio
kubectl get pdb httpbin-gateway-approuting-istio
使用 Terraform 向範例應用程式發送請求
等待閘道器回報 Programmed 狀態,然後取得其外部位址:
kubectl wait --for=condition=programmed gateways.gateway.networking.k8s.io httpbin-gateway
export INGRESS_HOST=$(kubectl get gateways.gateway.networking.k8s.io httpbin-gateway -ojsonpath='{.status.addresses[0].value}')
接著,透過閘道器向 發送請求:httpbin
curl -s -I -HHost:httpbin.example.com "http://$INGRESS_HOST/get"
您應該會看到回應 HTTP 200 。
存取記錄
應用程式路由 Gateway API 實作預設會在所有受管理的 Gateway Proxy Pod 上啟用 Envoy 存取記錄功能。 存取日誌會以預設的 Envoy 文字格式寫入代理容器的標準輸出。 您可以使用以下 kubectl logs工具查看日誌:
kubectl logs deployment/<your-gateway-name>-approuting-istio
閘道處理的每個請求都會產生一個日誌行,包含 HTTP 方法、路徑、回應碼、上游服務,以及請求與回應大小等細節。 此細節使得觀察入口流量及排查路由問題變得更容易,無需額外設定。
版本與升級
應用程式路由 Gateway API 實作會根據 AKS 叢集的 Kubernetes 版本,在進行次要版本與修補版本升級時部署並升級 Istio 控制平面。 此原地模式與 AKS 自動生產預設相符,該平台生命週期管理旨在減少手動操作。
Istio 版本是支援最多且與你叢集 AKS 版本相容的 Istio 次要版本。 舉例來說,如果你使用的是 AKS 版本 1.34,截至 2026 年 3 月,最大支援的 Istio 次要版本是 1.28。 請注意,某個 Kubernetes 版本所支援的最大 Istio 版本,在 Long-Term 支援(LTS)叢集 與非 LTS 叢集之間可能有所不同。
若要找出您的 AKS Kubernetes 版本所支援的最高 Istio 次要版本,請參閱 服務網格附加元件版本發行行事曆。 雖然應用程式路由閘道 API 實作未被修訂,但 Istio 控制平面的次要版本對應於給定的服務網狀外掛版本(例如:對於服務網狀外掛 asm-1-28,應用程式路由 Istio 控制平面的次要版本為 1.28)。 您也可以透過檢查 istiod 部署映像檔中的修補版本來查看 Istio 的次要版本:
kubectl get deployment istiod -n aks-istio-system -o=jsonpath="{.spec.template.spec.containers[*].image}"
升級
應用程式路由 Gateway API 實作中的 Istio 控制平面,其修補版本與次要版本升級皆為原地進行。 補丁版本升級會在 AKS 版本發布時自動觸發。 次要版本升級可依 AKS Kubernetes 版本及 Istio 次要版本發布時機自動或手動觸發。 次要版本升級通常發生於以下情境:
- AKS 叢集已升級至新版本,該版本針對其所支援的 Istio 最高版本進行鎖定,且該版本較高。 Istio 控制平面升級為較高次級版本,作為 AKS 叢集升級的一部分。
- 為 AKS 釋出了新的 Istio 版本,成為 AKS 叢集版本中最大支援的 Istio 版本。 在功能推出至您的區域後,叢集上的 Istio 控制平面會自動升級至新的次要版本。 要追蹤 Istio 新版本的發布並查看新版本何時推送到你的地區,請參考 AKS 發布說明 和 AKS 發布追蹤器。
升級過程中可能會發生交通中斷。 為了在升級期間將中斷降至最低,應用程式路由附加元件會為每個 Gateway 部署具備兩個最小複本的水平 Pod 自動調整器 (HPA),以及最低可用性為一個的 PodDisruptionBudget (PDB)。 你可以 自訂這些資源 來修改這些設定。
資源自訂
控制平面 Horizontal Pod Autoscaling (HPA) 自訂
應用程式路由 Gateway API 實作支援自訂 Istio 控制平面的 Horizontal Pod Autoscaler (HPA)。
istiod HPA 資源有以下預設配置:
- 最少複製品:兩台
- 最多複製品:五
- CPU 使用率:80%
備註
為避免與 PodDisruptionBudget衝突,應用路由閘道 API 實作不允許將 minReplicas 設定為低於初始預設 2值的 。
HPA 配置可透過修補程式與直接編輯進行修改。 範例:
kubectl patch hpa istiod -n aks-istio-system --type merge --patch '{"spec": {"minReplicas": 3, "maxReplicas": 6}}'
閘道資源自訂
應用程式路由閘道 API 實作支援透過註解與 ConfigMaps 自訂 Gateway 資源。 應用程式路由使用與 Istio 服務網狀外掛相同的資源自訂允許清單,用於閘道 API 資源自訂。 依照 Istio 增益集 Gateway API 文件中的步驟,設定為 Gateways 產生的資源,並查看哪些欄位屬於允許清單。
備註
istio-gateway-class-defaults當管理閘道 API CRD 與應用路由閘道 API 實作同時啟用時,AKS 會配置並調和 ConfigMap。 如果你之前自行在 istio-gateway-class-defaults 命名空間中建立 aks-istio-system ConfigMap,則必須在啟用 Managed Gateway API CRD 前刪除自行管理的 ConfigMap 實例,以避免與 AKS 管理的 ConfigMap 的對帳衝突。
備註
應用程式路由 Gateway API 實作會將 Azure Load Balancer 註解新增至 Gateway 服務,以針對 externalTrafficPolicy 的預設設定「Cluster」設定健全狀態探查。如果您將 spec.externalTrafficPolicy 設為「Local」,則必須在 GatewayClass 層級 ConfigMap 或每個 Gateway 的 ConfigMap 中取消設定下列註解:
service: |
spec:
externalTrafficPolicy: Local
metadata:
annotations:
service.beta.kubernetes.io/port_80_health-probe_port:
service.beta.kubernetes.io/port_80_health-probe_protocol:
service.beta.kubernetes.io/port_80_health-probe_request-path:
停用應用程式路由閘道 API 實作
執行以下指令以停用應用程式路由閘道 API 實作:
az aks update --resource-group ${RESOURCE_GROUP} --name ${CLUSTER} --disable-app-routing-istio
清理資源
執行以下指令刪除 Gateway 和 HTTPRoute 資源:
kubectl delete gateways.gateway.networking.k8s.io httpbin-gateway
kubectl delete httproute httpbin
如果您已建立 ConfigMap 來自訂您的Gateway,請執行以下指令來刪除該 ConfigMap:
kubectl delete configmap gw-options
如果你建立了 SecretProviderClass 和 secret 來用於 TLS 終止,請刪除以下資源:
kubectl delete secret httpbin-credential
kubectl delete pod secrets-store-sync-httpbin
kubectl delete secretproviderclass httpbin-credential-spc
利用 Terraform 清理資源
在本節中,你部署了一個以命名空間為範疇的範例應用程式和閘道 API 資源。 如果你不再需要這些 Kubernetes 資源,請在移除底層 Azure 基礎設施前刪除它們。
使用以下指令刪除 HTTPRoute、 Gateway和範例應用程式 kubectl delete :
kubectl delete -f httproute.yaml
kubectl delete -f gateway.yaml
kubectl delete -f https://raw.githubusercontent.com/istio/istio/release-1.27/samples/httpbin/httpbin.yaml
Warning
以下指令會移除資源群組、AKS 叢集,以及所有與本樣本建立的資源群組相關的其他資源。 如果你在這個資源群組內部署了其他資源,指令也會刪除它們。
請使用 指令terraform destroy移除 Terraform 建立的 Azure 資源。 當系統提示時,請輸入 yes 以確認。
terraform destroy