將 Apigee Hybrid 升級至 1.8 版

<0x0

Apigee Ingress 閘道簡介

自 1.8 版起,Apigee Hybrid 提供一項新功能,可管理 Hybrid 安裝的 Ingress 閘道,即 Apigee Ingress 閘道。Anthos 服務網格不再是混合安裝的必要條件。使用 Apigee Ingress 閘道後,Apigee 將停止為 Anthos 服務網格提供轉送設定。升級後,您必須先將流量遷移至新的 Apigee Ingress 閘道,才能開始使用這項功能。

Apigee 會使用一小部分的 Anthos 服務網格功能做為 Ingress 閘道。 從 Hybrid 1.8 版開始,Apigee Hybrid 包含 Ingress 閘道,該閘道會隨著 Apigee Hybrid 升級一併安裝及升級。因此,您不需要具備 Anthos 服務網格的專業知識,即可安裝、升級及管理 Apigee Hybrid。系統會自動處理 Ingress 閘道版本和 Apigee Hybrid 版本相容性的相關問題。

遷移作業有兩種情境:

  • 多叢集或多區域遷移 (建議):

    切換至 Apigee 的新 Ingress 前,請先將要遷移的叢集流量全部排空至其他叢集或區域。這段時間內,您可以測試新的 Apigee Ingress 閘道是否正常運作。然後將流量轉回升級後的叢集。

  • 就地升級 (不建議用於正式環境):

    升級期間,Apigee 會使用您指定的 IP 位址啟動新的 Ingress 閘道。 接著,您可以測試新的 Apigee Ingress 閘道是否正常運作,然後將流量轉移至新的 Ingress。升級期間可能會停機。

將 Apigee Hybrid 升級至 1.8 版時,您必須在覆寫檔案中設定 Apigee Ingress Gateway。升級後,您可以在註冊商將 A 或 CNAME 記錄導向 Apigee Ingress 閘道或 Anthos 服務網格的 IP 位址,藉此控管叢集使用的 Ingress 閘道類型。

升級至 1.8.8 版總覽

升級 Apigee Hybrid 的程序分為下列幾節:

  1. 準備升級。
  2. 安裝混合式執行階段 1.8.8 版。
  3. 針對 Ingress 閘道,請選擇下列其中一個選項:

必要條件

這些升級操作說明假設您已安裝 Apigee Hybrid 1.7.x 版,或是 1.8.x 版的舊版修補程式,並希望升級至 1.8.8 版。如要從舊版更新,請參閱將 Apigee Hybrid 升級至 1.7 版的說明。

如果想繼續使用 Anthos 服務網格,請務必將 Anthos 服務網格升級至支援的版本。如要查看支援的 Anthos 服務網格版本,請參閱「支援的平台」表格。

準備升級至 1.8 版

  1. 這些操作說明會使用環境變數 APIGEECTL_HOME,代表您在檔案系統中安裝 apigeectl 的目錄。如有需要,請將目錄變更為 apigeectl 目錄,並使用下列指令定義變數:

    Linux

    export APIGEECTL_HOME=$PWD
    echo $APIGEECTL_HOME

    Mac OS

    export APIGEECTL_HOME=$PWD
    echo $APIGEECTL_HOME

    Windows

    set APIGEECTL_HOME=%CD%
    echo %APIGEECTL_HOME%
  2. 備份 1.7 版的 $APIGEECTL_HOME/ 目錄。例如:
    tar -czvf $APIGEECTL_HOME/../apigeectl-v1.7-backup.tar.gz $APIGEECTL_HOME
  3. 按照「Cassandra 備份與復原」一文中的說明,備份 Cassandra 資料庫。

將「Cloud Trace 代理人」角色新增至 Apigee 執行階段的服務帳戶。(選填)

選用步驟:如果您打算使用 Cloud Trace,且尚未在混合式 1.7 安裝中執行此步驟,請確保 Apigee 執行階段服務的服務帳戶具有 Cloud Trace 代理者 Google 角色。(roles/cloudtrace.agent)。

在正式環境中,這通常是apigee-runtime服務帳戶。如果是非正式環境,這通常是apigee-non-prod服務帳戶。

您可以在 Cloud 控制台 > IAM 與管理 > 服務帳戶使用者介面中新增角色,也可以使用下列指令:

  1. 使用下列指令取得服務帳戶的電子郵件地址:

    正式版

    gcloud iam service-accounts list --filter "apigee-runtime"

    如果符合 apigee-runtime@$ORG_NAME.iam.gserviceaccount.com 模式,您可以在下一個步驟中使用該模式。

    非正式環境

    gcloud iam service-accounts list --filter "apigee-non-prod"

    如果符合 apigee-non-prod@$ORG_NAME.iam.gserviceaccount.com 模式,您可以在下一個步驟中使用該模式。

  2. 將「Cloud Trace 代理者」角色指派給服務帳戶:

    正式版

    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member="serviceAccount:apigee-runtime@$PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/cloudtrace.agent"

    非正式環境

    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member="serviceAccount:apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/cloudtrace.agent"

    範例

    gcloud projects add-iam-policy-binding hybrid-example-project \
        --member="serviceAccount:apigee-runtime@hybrid-example-project.iam.gserviceaccount.com" \
        --role="roles/cloudtrace.agent"

    其中:$PROJECT_ID 是安裝 Apigee hybrid 的 Google Cloud 雲端專案名稱。

準備安裝 Apigee Ingress 閘道

在升級過程中安裝 Apigee Ingress 閘道。您需要在覆寫檔案中新增下列 ingressGateways 屬性。

語法

ingressGateways:
- name: INGRESS_NAME
  replicaCountMin: REPLICAS_MIN
  replicaCountMax: REPLICAS_MAX
  resources:
    requests:
      cpu: CPU_COUNT_REQ
      memory: MEMORY_REQ
    limits:
      cpu: CPU_COUNT_LIMIT
      memory: MEMORY_LIMIT
  svcAnnotations:  # optional. See Known issue 243599452.
    SVC_ANNOTATIONS_KEY: SVC_ANNOTATIONS_VALUE
  svcLoadBalancerIP: SVC_LOAD_BALANCER_IP # optional

範例

ingressGateways:
- name: prod1
  replicaCountMin: 2
  replicaCountMax: 100
  resources:
    requests:
      cpu: 1
      memory: 1Gi
    limits:
      cpu: 2
      memory: 2Gi 
  • INGRESS_NAME 是 Ingress 部署作業的名稱。這個名稱必須符合下列規定:
    • 長度上限為 17 個半形字元
    • 只能包含小寫英數字元、「-」或「.」
    • 開頭為英數字元
    • 結尾須為英數字元

    請參閱「設定屬性參考資料」一節中的 ingressGateways[].name。

  • REPLICAS_MIN 和 REPLICAS_MAX 是安裝中 Apigee Ingress 閘道的副本數量下限和上限。如需更多資訊和預設設定,請參閱「設定屬性參考資料」中的 ingressGateways[].replicaCountMin 和 ingressGateways[].replicaCountMax。
  • CPU_COUNT_REQ 和 MEMORY_REQ 是安裝中每個 Apigee Ingress 閘道副本的 CPU 和記憶體要求。

    如要瞭解詳情和預設設定,請參閱「設定屬性參考資料」中的 ingressGateways[].resources.requests.cpu 和 ingressGateways[].resources.requests.memory。

  • CPU_COUNT_LIMIT 和 MEMORY_LIMIT:安裝中每個 Apigee Ingress 閘道副本的 CPU 和記憶體上限。

    如要瞭解詳情和預設設定,請參閱「設定屬性參考資料」中的 ingressGateways[].resources.limits.cpu 和 ingressGateways[].resources.limits.memory。

  • SVC_ANNOTATIONS_KEY 和 SVC_ANNOTATIONS_VALUE (選用):

    這是鍵/值組合,可為預設 Ingress 服務提供註解。雲端平台會使用註解來協助設定混合式安裝作業,例如將負載平衡器類型設為內部或外部。例如:

    ingressGateways:
      svcAnnotations:
        networking.gke.io/load-balancer-type: "Internal"

    註解會因平台而異。如需必要和建議的註解,請參閱平台說明文件。

    請參閱「設定屬性參考資料」一節中的 ingressGateways[].svcAnnotations。
  • SVC_LOAD_BALANCER_IP (選用) 可為負載平衡器指派靜態 IP 位址。在支援指定負載平衡器 IP 位址的平台上,系統會使用這個 IP 位址建立負載平衡器。如果平台不允許您指定負載平衡器 IP 位址,系統會忽略這項屬性。

    如果沒有為負載平衡器分配靜態 IP 位址,請將這個屬性從覆寫檔案中排除。

    請參閱設定屬性參考資料中的 ingressGateways[].svcLoadBalancerIP。

