AppScan 360° 的升級路徑:輸入至 Gateway API

概觀

從傳統的 Kubernetes 輸入設定移轉到基於閘道器的模型(例如 Istio Gateway API)提供了更強大的路由彈性、對多叢集 / 多協定流量的原生支援,以及與服務網格功能的卓越整合。

本說明文件概述了根據叢集類型、負載平衡器可用性和營運需求所推薦的移轉策略。

1.升級策略

方法 A:徹底重裝升級

  • 實務範例:任何工作負載都不再需要輸入。

    程序:1.移除現有的輸入控制器。

    2.使用負載平衡器(MetalLB 或 SLVLB)在預設埠 (80/443) 上部署閘道器控制器。

    3.驗證服務是否配置了正確的外部 IP。

方法 B:次要 / 共存方法

  • 實務範例:現有工作負載仍依賴於傳統的輸入控制器。

  • 程序:
    1. 保留輸入控制器。
    2. 在自訂埠上部署閘道器控制器以避免衝突。
    3. 規劃在移轉通過驗證後,最終將輸入移除。

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 埠。

註: 移轉完成並移除舊版輸入後,您可以重新配置閘道器以使用預設埠 (80/443)。

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)

註: 這些步驟已針對 Istio Gateway 風格進行了特別驗證。

步驟 1:安裝 Gateway API CRD

必須先安裝 CRD,然後再安裝闡道器控制器實作。https://github.com/kubernetes-sigs/gateway-api/releases/tag/v1.4.0

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
步驟 2:新增 Istio Helm 儲存庫

helm repo add istio 
https://istio-release.storage.googleapis.com/charts || true
helm repo update
步驟 3:安裝 Istio Base (CRD)

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 安裝:


helm install istiod istio/istiod \
 -n istio-system \
 -f istiod-values.yaml
等待整備狀態:

kubectl rollout status deployment/istiod -n istio-system 
--timeout=120s
步驟 5:最終驗證

# Check Istio pods
kubectl get pods -n istio-system

# Verify GatewayClass resource
kubectl get gatewayclass

成功安裝後,系統會將 Istio GatewayClass 列為可用。