推出 Apigee 入口閘道
自 1.8 版起,Apigee Hybrid 提供一項新功能,可管理混合式安裝環境的入口網關,也就是 Apigee 入口網關。Anthos 服務網格不再是混合式安裝作業的必要條件。使用 Apigee 入口閘道後,Apigee 就會停止向 Anthos 服務網格提供轉送設定。升級後,您必須先將流量遷移至新的 Apigee 入口閘道,才能開始使用這項功能。
Apigee 會使用 Anthos 服務網格功能的一小部分,用於入口網關。從 hybrid 1.8 起,Apigee hybrid 會納入 ingress 網關,並在 Apigee hybrid 升級時安裝及升級。因此,您不需要具備 Anthos 服務網格相關專業知識,即可安裝、升級及管理 Apigee hybrid。系統會自動處理與 ingress 網關版本相關的問題,以及與 Apigee 混合版本的相容性。
遷移的兩種情況如下:
- 多叢集或多區域遷移 (建議):
切換至新的 Apigee Ingress 前,請先將要遷移的叢集中的所有流量,轉移至其他叢集或區域。這樣您就能有時間測試新的 Apigee 入口閘道是否正常運作。然後將流量轉移回升級後的叢集。
- 原地升級 (不建議在正式環境中使用):
在升級期間,Apigee 會使用您指定的 IP 位址啟動新的入口閘道。接著,您可以測試新的 Apigee 入口網關是否正常運作,然後將流量轉移至新的入口。升級期間可能會發生停機情形。
將 Apigee Hybrid 升級至 1.8 版時,您必須在覆寫檔案中設定 Apigee 入口閘道。升級後,您可以控制叢集將使用哪種類型的輸入閘道,方法是將註冊商的 A 或 CNAME 記錄導向 Apigee 輸入閘道或 Anthos Service Mesh 的 IP 位址。
升級至 1.8.8 版總覽
升級 Apigee Hybrid 的程序分為以下幾個部分:
- 準備升級。
- 安裝混合式執行階段 1.8.8 版。
- 針對入口網關,請選擇下列其中一個選項:
- (建議做法) 使用新的 Apigee 入口網關,按照「將流量從 Anthos 服務網格切換至 Apigee 入口網關」中的步驟操作。
- 繼續使用 Anthos 服務網格來管理入站閘道。
必修課程
這些升級操作說明假設您已安裝 Apigee hybrid 1.7.x 版本或 1.8.x 版本的舊版修補程式,且想要將其升級至 1.8.8 版本。如果您要從舊版更新,請參閱將 Apigee Hybrid 升級至 1.7 版的操作說明。
如果您想繼續使用 Anthos 服務網格,請務必將 Anthos 服務網格升級至支援的版本。如要瞭解支援的 Anthos 服務網格版本,請參閱「支援的平台」表格。
準備升級至 1.8 版
備份混合式安裝 (建議)
- 這些操作說明會使用環境變數 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%
- 備份 1.7 版
$APIGEECTL_HOME/
目錄。例如:tar -czvf $APIGEECTL_HOME/../apigeectl-v1.7-backup.tar.gz $APIGEECTL_HOME
- 按照「Cassandra 備份和復原」一文中的指示備份 Cassandra 資料庫
將 Cloud Trace 代理人角色新增至 Apigee 執行階段的服務帳戶。(選用)
選用步驟:如果您打算使用 Cloud Trace,且尚未在混合式 1.7 版安裝上執行此步驟,請確認 Apigee 執行階段服務的服務帳戶具有 Cloud Trace 代理程式 Google 角色。(roles/cloudtrace.agent
)。
在實際工作環境中,這通常是 apigee-runtime
服務帳戶。在非正式環境中,這通常是 apigee-non-prod
服務帳戶。
您可以在 Cloud 控制台 > IAM 與管理員 > 服務帳戶 UI 中新增角色,也可以使用下列指令:
- 使用下列指令取得服務帳戶的電子郵件地址:
正式版
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
,您可以在下一個步驟中使用該模式。 - 將 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 入口閘道
如要安裝 Apigee 入口閘道,請在升級過程中執行這項操作。您需要在覆寫檔案中新增下列
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 是入口部署作業的名稱。這個名稱可以是符合下列規定的任何名稱:
- 長度上限為 17 個半形字元
- 只能包含小寫英數字元、連字號 (-) 或「.」。
- 開頭必須是英數字元
- 結尾須為英數字元
請參閱設定屬性參考資料中的
ingressGateways[].name
- REPLICAS_MIN 和 REPLICAS_MAX 分別是 Apigee 入口網關在安裝作業中的複本數量下限和上限。如需詳細資訊和預設設定,請參閱設定資源參考資料中的
ingressGateways[].replicaCountMin
和ingressGateways[].replicaCountMax
。 - CPU_COUNT_REQ 和 MEMORY_REQ 是安裝環境中 Apigee 入口網關每個副本的 CPU 和記憶體要求。
如需詳細資訊和預設設定,請參閱設定資源參考資料中的
ingressGateways[].resources.requests.cpu
和ingressGateways[].resources.requests.memory
。 - CPU_COUNT_LIMIT 和 MEMORY_LIMIT:安裝環境中 Apigee 入口網關每個副本的 CPU 和記憶體上限。
如需詳細資訊和預設設定,請參閱設定屬性參考資料中的
ingressGateways[].resources.limits.cpu
和ingressGateways[].resources.limits.memory
。 - SVC_ANNOTATIONS_KEY 和 SVC_ANNOTATIONS_VALUE (選用):
這是一個鍵/值組合,可為預設入口服務提供註解。雲端平台會使用註解來協助設定混合式安裝作業,例如將負載平衡器類型設為內部或外部。例如:
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 執行個體未充分利用,並提高其他 Apigee 元件的節點資源可用性。組織範圍的 UDCA 會為所有環境使用單一服務帳戶,
apigee-udca
。如果您在不同環境中使用不同的 UDCA 服務帳戶,請注意,現在會使用在覆寫檔案中以
udca:serviceAccountPath
指定的 org 層級服務帳戶,而非以envs:udca:serviceAccountPath
指定的 env 層級服務帳戶。Apigee Hybrid 1.8 版支援環境層級 UDCA。如要保留個別環境的 UDCA,請設定
orgScopedUDCA: false
。請參閱設定屬性參考資料中的
orgScopedUDCA
。 - 啟用
validateOrg
可要求嚴格驗證,確保 Apigee 機構和環境處於活動狀態,且可與overrides
檔案中指定的 Google Cloud Platform 專案搭配運作。validateOrg: true
請參閱「設定屬性參考資料」中的
validateOrg
。
安裝 Hybrid 1.8.8 執行階段
- 請確認您位於混合式基礎目錄 (
apigeectl
可執行檔所在目錄的父目錄):cd $APIGEECTL_HOME/..
-
使用下列指令,下載適用於您作業系統的版本套件。請務必在下表中選取您的平台:
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
- 將目前的
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
-
將下載的 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 ./
-
根據預設,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
-
切換至
apigeectl
目錄:cd ./apigeectl
這個目錄是
apigeectl
主目錄。這是apigeectl
可執行指令所在的位置。 - 這些操作說明會使用環境變數
$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%
- 使用
version
指令驗證apigeectl
的版本:./apigeectl version
Version: 1.8.8
- 移至
hybrid-base-directory/hybrid-files
目錄。hybrid-files
目錄是設定檔的所在位置,例如覆寫檔案、憑證和服務帳戶。例如:cd $APIGEECTL_HOME/../hybrid-files
- 使用下列指令,確認
kubectl
已設為正確的內容。目前的內容應設為您要升級 Apigee Hybrid 的叢集。kubectl config get-contexts | grep \*
- 在
hybrid-files
目錄中:-
將下列符號連結更新為
$APIGEECTL_HOME
。這些連結可讓您從hybrid-files
目錄內執行新安裝的apigeectl
指令:ln -nfs
$APIGEECTL_HOME
/tools toolsln -nfs
$APIGEECTL_HOME
/config configln -nfs
$APIGEECTL_HOME
/templates templatesln -nfs
$APIGEECTL_HOME
/plugins plugins -
如要確認符號連結是否正確建立,請執行下列指令,並確認連結路徑指向正確位置:
ls -l | grep ^l
-
將下列符號連結更新為
- 執行初始化模擬測試,檢查是否有錯誤:
${APIGEECTL_HOME}/apigeectl init -f OVERRIDES_FILE --dry-run=client
其中 OVERRIDES_FILE 是覆寫檔案的名稱,例如
./overrides/overrides.yaml
。 - 如果沒有任何錯誤,請初始化混合型 1.8.8。這項指令也會安裝及設定 Apigee 入口閘道:
$APIGEECTL_HOME/apigeectl init -f OVERRIDES_FILE
- 檢查初始化狀態:
$APIGEECTL_HOME/apigeectl check-ready -f OVERRIDES_FILE
成功之後,輸出內容會顯示:
All containers ready.
您也可以執行下列指令,進一步檢查 ApigeeDataStore 狀態:
kubectl describe apigeeds -n apigee
在輸出內容中,找出
State: running
。 - 使用
--dry-run
標記,執行apply
指令的模擬測試,檢查是否有錯誤:$APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE --dry-run=client
- 如果沒有任何錯誤,請套用覆寫值。請根據安裝作業,選取並遵循正式環境或非正式環境的操作說明。
生產
在實際環境中,您應個別升級每個混合型元件,並在繼續升級其他元件前,先檢查已升級元件的狀態。
- 確認您位於
hybrid-files
目錄。 - 套用覆寫值來升級 Cassandra:
$APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE --datastore
- 檢查完成情況:
$APIGEECTL_HOME/apigeectl check-ready -f OVERRIDES_FILE
只有在 Pod 就緒時,才繼續執行下一個步驟。
- 套用覆寫值來升級遙測元件,並檢查完成情況:
$APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE --telemetry
$APIGEECTL_HOME/apigeectl check-ready -f OVERRIDES_FILE
- 啟動 Redis 元件:
$APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE --redis
- 套用覆寫值來升級機構層級元件 (MART、Watcher 和 Apigee Connect),並檢查完成情況:
$APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE --org
$APIGEECTL_HOME/apigeectl check-ready -f OVERRIDES_FILE
- 套用覆寫值來升級環境。您有兩種選擇:
- 逐一環境:一次將覆寫值套用至一個環境,並檢查是否完成。針對每個環境重複執行這個步驟:
$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
- 逐一環境:一次將覆寫值套用至一個環境,並檢查是否完成。針對每個環境重複執行這個步驟:
- 套用覆寫值來升級
virtualhosts
元件,並檢查完成情形:$APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE --settings virtualhosts
$APIGEECTL_HOME/apigeectl check-ready -f OVERRIDES_FILE
非正式環境
在大多數非正式環境、示範或實驗環境中,您可以將覆寫值一次套用至所有元件。如果非正式環境龐大且複雜,或與正式環境相似,建議您按照升級正式環境的操作說明進行操作。
- 確認您位於
hybrid-files
目錄。 $APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE
- 查看狀態:
$APIGEECTL_HOME/apigeectl check-ready -f OVERRIDES_FILE
- 確認您位於
升級 Kubernetes 版本
將 Kubernetes 平台升級至 hybrid 1.8 支援的版本。如需協助,請參閱平台的說明文件。
將流量從 Anthos 服務網格切換至 Apigee 入口網關
如要將流量切換至 Apigee 輸入閘道,請按照下列步驟操作:
- 公開 Apigee 輸入閘道。請按照「公開 Apigee 入口閘道」中的程序操作。
- 請呼叫 Proxy,測試新的入口網關。建議您測試目前已部署的所有重要 Proxy。
- 如要切換流量,請更新 DNS 記錄,讓其指向新的 Apigee 入口閘道 IP 位址。視 DNS 供應商而定,您可能可以逐步將流量轉移至新端點。
提示: 您可以使用下列指令找出 Apigee 輸入閘道的外部 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
- 監控資訊主頁,確保所有執行階段流量都能正常運作。只有在一切運作正常時,才能繼續進行下一個步驟。請確認沒有任何流量會透過舊的入口閘道 (Anthos 服務網格),因為 DNS 快取可能會導致 DNS 更新傳播速度變慢。
- 如要停止 Apigee 向 Anthos 服務網格提供設定,請按照「管理 Apigee 入口閘道」指南中的「停止向 ASM 提供設定」一節所述步驟操作。
- 重新測試並監控 API Proxy 流量。
- 按照 Anthos 服務網格說明文件中的指示,從叢集中解除安裝 Anthos 服務網格。
將 Anthos 服務網格升級至 1.15 版
使用適合您平台的 Anthos 服務網格說明文件執行程序:
安裝及設定 Anthos 服務網格的操作說明會因平台而異。平台分為下列類別:
- GKE:在 Google Cloud 上執行的 Google Kubernetes Engine 叢集。
- Google Cloud 以外:在下列系統上執行的 Anthos 叢集:
- VMware 中的 Anthos 叢集 (GKE On-Prem)
- 裸機中的 Anthos
- AWS 中的 Anthos 叢集
- Amazon EKS
- 其他 Kubernetes 平台:在下列系統上建立及執行符合標準的叢集:
- AKS
- EKS
- OpenShift
GKE
針對混合式安裝作業升級至 Anthos 服務網格版本 的順序如下:
- 準備升級。
- 安裝新版 Anthos 服務網格。
- 從目前的已安裝環境中刪除先前 Anthos 服務網格版本的部署作業、服務和 webhook。
- 升級閘道並設定新的 webhook。
準備將 Anthos 服務網格升級至版本
一文中的操作說明進行操作- 查看「升級 Anthos 服務網格」中的相關規定,但暫時不要執行升級作業。
- 在安裝新版本前,請先確認目前的修訂版本。您需要這項資訊,才能從目前安裝的系統中刪除先前 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
輸出內容應類似
- 建立新的
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)%"}'
- 請按照 Anthos 服務網格說明文件中以下各節的操作說明進行:
- 下載 asmcli
- 授予叢集管理員權限
- 驗證專案和叢集
- 升級至含選用功能的方案。在開始「升級網關」部分之前先停止。
- 切換至新的控制層:
- 取得
istiod
上的修訂版本標籤:kubectl get pod -n istio-system -L istio.io/rev
指令的輸出內容會與下列內容類似。
NAME READY STATUS RESTARTS AGE REV istiod-asm--67998f4b55-lrzpz 1/1 Running 0 68m istiod-asm--67998f4b55-r76kr 1/1 Running 0 68m istiod--1-5cd96f88f6-n7tj9 1/1 Running 0 27s istiod--1-5cd96f88f6-wm68b 1/1 Running 0 27s
- 將較新的修訂版本標籤指派給環境變數。
在輸出內容的
REV
欄下,記下新版本修訂版本標籤的值。在這個範例中,這個值為export UPGRADE_REV="REVISION_LABEL"
- 將修訂版本標籤新增至
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
標籤。 - 重新啟動 Pod 以觸發重新注入。
kubectl rollout restart deployment -n istio-system
- 測試應用程式,確認工作負載是否正常運作。
- 如果工作負載位於其他命名空間中,請重複執行上述步驟,為命名空間加上標籤並重新啟動 Pod。
- 取得
- 刪除先前版本:
- 前往安裝
asmcli
的目錄。 - 將 Anthos 服務網格安裝作業的輸出目錄儲存在
DIR_PATH
環境變數中。這個目錄與您在使用選用功能升級程序中指定的目錄相同。export DIR_PATH=OUTPUT_DIR
- 建立包含下列指令的指令碼:
#!/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
- 執行指令碼來刪除先前版本。
- 前往安裝
Google Cloud 以外
本說明涵蓋以下主題:
- VMware 中的 Anthos 叢集 (GKE On-Prem)
- 裸機中的 Anthos
- AWS 中的 Anthos 叢集
- Amazon EKS
針對混合式安裝作業升級至 Anthos 服務網格版本 的順序如下:
- 準備升級。
- 安裝新版 Anthos 服務網格。
- 從目前的已安裝環境中刪除先前 Anthos 服務網格版本的部署作業、服務和 webhook。
- 升級閘道並設定新的 webhook。
準備將 Anthos 服務網格升級至 版本
一文中的操作說明進行操作- 查看「升級 Anthos 服務網格」中的相關規定,但暫時不要執行升級作業。
- 在安裝新版本前,請先確認目前的修訂版本。您需要這項資訊,才能從目前安裝的系統中刪除先前 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
輸出內容應類似
- 建立新的
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)%"}'
- 請按照 Anthos 服務網格說明文件中以下各節的操作說明進行:
- 下載 asmcli
- 授予叢集管理員權限
- 驗證專案和叢集
- 升級至含選用功能的方案。請先停止,再開始「升級網關」部分。
- 切換至新的控制層:
- 取得
istiod
上的修訂版本標籤:kubectl get pod -n istio-system -L istio.io/rev
指令的輸出內容會與下列內容類似。
NAME READY STATUS RESTARTS AGE REV istiod-asm--67998f4b55-lrzpz 1/1 Running 0 68m istiod-asm--67998f4b55-r76kr 1/1 Running 0 68m istiod--1-5cd96f88f6-n7tj9 1/1 Running 0 27s istiod--1-5cd96f88f6-wm68b 1/1 Running 0 27s
- 將較新的修訂版本標籤指派給環境變數。
在輸出內容的
REV
欄下,記下新版本修訂版本標籤的值。在這個範例中,這個值為export UPGRADE_REV="REVISION_LABEL"
- 將修訂版本標籤新增至
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
標籤。 - 重新啟動 Pod 以觸發重新注入。
kubectl rollout restart deployment -n istio-system
- 測試應用程式,確認工作負載是否正常運作。
- 如果工作負載位於其他命名空間中,請重複執行上述步驟,為命名空間加上標籤並重新啟動 Pod。
- 取得
- 刪除先前版本:
- 前往安裝
asmcli
的目錄。 - 將 Anthos 服務網格安裝作業的輸出目錄儲存在
DIR_PATH
環境變數中。這個目錄與您在使用選用功能升級程序中指定的目錄相同。export DIR_PATH=OUTPUT_DIR
- 建立包含下列指令的指令碼:
#!/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
- 執行指令碼來刪除先前版本。
- 前往安裝
AKS / EKS
在這些操作說明中,在 Anthos 已連結叢集中升級 Anthos 服務網格 (Anthos Service Mesh) 的程序,與執行全新安裝程序相同。
準備安裝 Anthos 服務網格
- 在安裝新版本之前,請先確認目前的修訂版本。您需要這項資訊,才能從目前的 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
輸出內容應如下所示:
- 將 Anthos 服務網格安裝檔案下載至目前的工作目錄:
curl -LO https://storage.googleapis.com/gke-release/asm/-linux-amd64.tar.gz
- 下載簽章檔案,並使用 OpenSSL 驗證簽章:
curl -LO https://storage.googleapis.com/gke-release/asm/-linux-amd64.tar.gz.1.sig
openssl dgst -verify /dev/stdin -signature -linux-amd64.tar.gz.1.sig .tar.gz <<'EOF'
-----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF - 將檔案的內容解壓縮到您檔案系統上的任何位置,例如,如要將內容擷取至目前的工作目錄:
tar xzf -linux-amd64.tar.gz
這個指令會在目前工作目錄中建立名為
的安裝目錄,其中包含:
samples
目錄中的範例應用程式。- 用來安裝 Anthos 服務網格的
istioctl
指令列工具位於bin
目錄中。 - Anthos 服務網格設定檔位於
manifests/profiles
目錄中。
- 請確認您位於 Anthos 服務網格安裝的根目錄中:
cd
- 為方便起見,請將
/bin
目錄中的工具新增至PATH
:export PATH=$PWD/bin:$PATH
- 將 Anthos 服務網格安裝檔案下載至目前的工作目錄:
curl -LO https://storage.googleapis.com/gke-release/asm/-osx.tar.gz
- 下載簽章檔案,並使用 OpenSSL 驗證簽章:
curl -LO https://storage.googleapis.com/gke-release/asm/-osx.tar.gz.1.sig
openssl dgst -sha256 -verify /dev/stdin -signature -osx.tar.gz.1.sig .tar.gz <<'EOF'
-----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF - 將檔案的內容解壓縮到您檔案系統上的任何位置,例如,如要將內容擷取至目前的工作目錄:
tar xzf -osx.tar.gz
這個指令會在名為
的目前工作目錄中建立安裝目錄,其中包含:
samples
目錄中的範例應用程式。- 用來安裝 Anthos 服務網格的
istioctl
指令列工具位於bin
目錄中。 - Anthos 服務網格設定檔位於
manifests/profiles
目錄中。
- 請確認您位於 Anthos 服務網格安裝的根目錄中:
cd
- 為方便起見,請將
/bin
目錄中的工具新增至PATH
:export PATH=$PWD/bin:$PATH
- 將 Anthos 服務網格安裝檔案下載至目前的工作目錄:
curl -LO https://storage.googleapis.com/gke-release/asm/-win.zip
- 下載簽章檔案,並使用 OpenSSL 驗證簽章:
curl -LO https://storage.googleapis.com/gke-release/asm/-win.zip.1.sig
openssl dgst -verify - -signature -win.zip.1.sig .win.zip <<'EOF'
-----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF - 將檔案的內容解壓縮到您檔案系統上的任何位置,例如,如要將內容擷取至目前的工作目錄:
tar xzf -win.zip
這個指令會在目前工作目錄中建立名為
的安裝目錄,其中包含:
samples
目錄中的範例應用程式。- 用來安裝 Anthos 服務網格的
istioctl
指令列工具位於bin
目錄中。 - Anthos 服務網格設定檔位於
manifests\profiles
目錄中。
- 請確認您位於 Anthos 服務網格安裝的根目錄中:
cd
- 為方便起見,請將 \bin 目錄中的工具新增至 PATH:
set PATH=%CD%\bin:%PATH%
- 在安裝 Anthos 服務網格 Istio 後,請檢查
istioctl
的版本:istioctl version
- 為控制平面元件建立名為 istio-system 的命名空間:
kubectl create namespace istio-system
Linux
Mac OS
Windows
安裝 Anthos 服務網格
- 編輯
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
- 使用
asm-multicloud
設定檔,透過istioctl
安裝 Anthos 服務網格:istioctl install \ --set profile=asm-multicloud \ --set revision="" \ --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--798ffb964-2ls88 1/1 Running 0 3m21s istiod--798ffb964-fnj8c 1/1 Running 1 3m21s
--set revision
引數會將格式為istio.io/rev=
的修訂版本標籤新增至istiod
。自動附加元件注入器 webhook 會使用修訂版本標籤,將注入的附加元件與特定istiod
修訂版本建立關聯。如要為命名空間啟用自動補充功能,您必須使用與istiod
上的標籤相符的修訂版本標示命名空間。 - 確認安裝作業已完成:
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- ClusterIP 172.200.63.220 <none> 15010/TCP,15012/TCP,443/TCP,15014/TCP 3m43s
- 切換至新的控制層:
- 取得
istiod
上的修訂版本標籤:kubectl get pod -n istio-system -L istio.io/rev
指令的輸出內容會與下列內容類似。
NAME READY STATUS RESTARTS AGE REV istiod-asm--67998f4b55-lrzpz 1/1 Running 0 68m istiod-asm--67998f4b55-r76kr 1/1 Running 0 68m istiod--1-5cd96f88f6-n7tj9 1/1 Running 0 27s istiod--1-5cd96f88f6-wm68b 1/1 Running 0 27s
- 將較新的修訂版本標籤指派給環境變數。
在輸出內容的
REV
欄下,記下新版本修訂版本標籤的值。在這個範例中,這個值為export UPGRADE_REV="REVISION_LABEL"
- 將修訂版本標籤新增至
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
標籤。 - 重新啟動 Pod 以觸發重新注入。
kubectl rollout restart deployment -n istio-system
- 測試應用程式,確認工作負載是否正常運作。
- 如果工作負載位於其他命名空間中,請重複執行上述步驟,為命名空間加上標籤並重新啟動 Pod。
- 取得
- 刪除先前版本:
- 前往安裝
asmcli
的目錄。 - 建立包含下列指令的指令碼:
#!/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
- 執行指令碼來刪除先前版本。
- 前往安裝
OpenShift
在這些操作說明中,在 Anthos 已連結叢集中升級 Anthos 服務網格 (Anthos Service Mesh) 版本的程序,與執行全新安裝程序相同。
準備安裝 Anthos 服務網格
- 在安裝新版本前,請先確認目前的修訂版本。您需要這項資訊,才能從目前的 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
輸出內容應類似
- 使用下列 OpenShift CLI (
oc
) 指令,將anyuid
安全性內容限制 (SCC) 授予 istio-system:oc adm policy add-scc-to-group anyuid system:serviceaccounts:istio-system
- 將 Anthos 服務網格安裝檔案下載至目前的工作目錄:
curl -LO https://storage.googleapis.com/gke-release/asm/-linux-amd64.tar.gz
- 下載簽章檔案,並使用 OpenSSL 驗證簽章:
curl -LO https://storage.googleapis.com/gke-release/asm/-linux-amd64.tar.gz.1.sig
openssl dgst -verify /dev/stdin -signature -linux-amd64.tar.gz.1.sig .tar.gz <<'EOF'
-----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF - 將檔案的內容解壓縮到您檔案系統上的任何位置,例如,如要將內容擷取至目前的工作目錄:
tar xzf -linux-amd64.tar.gz
這個指令會在目前工作目錄中建立名為
的安裝目錄,其中包含:
samples
目錄中的範例應用程式。- 用來安裝 Anthos 服務網格的
istioctl
指令列工具位於bin
目錄中。 - Anthos 服務網格設定檔位於
manifests/profiles
目錄中。
- 請確認您位於 Anthos 服務網格安裝的根目錄中:
cd
- 為方便起見,請將
/bin
目錄中的工具新增至PATH
:export PATH=$PWD/bin:$PATH
- 使用下列 OpenShift CLI (
oc
) 指令,將anyuid
安全性內容限制 (SCC) 授予 istio-system:oc adm policy add-scc-to-group anyuid system:serviceaccounts:istio-system
- 將 Anthos 服務網格安裝檔案下載至目前的工作目錄:
curl -LO https://storage.googleapis.com/gke-release/asm/-osx.tar.gz
- 下載簽章檔案,並使用 OpenSSL 驗證簽章:
curl -LO https://storage.googleapis.com/gke-release/asm/-osx.tar.gz.1.sig
openssl dgst -sha256 -verify /dev/stdin -signature -osx.tar.gz.1.sig .tar.gz <<'EOF'
-----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF - 將檔案的內容解壓縮到您檔案系統上的任何位置,例如,如要將內容擷取至目前的工作目錄:
tar xzf -osx.tar.gz
這個指令會在目前工作目錄中建立名為
的安裝目錄,其中包含:
samples
目錄中的範例應用程式。- 用來安裝 Anthos 服務網格的
istioctl
指令列工具位於bin
目錄中。 - Anthos 服務網格設定檔位於
manifests/profiles
目錄中。
- 請確認您位於 Anthos 服務網格安裝的根目錄中:
cd
- 為方便起見,請將
/bin
目錄中的工具新增至PATH
:export PATH=$PWD/bin:$PATH
- 使用下列 OpenShift CLI (
oc
) 指令,將anyuid
安全性內容限制 (SCC) 授予 istio-system:oc adm policy add-scc-to-group anyuid system:serviceaccounts:istio-system
- 將 Anthos 服務網格安裝檔案下載至目前的工作目錄:
curl -LO https://storage.googleapis.com/gke-release/asm/-win.zip
- 下載簽章檔案,並使用 OpenSSL 驗證簽章:
curl -LO https://storage.googleapis.com/gke-release/asm/-win.zip.1.sig
openssl dgst -verify - -signature -win.zip.1.sig .win.zip <<'EOF'
-----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF - 將檔案的內容解壓縮到您檔案系統上的任何位置,例如,如要將內容擷取至目前的工作目錄:
tar xzf -win.zip
這個指令會在目前工作目錄中建立名為
的安裝目錄,其中包含:
samples
目錄中的範例應用程式。- 用來安裝 Anthos 服務網格的
istioctl
指令列工具位於bin
目錄中。 - Anthos 服務網格設定檔位於
manifests\profiles
目錄中。
- 請確認您位於 Anthos 服務網格安裝的根目錄中:
cd
- 為方便起見,請將 \bin 目錄中的工具新增至 PATH:
set PATH=%CD%\bin:%PATH%
- 在安裝 Anthos 服務網格 Istio 後,請檢查
istioctl
的版本:istioctl version
- 為控制平面元件建立名為 istio-system 的命名空間:
kubectl create namespace istio-system
Linux
Mac OS
Windows
設定驗證 Webhook
安裝 Anthos 服務網格時,您會在 istiod
上設定修訂版本標籤。您需要在驗證 webhook 上設定相同的修訂版本。
- 建立名為
istiod-service.yaml
的檔案,並在其中加入下列內容:apiVersion: v1 kind: Service metadata: name: istiod namespace: istio-system labels: istio.io/rev: 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: 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)%"}'
- 使用
kubectl
套用驗證 Webhook 設定:kubectl apply -f istiod-service.yaml
- 驗證是否已套用設定:
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 服務網格
- 編輯
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
- 使用
asm-multicloud
設定檔,透過istioctl
安裝 Anthos 服務網格:istioctl install \ --set profile=asm-multicloud \ --set revision="" \ --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--798ffb964-2ls88 1/1 Running 0 3m21s istiod--798ffb964-fnj8c 1/1 Running 1 3m21s
--set revision
引數會將格式為istio.io/rev=1.6.11-asm.1
的修訂版本標籤新增至istiod
。自動附加元件注入器 webhook 會使用修訂版本標籤,將注入的附加元件與特定istiod
修訂版本建立關聯。如要為命名空間啟用自動補充功能,您必須使用與istiod
上的標籤相符的修訂版本標示命名空間。 - 確認安裝作業已完成:
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- ClusterIP 172.200.63.220 <none> 15010/TCP,15012/TCP,443/TCP,15014/TCP 3m43s
- 切換至新的控制層:
- 取得
istiod
上的修訂版本標籤:kubectl get pod -n istio-system -L istio.io/rev
指令的輸出內容會與下列內容類似。
NAME READY STATUS RESTARTS AGE REV istiod-asm--67998f4b55-lrzpz 1/1 Running 0 68m istiod-asm--67998f4b55-r76kr 1/1 Running 0 68m istiod--1-5cd96f88f6-n7tj9 1/1 Running 0 27s istiod--1-5cd96f88f6-wm68b 1/1 Running 0 27s
- 將較新的修訂版本標籤指派給環境變數。
在輸出內容的
REV
欄下,記下新版本修訂版本標籤的值。在這個範例中,這個值為export UPGRADE_REV="REVISION_LABEL"
- 將修訂版本標籤新增至
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
標籤。 - 重新啟動 Pod 以觸發重新注入。
kubectl rollout restart deployment -n istio-system
- 測試應用程式,確認工作負載是否正常運作。
- 如果工作負載位於其他命名空間中,請重複執行上述步驟,為命名空間加上標籤並重新啟動 Pod。
- 取得
- 刪除先前版本:
- 前往安裝
asmcli
的目錄。 - 建立包含下列指令的指令碼:
#!/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
- 執行指令碼來刪除先前版本。
- 前往安裝
復原升級
如要還原先前的升級,請按照下列步驟操作:
- 清理混合式執行階段命名空間的已完成工作,其中 NAMESPACE 是覆寫檔案中指定的命名空間 (如果您已指定命名空間)。如未指定,預設命名空間為
apigee
:kubectl delete job -n NAMESPACE \ $(kubectl get job -n NAMESPACE \ -o=jsonpath='{.items[?(@.status.succeeded==1)].metadata.name}')
- 清理
apigee-system
命名空間的已完成工作:kubectl delete job -n apigee-system \ $(kubectl get job -n apigee-system \ -o=jsonpath='{.items[?(@.status.succeeded==1)].metadata.name}')
- 變更
APIGEECTL_HOME
變數,讓其指向包含舊版apigeectl
的目錄。例如:export APIGEECTL_HOME=PATH_TO_PREVIOUS_APIGEECTL_DIRECTORY
- 復原
overrides
檔案的變更:- 移除或註解
ingressGateways
及其所有屬性。 - 將
virtualhosts.selector.app
的值設為先前的值,例如:virtualhosts: - name: my-env-group selector: app: istio-ingressgateway
- 移除或註解
ao.args.disableIstioConfigInAPIServer
。
- 移除或註解
- 在要回溯至的安裝根目錄中,執行
apigeectl apply
,檢查 Pod 狀態,然後執行apigeectl init
。請務必使用原始覆寫檔案,以便還原至所需版本:- 在 hybrid-files 目錄中執行
apigeectl apply
:$APIGEECTL_HOME
/apigeectl apply -f ORIGINAL_OVERRIDES_FILE其中 ORIGINAL_OVERRIDES_FILE 是舊版混合式安裝的覆寫檔案相對路徑和檔案名稱,例如
./overrides/overrides1.7.yaml
。 - 請檢查這些 pod 的狀態:
kubectl -n NAMESPACE get pods
其中 NAMESPACE 是 Apigee 混合式命名空間。
- 檢查
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 執行時,才能繼續進行下一個步驟。 - 執行下列指令,記下升級後訊息處理器的新複本計數值。如果這些值與先前設定的值不符,請變更覆寫檔案中的值,以符合先前的設定。
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
-
如果您要回溯至混合式 1.8.4 以下版本,請刪除混合式 1.8.5 以上版本所使用的控制器部署作業:
kubectl -n apigee-system delete deploy apigee-controller-manager
- 執行
apigeectl init
:$APIGEECTL_HOME
/apigeectl init -f ORIGINAL_OVERRIDES_FILE
- 在 hybrid-files 目錄中執行
- 刪除 Apigee 入口閘道管理工具部署。這個元件僅適用於 Apigee Hybrid 1.8 以上版本。
kubectl delete deployment -n NAMESPACE apigee-ingress-gateway-manager
其中 NAMESPACE 是 Apigee 混合式命名空間。