對覆寫檔案進行其他變更,啟用或停用選用的 v1.8 功能

在 overrides.yaml 檔案中加入下列屬性,即可在混合型 v1.8 中啟用新功能。這些功能為選用項目。

  • 機構範圍的 UDCA 現已預設為開啟。使用單一 UDCA 部署作業處理所有環境的流量,可避免 UDCA Pod 未充分利用,並增加其他 Apigee 元件的節點資源可用性。機構範圍的 UDCA 會為所有環境使用單一服務帳戶,即 apigee-udca。

    如果您在不同環境中為 UDCA 使用不同的服務帳戶,請注意,現在系統會使用覆寫檔案中機構層級指定的服務帳戶 (使用 udca:serviceAccountPath),而非環境層級指定的服務帳戶 (使用 envs:udca:serviceAccountPath)。

    Apigee Hybrid 1.8 版支援環境範圍的 UDCA。如要保留每個環境的 UDCA,請設定 orgScopedUDCA: false。

    請參閱設定屬性參考資料中的 orgScopedUDCA。

  • 啟用 validateOrg,強制驗證 Apigee 機構和環境是否有效,以及是否與 overrides 檔案中指定的 Google Cloud Platform 專案搭配使用。
    validateOrg: true

    請參閱「設定屬性參考資料」中的 validateOrg。

安裝 Hybrid 1.8.8 執行階段

  1. 請確認您位於混合式基本目錄 (apigeectl 可執行檔所在目錄的上層目錄):
    cd $APIGEECTL_HOME/..
  2. 使用下列指令,下載適用於您作業系統的版本套件。 請務必在下表中選取您的平台:

    Linux

    Linux 64 位元:

    curl -LO \
      https://storage.googleapis.com/apigee-release/hybrid/apigee-hybrid-setup/1.8.8/apigeectl_linux_64.tar.gz

    Mac OS

    Mac 64 位元:

    curl -LO \
      https://storage.googleapis.com/apigee-release/hybrid/apigee-hybrid-setup/1.8.8/apigeectl_mac_64.tar.gz

    Windows

    Windows 64 位元:

    curl -LO ^
      https://storage.googleapis.com/apigee-release/hybrid/apigee-hybrid-setup/1.8.8/apigeectl_windows_64.zip
  3. 將目前的 apigeectl/ 目錄重新命名為備份目錄名稱。例如:

    Linux

    mv $APIGEECTL_HOME/ $APIGEECTL_HOME-v1.7/

    Mac OS

    mv $APIGEECTL_HOME/ $APIGEECTL_HOME-v1.7/ 

    Windows

    rename %APIGEECTL_HOME% %APIGEECTL_HOME%-v1.7 
  4. 將下載的 gzip 檔案內容解壓縮至混合式基本目錄。 混合式基本目錄是重新命名的 apigeectl-v1.7 目錄所在目錄:

    Linux

    tar xvzf filename.tar.gz -C ./

    Mac OS

    tar xvzf filename.tar.gz -C ./

    Windows

    tar xvzf filename.zip -C ./
  5. 根據預設,tar 內容會展開至目錄,且目錄名稱中含有版本和平台。例如:./apigeectl_1.8.8-xxxxxxx_linux_64。使用下列指令將該目錄重新命名為 apigeectl:

    Linux

    mv apigeectl_1.8.8-xxxxxxx_linux_64 apigeectl

    Mac OS

    mv apigeectl_1.8.8-xxxxxxx_mac_64 apigeectl

    Windows

    rename apigeectl_1.8.8-xxxxxxx_windows_64 apigeectl
  6. 切換至 apigeectl 目錄:
    cd ./apigeectl

    這個目錄是 apigeectl 主目錄。這是 apigeectl 可執行指令所在的目錄。

  7. 這些操作說明會使用環境變數 $APIGEECTL_HOME,代表檔案系統中安裝 apigeectl 公用程式的目錄。如有需要,請將目錄變更為 apigeectl 目錄,並使用下列指令定義變數:

    Linux

    export APIGEECTL_HOME=$PWD
    echo $APIGEECTL_HOME

    Mac OS

    export APIGEECTL_HOME=$PWD
    echo $APIGEECTL_HOME

    Windows

    set APIGEECTL_HOME=%CD%
    echo %APIGEECTL_HOME%
  8. 使用 version 指令驗證 apigeectl 版本:
    ./apigeectl version
    Version: 1.8.8
  9. 移至 hybrid-base-directory/hybrid-files 目錄。hybrid-files 目錄包含覆寫檔案、憑證和服務帳戶等設定檔。例如:
    cd $APIGEECTL_HOME/../hybrid-files
  10. 使用下列指令,確認 kubectl 已設為正確的環境。 目前的環境應設為要升級 Apigee Hybrid 的叢集。
    kubectl config get-contexts | grep \*
  11. 在 hybrid-files 目錄中:
    1. 將下列符號連結更新為 $APIGEECTL_HOME。這些連結可讓您從 hybrid-files 目錄內執行新安裝的 apigeectl 指令:
      ln -nfs $APIGEECTL_HOME/tools tools
      ln -nfs $APIGEECTL_HOME/config config
      ln -nfs $APIGEECTL_HOME/templates templates
      ln -nfs $APIGEECTL_HOME/plugins plugins
    2. 如要確認符號連結是否建立正確,請執行下列指令,並確認連結路徑指向正確位置:
      ls -l | grep ^l
  12. 執行模擬測試初始化作業,檢查是否有錯誤:
    ${APIGEECTL_HOME}/apigeectl init -f OVERRIDES_FILE --dry-run=client

    其中 OVERRIDES_FILE 是覆寫檔案的名稱,例如 ./overrides/overrides.yaml。

  13. 如果沒有任何錯誤,請初始化 Hybrid 1.8.8。這項指令也會安裝及設定 Apigee Ingress 閘道:
    $APIGEECTL_HOME/apigeectl init -f OVERRIDES_FILE
  14. 檢查初始化狀態:
    $APIGEECTL_HOME/apigeectl check-ready -f OVERRIDES_FILE

    成功後,輸出內容會顯示:All containers ready.

    如要進一步檢查,您也可以執行下列指令來檢查 ApigeeDataStore 狀態:

    kubectl describe apigeeds -n apigee

    在輸出內容中,找出 State: running。

  15. 使用 --dry-run 旗標執行 apply 指令的模擬測試,檢查是否有錯誤:
    $APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE --dry-run=client
  16. 如果沒有錯誤,請套用覆寫。請根據安裝環境,選取並按照正式環境或非正式環境的操作說明進行。

    正式環境

    在正式環境中,您應個別升級每個混合元件,並在繼續下一個元件之前,檢查升級元件的狀態。

    1. 請確認您位於 hybrid-files 目錄。
    2. 套用覆寫項目來升級 Cassandra:
      $APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE --datastore
    3. 完成檢查:
      $APIGEECTL_HOME/apigeectl check-ready -f OVERRIDES_FILE

      只有在 Pod 準備就緒時,才繼續執行下一個步驟。

    4. 套用覆寫項目來升級遙測元件,並檢查是否完成:
      $APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE --telemetry
      $APIGEECTL_HOME/apigeectl check-ready -f OVERRIDES_FILE
    5. 啟動 Redis 元件:
      $APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE --redis
    6. 套用覆寫項目來升級機構層級元件 (MART、Watcher 和 Apigee Connect),並檢查是否完成:
      $APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE --org
      $APIGEECTL_HOME/apigeectl check-ready -f OVERRIDES_FILE
    7. 套用覆寫內容來升級環境。你有兩種選擇:
      • 逐一環境:一次對一個環境套用覆寫,並檢查是否完成。針對每個環境重複執行這個步驟:
        $APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE --env ENV_NAME
        $APIGEECTL_HOME/apigeectl check-ready -f OVERRIDES_FILE

        其中 ENV_NAME 是要升級的環境名稱。

      • 一次套用至所有環境:一次將覆寫值套用至所有環境,並檢查完成情況:
        $APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE --all-envs
        $APIGEECTL_HOME/apigeectl check-ready -f OVERRIDES_FILE
    8. 套用覆寫項目來升級 virtualhosts 元件,並檢查是否完成:
      $APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE --settings virtualhosts
      $APIGEECTL_HOME/apigeectl check-ready -f OVERRIDES_FILE

    非正式環境

    在大多數非正式、示範或實驗環境中,您可以一次將覆寫套用至所有元件。如果非正式環境規模龐大且複雜,或與正式環境非常相似,建議按照升級正式環境的指示操作。

    1. 請確認您位於 hybrid-files 目錄。
    2. $APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE
    3. 查看狀態:
      $APIGEECTL_HOME/apigeectl check-ready -f OVERRIDES_FILE

