AppScan 360° 的升級路徑:輸入至 Gateway API
概觀
從傳統的 Kubernetes 輸入設定移轉到基於閘道器的模型(例如 Istio Gateway API)提供了更強大的路由彈性、對多叢集 / 多協定流量的原生支援,以及與服務網格功能的卓越整合。
本說明文件概述了根據叢集類型、負載平衡器可用性和營運需求所推薦的移轉策略。
1.升級策略
方法 A:徹底重裝升級
-
實務範例:任何工作負載都不再需要輸入。
程序:1.移除現有的輸入控制器。
2.使用負載平衡器(MetalLB 或 SLVLB)在預設埠 (80/443) 上部署閘道器控制器。
3.驗證服務是否配置了正確的外部 IP。
方法 B:次要 / 共存方法
-
實務範例:現有工作負載仍依賴於傳統的輸入控制器。
-
程序:
- 保留輸入控制器。
- 在自訂埠上部署閘道器控制器以避免衝突。
- 規劃在移轉通過驗證後,最終將輸入移除。
2.部署實務(共存方法)
實務 1:以部署為輸入的闡道器
-
環境定義:叢集目前將輸入控制器作為標準部署來執行。
-
方法:將閘道器控制器(Istio Gateway API)部署為獨立的部署,並使用 MetalLB 來提供外部 IP 池。
-
優點:允許共存;透過 MetalLB 簡化路由。
-
缺點:需要小心管理埠(避免 80/443 衝突)。
實務 2:附帶 SLVLB (Klipper) 的 K3s 上的閘道器
-
環境定義:啓用了服務負載平衡器 (Klipper) 的 K3s 環境。
-
方法:安裝閘道器控制器並將服務類型設定為
LoadBalancer。SLVLB 會自動指派節點 IP。 -
優點:最小配置;K3s 開箱即用。
-
缺點:IP 指派是動態的;需要節點埠的防火牆規則。
3.自訂埠配置(共存模式)
當現有的輸入控制器占用埠 80 和 443 時,ASCP 建立的閘道器必須配置自訂接聽器埠。
可透過以下方式進行配置 singular-singular.clusterkit.yaml
閘道器接聽器可以使用 YAML 配置中的自訂埠來進行定義。
可透過以下方式進行配置 singular-singular.clusterkit.properties
以下屬性定義了自訂接聽器埠:
-
CK_GATEWAY_TLS_PASSTHROUGH_LISTENER_PORT_NUMBER: 客戶指定的 K8s TLS passthrough 埠。
CK_GATEWAY_HTTPS_LISTENER_PORT_NUMBER: 客戶指定的 K8s HTTPS 埠。
CK_GATEWAY_HTTP_LISTENER_PORT_NUMBER: 客戶指定的 K8s HTTP 埠。
4.策略比較矩陣
| Approach | 叢集類型 | 負載平衡程式 | 優點 | 缺點 |
|---|---|---|---|---|
| 附帶 SLVLB 的 K3s | K3s | SLVLB | 最低配置;自動 IP 指派 | 動態 IP;需要節點存取 |
| 共存性 | 任何 | 任何 | 零中斷;逐步移轉 | 需要自訂埠 |
| 徹底重裝方法 | 任何 | 建議 | 最簡單的架構;預設埠 | 需要移除輸入 |
| 閘道器 + MetalLB | 任何 | MetalLB | 受控 IP 指派 | 需要 MetalLB 設定 |
5.必要的闡道器屬性
CK_GATEWAY_CLASS_NAME='<GATEWAY_CLASS_NAME>'
CK_GATEWAY_PRIVATE_HOST_DOMAIN='<AS360_DOMAIN>'
CK_GATEWAY_PRIVATE_HOST_SUBDOMAIN='<AS360_SUBDOMAIN>'
6.安裝程序 (Istio Gateway)
步驟 1:安裝 Gateway API CRD
GATEWAY_API_VERSION="v1.4.0"
kubectl apply -f
https://github.com/kubernetes-sigs/gateway-api/releases/download/${G
ATEWAY_API_VERSION}/standard-install.yaml
kubectl apply -f
https://github.com/kubernetes-sigs/gateway-api/releases/download/${G
ATEWAY_API_VERSION}/experimental-install.yaml
kubectl get crds | grep gateway.networking.k8s.io
helm repo add istio
https://istio-release.storage.googleapis.com/charts || true
helm repo update
kubectl create namespace istio-system --dry-run=client -o yaml |
kubectl apply -f -
helm install istio-base istio/base -n istio-system
helm status istio-base -n istio-system
步驟 4:安裝 Istiod (控制平面)
istiod-values.yaml 的檔案。
global:
proxy:
autoInject: disabled
resources:
requests:
cpu: 10m
memory: 64Mi
limits:
cpu: 100m
memory: 256Mi
autoscaleEnabled: false
env:
PILOT_ENABLE_ALPHA_GATEWAY_API: "true"
telemetry:
enabled: false
helm install istiod istio/istiod \
-n istio-system \
-f istiod-values.yaml
kubectl rollout status deployment/istiod -n istio-system
--timeout=120s
# Check Istio pods
kubectl get pods -n istio-system
# Verify GatewayClass resource
kubectl get gatewayclass
成功安裝後,系統會將 Istio GatewayClass 列為可用。