升級 Kubernetes 版本

將 Kubernetes 平台升級至 Hybrid 1.8 支援的版本。 如需協助,請參閱平台的說明文件。

將流量從 Anthos 服務網格切換至 Apigee Ingress 閘道

如要將流量切換至 Apigee Ingress 閘道,請按照下列步驟操作:

  1. 公開 Apigee Ingress 閘道。按照「公開 Apigee 進入閘道」中的程序操作。
  2. 呼叫 Proxy,測試新的 Ingress 閘道。最好測試目前部署的所有重要 Proxy。
  3. 如要切換流量,請更新 DNS 記錄,使其指向新 Apigee Ingress Gateway 的 IP 位址。 視 DNS 供應商而定,您或許可以逐步將流量轉移至新端點。 提示: 您可以使用下列指令,找出 Apigee Ingress 閘道的外部 IP 位址:
    kubectl get svc -n apigee -l app=apigee-ingressgateway

    輸出內容大致如下:

    NAME                                        TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)                                      AGE
    apigee-ingressgateway-prod-hybrid-37a39bd   LoadBalancer   192.0.2.123   233.252.0.123   15021:32049/TCP,80:31624/TCP,443:30723/TCP   16h
  4. 監控資訊主頁,確保所有執行階段流量都能正常運作。如果一切正常,請繼續下一個步驟。請確認沒有任何流量通過舊的 Ingress 閘道 (Anthos 服務網格),因為 DNS 記錄更新可能因 DNS 快取而延遲。
  5. 如要停止讓 Apigee 為 Anthos 服務網格提供設定,請按照「管理 Apigee Ingress 閘道」指南中的「停止為 ASM 提供設定」一節步驟操作。
  6. 重新測試及監控 API Proxy 流量。
  7. 按照 Anthos 服務網格說明文件中的操作說明,從叢集解除安裝 Anthos 服務網格。

將 Anthos 服務網格升級至 1.15 版

<0x0A

請參閱適用於您平台的 Anthos 服務網格說明文件,然後執行相關程序:

安裝及設定 Anthos 服務網格的說明會因平台而異。平台可分為下列類別:

  • GKE:在 Google Cloud 上執行的 Google Kubernetes Engine 叢集。
  • Google Cloud 以外:在下列項目上執行的 Anthos 叢集:
    • VMware 中的 Anthos 叢集 (GKE On-Prem)
    • Anthos on bare metal
    • Anthos clusters on AWS
    • Amazon EKS
  • 其他 Kubernetes 平台:在下列項目中建立及執行的相容叢集:
    • AKS
    • EKS
    • OpenShift

GKE

如要將混合式安裝升級至 Anthos 服務網格 1.17.8 版,請按照下列順序操作:

  1. 為升級做好準備。
  2. 安裝新版 Anthos 服務網格。
  3. 從目前的安裝作業中,刪除先前 Anthos 服務網格版本的部署作業、服務和 Webhook。
  4. 升級閘道並設定新的 Webhook。

準備將 Anthos 服務網格升級至 1.17.8 版

  1. 請先查看「升級 Anthos 服務網格」中的需求,但暫時不要執行升級。
  2. 安裝新版本前,請先判斷目前的修訂版本。您需要這項資訊,才能從目前的安裝項目中刪除舊版 Anthos 服務網格的部署、服務和 Webhook。請使用下列指令將目前的 istiod 修訂版本儲存在環境變數中:
    export DELETE_REV=$(kubectl get deploy -n istio-system -l app=istiod -o jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}')
    echo $DELETE_REV

    輸出內容應大致如下:1.16

  3. 建立新的 overlay.yaml 檔案,或確認現有的 overlay.yaml 檔案包含下列內容:
    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    spec:
      components:
        ingressGateways:
        - name: istio-ingressgateway
          enabled: true
          k8s:
            nodeSelector:
              # default node selector, if different or not using node selectors, change accordingly.
              cloud.google.com/gke-nodepool: apigee-runtime
            resources:
              requests:
                cpu: 1000m
            service:
              type: LoadBalancer
              loadBalancerIP: STATIC_IP # If you do not have a reserved static IP, leave this out.
              ports:
                - name: http-status-port
                  port: 15021
                - name: http2
                  port: 80
                  targetPort: 8080
                - name: https
                  port: 443
                  targetPort: 8443
      meshConfig:
        accessLogFormat:
          '{"start_time":"%START_TIME%","remote_address":"%DOWNSTREAM_DIRECT_REMOTE_ADDRESS%","user_agent":"%REQ(USER-AGENT)%","host":"%REQ(:AUTHORITY)%","request":"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%","request_time":"%DURATION%","status":"%RESPONSE_CODE%","status_details":"%RESPONSE_CODE_DETAILS%","bytes_received":"%BYTES_RECEIVED%","bytes_sent":"%BYTES_SENT%","upstream_address":"%UPSTREAM_HOST%","upstream_response_flags":"%RESPONSE_FLAGS%","upstream_response_time":"%RESPONSE_DURATION%","upstream_service_time":"%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%","upstream_cluster":"%UPSTREAM_CLUSTER%","x_forwarded_for":"%REQ(X-FORWARDED-FOR)%","request_method":"%REQ(:METHOD)%","request_path":"%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%","request_protocol":"%PROTOCOL%","tls_protocol":"%DOWNSTREAM_TLS_VERSION%","request_id":"%REQ(X-REQUEST-ID)%","sni_host":"%REQUESTED_SERVER_NAME%","apigee_dynamic_data":"%DYNAMIC_METADATA(envoy.lua)%"}'
  4. 請按照 Anthos 服務網格說明文件下列章節中的操作說明進行:
    1. 下載 asmcli
    2. 授予叢集管理員權限
    3. 驗證專案和叢集
    4. 使用選用功能升級。請先停止,再開始「升級閘道」一節。
  5. 切換至新版控制層:
    1. 取得 istiod 上的修訂版本標籤:
      kubectl get pod -n istio-system -L istio.io/rev

      指令輸出內容如下所示。

          NAME                                  READY  STATUS  RESTARTS   AGE  REV
          istiod-asm-Cloud Service Mesh 1.17.8-asm.4-67998f4b55-lrzpz    1/1    Running  0         68m  1.16.7-asm
          istiod-asm-Cloud Service Mesh 1.17.8-asm.4-67998f4b55-r76kr    1/1    Running  0         68m  1.16.7-asm
          istiod-Cloud Service Mesh 1.16.7-asm.1-1-5cd96f88f6-n7tj9      1/1    Running  0         27s  asm-1178-1
          istiod-Cloud Service Mesh 1.16.7-asm.1-1-5cd96f88f6-wm68b      1/1    Running  0         27s  asm-1178-1
    2. 將較新的修訂版本標籤指派給環境變數。

      在輸出內容的 REV 欄下方,記下新版本的修訂標籤值。在本範例中,這個值為 asm-1178-1

      export UPGRADE_REV="REVISION_LABEL"
    3. 使用下列指令,將修訂版本標籤新增至 istio-system 命名空間,並移除 istio-injection 標籤 (如有)。
      kubectl label namespace istio-system istio.io/rev=$UPGRADE_REV istio-injection- --overwrite

      如果輸出內容中顯示 "istio-injection not found",可以忽略。這表示該命名空間先前並未設定 istio-injection 標籤。如果命名空間同時有 istio-injection 和修訂版本標籤,自動插入功能就會失敗,因此 Anthos 服務網格 說明文件中的所有 kubectl label 指令都會移除 istio-injection 標籤。

    4. 重新啟動 Pod,觸發重新注入。
      kubectl rollout restart deployment -n istio-system
    5. 測試應用程式,確認工作負載是否正常運作。
    6. 如果其他命名空間也有工作負載,請重複上述步驟,為命名空間加上標籤並重新啟動 Pod。
  6. 刪除先前版本:
    1. 前往安裝 asmcli 的目錄。
    2. 將 Anthos 服務網格安裝的輸出目錄儲存在 DIR_PATH 環境變數中。這個目錄與您在「運用選用功能升級」程序中指定的目錄相同。
      export DIR_PATH=OUTPUT_DIR
    3. 建立包含下列指令的殼層指令碼:
      #!/bin/bash
      
      set -ex
      
      if [[ "${DELETE_REV}" != "${UPGRADE_REV}" ]]; then
        kubectl apply -f ${DIR_PATH}/asm/istio/istiod-service.yaml
        kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete deploy -l app=istio-ingressgateway-connectors,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete ValidatingWebhookConfiguration -l app=istiod,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete MutatingWebhookConfiguration -l app=sidecar-injector,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete IstioOperator installed-state-${DELETE_REV} -n istio-system --ignore-not-found=true
      fi
      
    4. 執行指令碼來刪除先前版本。

Google Cloud 以外

這些操作說明涵蓋下列環境的 Anthos 服務網格 升級作業:

  • VMware 中的 Anthos 叢集 (GKE On-Prem)
  • Anthos on bare metal
  • Anthos clusters on AWS
  • Amazon EKS

如要將混合式安裝升級至 Anthos 服務網格 1.17.8 版,請按照下列順序操作:

  1. 為升級做好準備。
  2. 安裝新版 Anthos 服務網格。
  3. 從目前的安裝作業中,刪除先前 Anthos 服務網格版本的部署作業、服務和 Webhook。
  4. 升級閘道並設定新的 Webhook。

準備將 Anthos 服務網格升級至 1.17.8 版

  1. 請先查看「升級 Anthos 服務網格」中的需求,但暫時不要執行升級。
  2. 安裝新版本前,請先判斷目前的修訂版本。您需要這項資訊,才能從目前的安裝項目中刪除舊版 Anthos 服務網格的部署、服務和 Webhook。請使用下列指令將目前的 istiod 修訂版本儲存在環境變數中:
    export DELETE_REV=$(kubectl get deploy -n istio-system -l app=istiod -o jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}')
    echo $DELETE_REV

    輸出內容應大致如下:1.16

  3. 建立新的 overlay.yaml 檔案,或確認現有的 overlay.yaml 檔案包含下列內容:
    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    spec:  
      components:
        ingressGateways:
        - name: istio-ingressgateway
          enabled: true
          k8s:
            nodeSelector:
              # default node selector, if different or not using node selectors, change accordingly.
              cloud.google.com/gke-nodepool: apigee-runtime
            resources:
              requests:
                cpu: 1000m
            service:
              type: LoadBalancer
              loadBalancerIP: STATIC_IP # If you do not have a reserved static IP, leave this out.
              ports:
                - name: http-status-port
                  port: 15021
                - name: http2
                  port: 80
                  targetPort: 8080
                - name: https
                  port: 443
                  targetPort: 8443
      values:
        gateways:
          istio-ingressgateway:
            runAsRoot: true
    
      meshConfig:
        accessLogFormat:
          '{"start_time":"%START_TIME%","remote_address":"%DOWNSTREAM_DIRECT_REMOTE_ADDRESS%","user_agent":"%REQ(USER-AGENT)%","host":"%REQ(:AUTHORITY)%","request":"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%","request_time":"%DURATION%","status":"%RESPONSE_CODE%","status_details":"%RESPONSE_CODE_DETAILS%","bytes_received":"%BYTES_RECEIVED%","bytes_sent":"%BYTES_SENT%","upstream_address":"%UPSTREAM_HOST%","upstream_response_flags":"%RESPONSE_FLAGS%","upstream_response_time":"%RESPONSE_DURATION%","upstream_service_time":"%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%","upstream_cluster":"%UPSTREAM_CLUSTER%","x_forwarded_for":"%REQ(X-FORWARDED-FOR)%","request_method":"%REQ(:METHOD)%","request_path":"%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%","request_protocol":"%PROTOCOL%","tls_protocol":"%DOWNSTREAM_TLS_VERSION%","request_id":"%REQ(X-REQUEST-ID)%","sni_host":"%REQUESTED_SERVER_NAME%","apigee_dynamic_data":"%DYNAMIC_METADATA(envoy.lua)%"}'
  4. 請按照 Anthos 服務網格說明文件下列章節中的操作說明進行:
    1. 下載 asmcli
    2. 授予叢集管理員權限
    3. 驗證專案和叢集
    4. 使用選用功能升級。請先停止,再開始「升級閘道」一節。
  5. 切換至新版控制層:
    1. 取得 istiod 上的修訂版本標籤:
      kubectl get pod -n istio-system -L istio.io/rev

      指令輸出內容如下所示。

          NAME                                  READY  STATUS  RESTARTS   AGE  REV
          istiod-asm-Cloud Service Mesh 1.17.8-asm.4-67998f4b55-lrzpz    1/1    Running  0         68m  1.16.7-asm
          istiod-asm-Cloud Service Mesh 1.17.8-asm.4-67998f4b55-r76kr    1/1    Running  0         68m  1.16.7-asm
          istiod-Cloud Service Mesh 1.16.7-asm.1-1-5cd96f88f6-n7tj9      1/1    Running  0         27s  asm-1178-1
          istiod-Cloud Service Mesh 1.16.7-asm.1-1-5cd96f88f6-wm68b      1/1    Running  0         27s  asm-1178-1
    2. 將較新的修訂版本標籤指派給環境變數。

      在輸出內容的 REV 欄下方,記下新版本的修訂標籤值。在本範例中,這個值為 asm-1178-1

      export UPGRADE_REV="REVISION_LABEL"
    3. 使用下列指令,將修訂版本標籤新增至 istio-system 命名空間,並移除 istio-injection 標籤 (如有)。
      kubectl label namespace istio-system istio.io/rev=$UPGRADE_REV istio-injection- --overwrite

      如果輸出內容中顯示 "istio-injection not found",可以忽略。這表示該命名空間先前並未設定 istio-injection 標籤。如果命名空間同時有 istio-injection 和修訂版本標籤,自動插入功能就會失敗,因此 Anthos 服務網格 說明文件中的所有 kubectl label 指令都會移除 istio-injection 標籤。

    4. 重新啟動 Pod,觸發重新注入。
      kubectl rollout restart deployment -n istio-system
    5. 測試應用程式,確認工作負載是否正常運作。
    6. 如果其他命名空間也有工作負載,請重複上述步驟,為命名空間加上標籤並重新啟動 Pod。
  6. 刪除先前版本:
    1. 前往安裝 asmcli 的目錄。
    2. 將 Anthos 服務網格安裝的輸出目錄儲存在 DIR_PATH 環境變數中。這個目錄與您在「運用選用功能升級」程序中指定的目錄相同。
      export DIR_PATH=OUTPUT_DIR
    3. 建立包含下列指令的殼層指令碼:
      #!/bin/bash
      
      set -ex
      
      if [[ "${DELETE_REV}" != "${UPGRADE_REV}" ]]; then
        kubectl apply -f ${DIR_PATH}/asm/istio/istiod-service.yaml
        kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete deploy -l app=istio-ingressgateway-connectors,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete ValidatingWebhookConfiguration -l app=istiod,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete MutatingWebhookConfiguration -l app=sidecar-injector,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete IstioOperator installed-state-${DELETE_REV} -n istio-system --ignore-not-found=true
      fi
      
    4. 執行指令碼來刪除先前版本。

AKS / EKS

在這些操作說明中,升級 Anthos 連接叢集上 Anthos 服務網格 (Anthos 服務網格) 1.17.8-asm.4-distroless 版的程序,與全新安裝的程序相同。

準備安裝 Anthos 服務網格

  1. 安裝新版本前,請先判斷目前的修訂版本。您需要這項資訊,才能從目前的 Anthos 服務網格安裝中刪除驗證 Webhook 和變異 Webhook。使用下列指令將目前的 istiod 修訂版本儲存至環境變數:
    export DELETE_REV=$(kubectl get deploy -n istio-system -l app=istiod -o jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}')
    echo $DELETE_REV

    輸出內容應大致如下:1.16

  2. Linux

  3. 將 Anthos 服務網格安裝檔案下載至目前的工作目錄:
    curl -LO https://storage.googleapis.com/gke-release/asm/1.17.8-asm.4-distroless-linux-amd64.tar.gz
  4. 下載簽名檔,並使用 OpenSSL 驗證簽名:
    curl -LO https://storage.googleapis.com/gke-release/asm/1.17.8-asm.4-distroless-linux-amd64.tar.gz.1.sig
    openssl dgst -verify /dev/stdin -signature 1.17.8-asm.4-distroless-linux-amd64.tar.gz.1.sig 1.17.8-asm.4-distroless.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF
  5. 將檔案的內容解壓縮到您檔案系統上的任何位置,舉例來說,如要將內容解壓縮至目前的工作目錄,請執行下列指令:
    tar xzf 1.17.8-asm.4-distroless-linux-amd64.tar.gz

    這項指令會在目前的工作目錄中建立名為 1.17.8-asm.4-distroless 的安裝目錄,其中包含:

    • samples 目錄中的範例應用程式。
    • 您用來安裝 Anthos 服務網格的 istioctl 指令列工具位於 bin 目錄中。
    • Anthos 服務網格設定檔位於 manifests/profiles 目錄中。
  6. 確認您位於 Anthos 服務網格安裝的根目錄中:
    cd 1.17.8-asm.4-distroless
  7. 為方便起見,請將 /bin 目錄中的工具新增至 PATH:
    export PATH=$PWD/bin:$PATH
  8. Mac OS

  9. 將 Anthos 服務網格安裝檔案下載至目前的工作目錄:
    curl -LO https://storage.googleapis.com/gke-release/asm/1.17.8-asm.4-distroless-osx.tar.gz
  10. 下載簽名檔,並使用 OpenSSL 驗證簽名:
    curl -LO https://storage.googleapis.com/gke-release/asm/1.17.8-asm.4-distroless-osx.tar.gz.1.sig
    openssl dgst -sha256 -verify /dev/stdin -signature 1.17.8-asm.4-distroless-osx.tar.gz.1.sig 1.17.8-asm.4-distroless.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF
  11. 將檔案的內容解壓縮到您檔案系統上的任何位置,舉例來說,如要將內容解壓縮至目前的工作目錄,請執行下列指令:
    tar xzf 1.17.8-asm.4-distroless-osx.tar.gz

    這項指令會在目前的工作目錄中建立名為 1.17.8-asm.4-distroless 的安裝目錄,其中包含:

    • samples 目錄中的範例應用程式。
    • 您用來安裝 Anthos 服務網格的 istioctl 指令列工具位於 bin 目錄中。
    • Anthos 服務網格設定檔位於 manifests/profiles 目錄中。
  12. 確認您位於 Anthos 服務網格安裝的根目錄中:
    cd 1.17.8-asm.4-distroless
  13. 為方便起見,請將 /bin 目錄中的工具新增至 PATH:
    export PATH=$PWD/bin:$PATH
  14. Windows

  15. 將 Anthos 服務網格安裝檔案下載至目前的工作目錄:
    curl -LO https://storage.googleapis.com/gke-release/asm/1.17.8-asm.4-distroless-win.zip
  16. 下載簽名檔,並使用 OpenSSL 驗證簽名:
    curl -LO https://storage.googleapis.com/gke-release/asm/1.17.8-asm.4-distroless-win.zip.1.sig
    openssl dgst -verify - -signature 1.17.8-asm.4-distroless-win.zip.1.sig 1.17.8-asm.4-distroless.win.zip <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF
  17. 將檔案的內容解壓縮到您檔案系統上的任何位置,舉例來說,如要將內容解壓縮至目前的工作目錄,請執行下列指令:
    tar xzf 1.17.8-asm.4-distroless-win.zip

    這項指令會在目前的工作目錄中建立名為 1.17.8-asm.4-distroless 的安裝目錄,其中包含:

    • samples 目錄中的範例應用程式。
    • 您用來安裝 Anthos 服務網格的 istioctl 指令列工具位於 bin 目錄中。
    • Anthos 服務網格設定檔位於 manifests\profiles 目錄中。
  18. 確認您位於 Anthos 服務網格安裝的根目錄中:
    cd 1.17.8-asm.4-distroless
  19. 為方便起見,請將 \bin 目錄中的工具新增至 PATH:
    set PATH=%CD%\bin:%PATH%
  20. Anthos 服務網格 Istio 安裝完成後,請檢查 istioctl 的版本:
    istioctl version
  21. 為控制層元件建立名為 istio-system 的命名空間:
    kubectl create namespace istio-system

安裝 Anthos 服務網格

  1. 編輯 overlay.yaml 檔案,或使用下列內容建立新檔案:
    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    spec:
      meshConfig:
        accessLogFile: /dev/stdout
        enableTracing: true
        accessLogFormat:
          '{"start_time":"%START_TIME%","remote_address":"%DOWNSTREAM_DIRECT_REMOTE_ADDRESS%","user_agent":"%REQ(USER-AGENT)%","host":"%REQ(:AUTHORITY)%","request":"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%","request_time":"%DURATION%","status":"%RESPONSE_CODE%","status_details":"%RESPONSE_CODE_DETAILS%","bytes_received":"%BYTES_RECEIVED%","bytes_sent":"%BYTES_SENT%","upstream_address":"%UPSTREAM_HOST%","upstream_response_flags":"%RESPONSE_FLAGS%","upstream_response_time":"%RESPONSE_DURATION%","upstream_service_time":"%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%","upstream_cluster":"%UPSTREAM_CLUSTER%","x_forwarded_for":"%REQ(X-FORWARDED-FOR)%","request_method":"%REQ(:METHOD)%","request_path":"%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%","request_protocol":"%PROTOCOL%","tls_protocol":"%DOWNSTREAM_TLS_VERSION%","request_id":"%REQ(X-REQUEST-ID)%","sni_host":"%REQUESTED_SERVER_NAME%","apigee_dynamic_data":"%DYNAMIC_METADATA(envoy.lua)%"}'
      components:
        ingressGateways:
        - name: istio-ingressgateway
          enabled: true
          k8s:
            service:
              type: LoadBalancer
              ports:
              - name: status-port
                port: 15021
                targetPort: 15021
              - name: http2
                port: 80
                targetPort: 8080
              - name: https
                port: 443
                targetPort: 8443
    
  2. 使用 asm-multicloud 設定檔,透過 istioctl 安裝 Anthos 服務網格:
    istioctl install \
        --set profile=asm-multicloud \
        --set revision="asm-1178-1" \
        --filename overlay.yaml

    輸出內容大致如下:

    kubectl get pods -n istio-system
    NAME                                   READY   STATUS    RESTARTS   AGE
    istio-ingressgateway-88b6fd976-flgp2   1/1     Running   0          3m13s
    istio-ingressgateway-88b6fd976-p5dl9   1/1     Running   0          2m57s
    istiod-asm-1178-1-798ffb964-2ls88       1/1     Running   0          3m21s
    istiod-asm-1178-1-798ffb964-fnj8c       1/1     Running   1          3m21s

    --set revision 引數會將修訂版本標籤新增至 istiod,格式為 istio.io/rev=asm-1178-1。自動邊車容器加入器 Webhook 會使用這個標籤,將插入的 Sidecar 與特定 istiod 修訂版本建立關聯。如要為命名空間啟用 Sidecar 自動插入功能,必須使用與 istiod 標籤相符的修訂版本標籤。

  3. 確認安裝完成:
    kubectl get svc -n istio-system

    輸出內容大致如下:

    NAME                   TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                                                                      AGE
    istio-ingressgateway   LoadBalancer   172.200.48.52    34.74.177.168   15021:30479/TCP,80:30030/TCP,443:32200/TCP,15012:32297/TCP,15443:30244/TCP   3m35s
    istiod                 ClusterIP      172.200.18.133   <none>          15010/TCP,15012/TCP,443/TCP,15014/TCP                                        4m46s
    istiod-asm-1178-1       ClusterIP      172.200.63.220   <none>          15010/TCP,15012/TCP,443/TCP,15014/TCP                                        3m43s
  4. 切換至新版控制層:
    1. 取得 istiod 上的修訂版本標籤:
      kubectl get pod -n istio-system -L istio.io/rev

      指令輸出內容如下所示。

          NAME                                  READY  STATUS  RESTARTS   AGE  REV
          istiod-asm-Cloud Service Mesh 1.17.8-asm.4-67998f4b55-lrzpz    1/1    Running  0         68m  1.16.7-asm
          istiod-asm-Cloud Service Mesh 1.17.8-asm.4-67998f4b55-r76kr    1/1    Running  0         68m  1.16.7-asm
          istiod-Cloud Service Mesh 1.16.7-asm.1-1-5cd96f88f6-n7tj9      1/1    Running  0         27s  asm-1178-1
          istiod-Cloud Service Mesh 1.16.7-asm.1-1-5cd96f88f6-wm68b      1/1    Running  0         27s  asm-1178-1
    2. 將較新的修訂版本標籤指派給環境變數。

      在輸出內容的 REV 欄下方,記下新版本的修訂標籤值。在本範例中,這個值為 asm-1178-1

      export UPGRADE_REV="REVISION_LABEL"
    3. 使用下列指令,將修訂版本標籤新增至 istio-system 命名空間,並移除 istio-injection 標籤 (如有)。
      kubectl label namespace istio-system istio.io/rev=$UPGRADE_REV istio-injection- --overwrite

      如果輸出內容中顯示 "istio-injection not found",可以忽略。這表示該命名空間先前並未設定 istio-injection 標籤。如果命名空間同時有 istio-injection 和修訂版本標籤,自動插入功能就會失敗,因此 Anthos 服務網格 說明文件中的所有 kubectl label 指令都會移除 istio-injection 標籤。

    4. 重新啟動 Pod,觸發重新注入。
      kubectl rollout restart deployment -n istio-system
    5. 測試應用程式,確認工作負載是否正常運作。
    6. 如果其他命名空間也有工作負載,請重複上述步驟,為命名空間加上標籤並重新啟動 Pod。
  5. 刪除先前版本:
    1. 前往安裝 asmcli 的目錄。
    2. 建立包含下列指令的殼層指令碼:
      #!/bin/bash
      
      set -ex
      
      if [[ "${DELETE_REV}" != "${UPGRADE_REV}" ]]; then
        kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete deploy -l app=istio-ingressgateway-connectors,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete ValidatingWebhookConfiguration -l app=istiod,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete MutatingWebhookConfiguration -l app=sidecar-injector,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete IstioOperator installed-state-${DELETE_REV} -n istio-system --ignore-not-found=true
      fi
      
    3. 執行指令碼來刪除先前版本。

OpenShift

在這些操作說明中,升級 Anthos 連接叢集上 Anthos 服務網格 (Anthos 服務網格) 1.17.8-asm.4-distroless 版的程序,與全新安裝的程序相同。

準備安裝 Anthos 服務網格

  1. 安裝新版本前,請先判斷目前的修訂版本。您需要這項資訊,才能從目前的 Anthos 服務網格安裝中刪除驗證 Webhook 和變異 Webhook。使用下列指令將目前的 istiod 修訂版本儲存至環境變數:
    export DELETE_REV=$(kubectl get deploy -n istio-system -l app=istiod -o jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}')
    echo $DELETE_REV

    輸出內容應大致如下:1.16

  2. Linux

  3. 使用下列 OpenShift CLI (oc) 指令,將 anyuid 安全性內容限制 (SCC) 授予 istio-system:
    oc adm policy add-scc-to-group anyuid system:serviceaccounts:istio-system
  4. 將 Anthos 服務網格安裝檔案下載至目前的工作目錄:
    curl -LO https://storage.googleapis.com/gke-release/asm/1.17.8-asm.4-distroless-linux-amd64.tar.gz
  5. 下載簽名檔,並使用 OpenSSL 驗證簽名:
    curl -LO https://storage.googleapis.com/gke-release/asm/1.17.8-asm.4-distroless-linux-amd64.tar.gz.1.sig
    openssl dgst -verify /dev/stdin -signature 1.17.8-asm.4-distroless-linux-amd64.tar.gz.1.sig 1.17.8-asm.4-distroless.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF
  6. 將檔案的內容解壓縮到您檔案系統上的任何位置,舉例來說,如要將內容解壓縮至目前的工作目錄,請執行下列指令:
    tar xzf 1.17.8-asm.4-distroless-linux-amd64.tar.gz

    這項指令會在目前的工作目錄中建立名為 1.17.8-asm.4-distroless 的安裝目錄,其中包含:

    • samples 目錄中的範例應用程式。
    • 您用來安裝 Anthos 服務網格的 istioctl 指令列工具位於 bin 目錄中。
    • Anthos 服務網格設定檔位於 manifests/profiles 目錄中。
  7. 確認您位於 Anthos 服務網格安裝的根目錄中:
    cd 1.17.8-asm.4-distroless
  8. 為方便起見,請將 /bin 目錄中的工具新增至 PATH:
    export PATH=$PWD/bin:$PATH
  9. Mac OS

  10. 使用下列 OpenShift CLI (oc) 指令,將 anyuid 安全性內容限制 (SCC) 授予 istio-system:
    oc adm policy add-scc-to-group anyuid system:serviceaccounts:istio-system
  11. 將 Anthos 服務網格安裝檔案下載至目前的工作目錄:
    curl -LO https://storage.googleapis.com/gke-release/asm/1.17.8-asm.4-distroless-osx.tar.gz
  12. 下載簽名檔,並使用 OpenSSL 驗證簽名:
    curl -LO https://storage.googleapis.com/gke-release/asm/1.17.8-asm.4-distroless-osx.tar.gz.1.sig
    openssl dgst -sha256 -verify /dev/stdin -signature 1.17.8-asm.4-distroless-osx.tar.gz.1.sig 1.17.8-asm.4-distroless.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF
  13. 將檔案的內容解壓縮到您檔案系統上的任何位置,舉例來說,如要將內容解壓縮至目前的工作目錄,請執行下列指令:
    tar xzf 1.17.8-asm.4-distroless-osx.tar.gz

    這項指令會在目前的工作目錄中建立名為 1.17.8-asm.4-distroless 的安裝目錄,其中包含:

    • samples 目錄中的範例應用程式。
    • 您用來安裝 Anthos 服務網格的 istioctl 指令列工具位於 bin 目錄中。
    • Anthos 服務網格設定檔位於 manifests/profiles 目錄中。
  14. 確認您位於 Anthos 服務網格安裝的根目錄中:
    cd 1.17.8-asm.4-distroless
  15. 為方便起見,請將 /bin 目錄中的工具新增至 PATH:
    export PATH=$PWD/bin:$PATH
  16. Windows

  17. 使用下列 OpenShift CLI (oc) 指令,將 anyuid 安全性內容限制 (SCC) 授予 istio-system:
    oc adm policy add-scc-to-group anyuid system:serviceaccounts:istio-system
  18. 將 Anthos 服務網格安裝檔案下載至目前的工作目錄:
    curl -LO https://storage.googleapis.com/gke-release/asm/1.17.8-asm.4-distroless-win.zip
  19. 下載簽名檔,並使用 OpenSSL 驗證簽名:
    curl -LO https://storage.googleapis.com/gke-release/asm/1.17.8-asm.4-distroless-win.zip.1.sig
    openssl dgst -verify - -signature 1.17.8-asm.4-distroless-win.zip.1.sig 1.17.8-asm.4-distroless.win.zip <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF
  20. 將檔案的內容解壓縮到您檔案系統上的任何位置,舉例來說,如要將內容解壓縮至目前的工作目錄,請執行下列指令:
    tar xzf 1.17.8-asm.4-distroless-win.zip

    這項指令會在目前的工作目錄中建立名為 1.17.8-asm.4-distroless 的安裝目錄,其中包含:

    • samples 目錄中的範例應用程式。
    • 您用來安裝 Anthos 服務網格的 istioctl 指令列工具位於 bin 目錄中。
    • Anthos 服務網格設定檔位於 manifests\profiles 目錄中。
  21. 確認您位於 Anthos 服務網格安裝的根目錄中:
    cd 1.17.8-asm.4-distroless
  22. 為方便起見,請將 \bin 目錄中的工具新增至 PATH:
    set PATH=%CD%\bin:%PATH%
  23. Anthos 服務網格 Istio 安裝完成後,請檢查 istioctl 的版本:
    istioctl version
  24. 為控制層元件建立名為 istio-system 的命名空間:
    kubectl create namespace istio-system

設定驗證 Webhook

安裝 Anthos 服務網格時,您會在 istiod 上設定修訂版本標籤。您需要在驗證 Webhook 上設定相同的修訂版本。

  1. 建立名為 istiod-service.yaml 的檔案,並加入以下內容:
    apiVersion: v1
    kind: Service
    metadata:
      name: istiod
      namespace: istio-system
      labels:
        istio.io/rev: asm-1178-1
        app: istiod
        istio: pilot
        release: istio
    spec:
      ports:
        - port: 15010
          name: grpc-xds # plaintext
          protocol: TCP
        - port: 15012
          name: https-dns # mTLS with k8s-signed cert
          protocol: TCP
        - port: 443
          name: https-webhook # validation and injection
          targetPort: 15017
          protocol: TCP
        - port: 15014
          name: http-monitoring # prometheus stats
          protocol: TCP
      selector:
        app: istiod
        istio.io/rev: asm-1178-1
      meshConfig:
        accessLogFormat:
          '{"start_time":"%START_TIME%","remote_address":"%DOWNSTREAM_DIRECT_REMOTE_ADDRESS%","user_agent":"%REQ(USER-AGENT)%","host":"%REQ(:AUTHORITY)%","request":"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%","request_time":"%DURATION%","status":"%RESPONSE_CODE%","status_details":"%RESPONSE_CODE_DETAILS%","bytes_received":"%BYTES_RECEIVED%","bytes_sent":"%BYTES_SENT%","upstream_address":"%UPSTREAM_HOST%","upstream_response_flags":"%RESPONSE_FLAGS%","upstream_response_time":"%RESPONSE_DURATION%","upstream_service_time":"%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%","upstream_cluster":"%UPSTREAM_CLUSTER%","x_forwarded_for":"%REQ(X-FORWARDED-FOR)%","request_method":"%REQ(:METHOD)%","request_path":"%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%","request_protocol":"%PROTOCOL%","tls_protocol":"%DOWNSTREAM_TLS_VERSION%","request_id":"%REQ(X-REQUEST-ID)%","sni_host":"%REQUESTED_SERVER_NAME%","apigee_dynamic_data":"%DYNAMIC_METADATA(envoy.lua)%"}'
  2. 使用 kubectl 套用驗證 Webhook 設定:
    kubectl apply -f istiod-service.yaml
  3. 確認設定已套用:
    kubectl get svc -n istio-system

    回覆內容應類似下方範例:

    NAME     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                                 AGE
    istiod   ClusterIP   172.200.18.133   <none>        15010/TCP,15012/TCP,443/TCP,15014/TCP   22s

安裝 Anthos 服務網格

  1. 編輯 overlay.yaml 檔案,或使用下列內容建立新檔案:
    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    spec:
      meshConfig:
        accessLogFile: /dev/stdout
        enableTracing: true
        accessLogFormat:
          '{"start_time":"%START_TIME%","remote_address":"%DOWNSTREAM_DIRECT_REMOTE_ADDRESS%","user_agent":"%REQ(USER-AGENT)%","host":"%REQ(:AUTHORITY)%","request":"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%","request_time":"%DURATION%","status":"%RESPONSE_CODE%","status_details":"%RESPONSE_CODE_DETAILS%","bytes_received":"%BYTES_RECEIVED%","bytes_sent":"%BYTES_SENT%","upstream_address":"%UPSTREAM_HOST%","upstream_response_flags":"%RESPONSE_FLAGS%","upstream_response_time":"%RESPONSE_DURATION%","upstream_service_time":"%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%","upstream_cluster":"%UPSTREAM_CLUSTER%","x_forwarded_for":"%REQ(X-FORWARDED-FOR)%","request_method":"%REQ(:METHOD)%","request_path":"%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%","request_protocol":"%PROTOCOL%","tls_protocol":"%DOWNSTREAM_TLS_VERSION%","request_id":"%REQ(X-REQUEST-ID)%","sni_host":"%REQUESTED_SERVER_NAME%","apigee_dynamic_data":"%DYNAMIC_METADATA(envoy.lua)%"}'
      components:
        ingressGateways:
          - name: istio-ingressgateway
            enabled: true
            k8s:
              service:
                type: LoadBalancer
                ports:
                - name: status-port
                  port: 15021
                  targetPort: 15021
                - name: http2
                  port: 80
                  targetPort: 8080
                - name: https
                  port: 443
                  targetPort: 8443
    
  2. 使用 asm-multicloud 設定檔,透過 istioctl 安裝 Anthos 服務網格:
    istioctl install \
        --set profile=asm-multicloud \
        --set revision="asm-1178-1" \
        --filename overlayfile.yaml

    輸出內容大致如下:

    kubectl get pods -n istio-system
    NAME                                   READY   STATUS    RESTARTS   AGE
    istio-ingressgateway-88b6fd976-flgp2   1/1     Running   0          3m13s
    istio-ingressgateway-88b6fd976-p5dl9   1/1     Running   0          2m57s
    istiod-asm-1178-1-798ffb964-2ls88       1/1     Running   0          3m21s
    istiod-asm-1178-1-798ffb964-fnj8c       1/1     Running   1          3m21s

    --set revision 引數會將修訂版本標籤新增至 istiod,格式為 istio.io/rev=1.6.11-asm.1。自動邊車容器加入器 Webhook 會使用這個標籤,將插入的 Sidecar 與特定 istiod 修訂版本建立關聯。如要為命名空間啟用 Sidecar 自動插入功能,必須使用與 istiod 標籤相符的修訂版本標籤。

  3. 確認安裝完成:
    kubectl get svc -n istio-system

    輸出內容大致如下:

    NAME                   TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                                                                      AGE
    istio-ingressgateway   LoadBalancer   172.200.48.52    34.74.177.168   15021:30479/TCP,80:30030/TCP,443:32200/TCP,15012:32297/TCP,15443:30244/TCP   3m35s
    istiod                 ClusterIP      172.200.18.133   <none>          15010/TCP,15012/TCP,443/TCP,15014/TCP                                        4m46s
    istiod-asm-1178-1       ClusterIP      172.200.63.220   <none>          15010/TCP,15012/TCP,443/TCP,15014/TCP                                        3m43s
  4. 切換至新版控制層:
    1. 取得 istiod 上的修訂版本標籤:
      kubectl get pod -n istio-system -L istio.io/rev

      指令輸出內容如下所示。

          NAME                                  READY  STATUS  RESTARTS   AGE  REV
          istiod-asm-Cloud Service Mesh 1.17.8-asm.4-67998f4b55-lrzpz    1/1    Running  0         68m  1.16.7-asm
          istiod-asm-Cloud Service Mesh 1.17.8-asm.4-67998f4b55-r76kr    1/1    Running  0         68m  1.16.7-asm
          istiod-Cloud Service Mesh 1.16.7-asm.1-1-5cd96f88f6-n7tj9      1/1    Running  0         27s  asm-1178-1
          istiod-Cloud Service Mesh 1.16.7-asm.1-1-5cd96f88f6-wm68b      1/1    Running  0         27s  asm-1178-1
    2. 將較新的修訂版本標籤指派給環境變數。

      在輸出內容的 REV 欄下方,記下新版本的修訂標籤值。在本範例中,這個值為 asm-1178-1

      export UPGRADE_REV="REVISION_LABEL"
    3. 使用下列指令,將修訂版本標籤新增至 istio-system 命名空間,並移除 istio-injection 標籤 (如有)。
      kubectl label namespace istio-system istio.io/rev=$UPGRADE_REV istio-injection- --overwrite

      如果輸出內容中顯示 "istio-injection not found",可以忽略。這表示該命名空間先前並未設定 istio-injection 標籤。如果命名空間同時有 istio-injection 和修訂版本標籤,自動插入功能就會失敗,因此 Anthos 服務網格 說明文件中的所有 kubectl label 指令都會移除 istio-injection 標籤。

    4. 重新啟動 Pod,觸發重新注入。
      kubectl rollout restart deployment -n istio-system
    5. 測試應用程式,確認工作負載是否正常運作。
    6. 如果其他命名空間也有工作負載,請重複上述步驟,為命名空間加上標籤並重新啟動 Pod。
  5. 刪除先前版本:
    1. 前往安裝 asmcli 的目錄。
    2. 建立包含下列指令的殼層指令碼:
      #!/bin/bash
      
      set -ex
      
      if [[ "${DELETE_REV}" != "${UPGRADE_REV}" ]]; then
        kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete deploy -l app=istio-ingressgateway-connectors,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete ValidatingWebhookConfiguration -l app=istiod,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete MutatingWebhookConfiguration -l app=sidecar-injector,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete IstioOperator installed-state-${DELETE_REV} -n istio-system --ignore-not-found=true
      fi
      
    3. 執行指令碼來刪除先前版本。

復原升級

如要復原先前的升級,請按照下列步驟操作:

  1. 清除混合式執行階段命名空間中已完成的工作。如果指定了命名空間,NAMESPACE 就是覆寫檔案中指定的命名空間。否則預設命名空間為 apigee:
    kubectl delete job -n NAMESPACE \
      $(kubectl get job -n NAMESPACE \
      -o=jsonpath='{.items[?(@.status.succeeded==1)].metadata.name}')
  2. 清理 apigee-system 命名空間中已完成的工作:
    kubectl delete job -n apigee-system \
      $(kubectl get job -n apigee-system \
      -o=jsonpath='{.items[?(@.status.succeeded==1)].metadata.name}')
  3. 變更 APIGEECTL_HOME 變數,指向包含舊版 apigeectl 的目錄。例如:
    export APIGEECTL_HOME=PATH_TO_PREVIOUS_APIGEECTL_DIRECTORY
  4. 復原對 overrides 檔案所做的變更:
    1. 移除或排除 ingressGateways 及其所有屬性的註解。
    2. 將 virtualhosts.selector.app 的值設為先前的值,例如:
      virtualhosts:
        - name: my-env-group
          selector:
            app: istio-ingressgateway
    3. 移除或排除 ao.args.disableIstioConfigInAPIServer 的註解。
  5. 在要復原的安裝版本根目錄中,執行 apigeectl apply,檢查 Pod 的狀態,然後執行 apigeectl init。請務必使用要復原版本的原始覆寫檔案:
    1. 在 hybrid-files 目錄中,執行 apigeectl apply:
      $APIGEECTL_HOME/apigeectl apply -f ORIGINAL_OVERRIDES_FILE

      其中 ORIGINAL_OVERRIDES_FILE 是先前版本混合式安裝的覆寫檔案相對路徑和檔案名稱,例如 ./overrides/overrides1.7.yaml。

    2. 檢查 Pod 的狀態:
      kubectl -n NAMESPACE get pods

      其中 NAMESPACE 是 Apigee Hybrid 命名空間。

    3. 檢查 apigeeds 的狀態:
      kubectl describe apigeeds -n apigee

      輸出內容大致如下:

      Status:
        Cassandra Data Replication:
        Cassandra Pod Ips:
          10.8.2.204
        Cassandra Ready Replicas:  1
        Components:
          Cassandra:
            Last Successfully Released Version:
              Revision:  v1-f8aa9a82b9f69613
              Version:   v1
            Replicas:
              Available:  1
              Ready:      1
              Total:      1
              Updated:    1
            State:        running
        Scaling:
          In Progress:         false
          Operation:
          Requested Replicas:  0
        State:                 running

      只有在 apigeeds Pod 執行時,才能繼續下一個步驟。

    4. 執行下列指令,記下升級後訊息處理器的全新副本計數值。如果這些值與您先前設定的值不符,請變更覆寫檔案中的值,使其與先前的設定相符。
      apigeectl apply -f ORIGINAL_OVERRIDES_FILE --dry-run=client --print-yaml --env ENV_NAME 2>/dev/null |grep "runtime:" -A 25 -B 1| grep "autoScaler" -A 2

      輸出內容大致如下:

            autoScaler:
              minReplicas: 2
              maxReplicas: 10
    5. 如果回溯至混合式 1.8.4 版或更早版本,請刪除混合式 1.8.5 版和更新版本使用的控制器部署作業:
      kubectl -n apigee-system delete deploy apigee-controller-manager
    6. 執行 apigeectl init:
      $APIGEECTL_HOME/apigeectl init -f ORIGINAL_OVERRIDES_FILE
  6. 刪除 Apigee 輸入閘道管理員部署作業。這個元件僅適用於 Apigee Hybrid 1.8 以上版本。
    kubectl delete deployment -n NAMESPACE apigee-ingress-gateway-manager

    其中 NAMESPACE 是 Apigee Hybrid 命名空間。