升级到 1.6.9 版概览。
以下各部分介绍升级 Apigee Hybrid 的过程:
- 备份 Hybrid 安装。
- 检查您的 Kubernetes 版本,并根据需要升级。
- 安装 Hybrid 运行时 1.6.9 版。
- 升级 ASM。
前提条件
以下升级说明假定您已安装 Apigee Hybrid 1.5 且希望升级到 1.6.9 版。如果您要从更低版本进行更新,请参阅将 Apigee Hybrid 升级到 1.5 版的说明。
升级到 1.6 版
- 以下说明将环境变量
$APIGEECTL_HOME
用于文件系统中安装apigeectl
实用程序的目录。如果需要,请使用cd
进入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.5 版
$APIGEECTL_HOME/
目录的备份副本。例如:tar -czvf $APIGEECTL_HOME/../apigeectl-v1.5-backup.tar.gz $APIGEECTL_HOME
- (推荐)按照 Cassandra 备份和恢复中的说明备份 Cassandra 数据库。
- 将 Kubernetes 平台升级到 Hybrid 1.6 支持的版本。如需帮助,请参阅该平台的相关文档。
- 如果您运行的是 v1.5.4 之前的
cert-manager
版本,则需要将其升级到 v1.5.4。-
使用以下命令检查
cert-manager
的当前版本:kubectl -n cert-manager get deployment -o yaml | grep 'image:'
将会返回类似如下的内容:
image: quay.io/jetstack/cert-manager-controller:v1.5.4 image: quay.io/jetstack/cert-manager-cainjector:v1.5.4 image: quay.io/jetstack/cert-manager-webhook:v1.5.4
-
使用以下命令移除部署:
$ kubectl delete -n cert-manager deployment cert-manager cert-manager-cainjector cert-manager-webhook
-
使用以下命令将
cert-manager
升级到 v1.5.4 版本:$ kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.4/cert-manager.yaml
-
- 创建与 Google OAUTH 令牌一起使用所需的
apigee-runtime
服务账号。使用create-service-account
工具:- 创建服务账号:
./tools/create-service-account --env prod --profile apigee-runtime
- 将新服务账号添加到 Apigee
overrides.yaml
文件中:envs: - name: "environment-name" … … … serviceAccountPaths: runtime: "path-to-service-account-file" … … …
- 创建服务账号:
- 除了
envs
下的条目之外,还会在替换文件的顶层添加udca.serviceAccountPath
属性。udca
必须出现在替换中两次,一次在环境级别,一次在组织级别,与connectAgent
、logger
、mart
、metrics
和watcher
并行。例如:
… … … metrics: serviceAccountPath: "metrics-service-account-file" udca: serviceAccountPath: "udca-service-account-file" watcher: serviceAccountPath: "watcher-service-account-file" … … …
- 可选:如果您计划使用 Cloud Trace,请确保您的
apigee-runtime
服务账号拥有 Cloud Trace Agent (roles/cloudtrace.agent
) Google 角色。您可以在 Cloud 控制台 > IAM 和管理 > 服务账号界面中或使用以下命令执行此操作:- 使用以下命令获取
apigee-runtime
服务账号的电子邮件地址:gcloud iam service-accounts list --filter "apigee-runtime"
如果它与模式
apigee-runtime@$ORG_NAME.iam.gserviceaccount.com
匹配,您可以在下一步中使用该模式。 - 将 Cloud Trace Agent 角色分配给服务账号:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-runtime@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/cloudtrace.agent"
其中,$PROJECT_ID 是安装了 Apigee Hybrid 的 Google Cloud 项目的名称。
- 使用以下命令获取
安装 Hybrid 1.6.9 运行时
- 确保您位于 Hybrid 基本目录中(
apigeectl
可执行文件所在目录的父级目录):cd $APIGEECTL_HOME/..
-
使用以下命令下载适用于您的操作系统的软件包版本。请务必在下表中选择您的平台:
Linux
Linux 64 位:
curl -LO \ https://storage.googleapis.com/apigee-release/hybrid/apigee-hybrid-setup/1.6.9/apigeectl_linux_64.tar.gz
Mac OS
Mac 64 位:
curl -LO \ https://storage.googleapis.com/apigee-release/hybrid/apigee-hybrid-setup/1.6.9/apigeectl_mac_64.tar.gz
Windows
Windows 64 位
curl -LO ^ https://storage.googleapis.com/apigee-release/hybrid/apigee-hybrid-setup/1.6.9/apigeectl_windows_64.zip
- 将当前
apigeectl/
目录重命名为备份目录名称。例如:Linux
mv $APIGEECTL_HOME/ $APIGEECTL_HOME-v1.5/
Mac OS
mv $APIGEECTL_HOME/ $APIGEECTL_HOME-v1.5/
Windows
rename %APIGEECTL_HOME% %APIGEECTL_HOME%-v1.5
-
将下载的 gzip 文件内容解压缩到 Hybrid 基本目录中。Hybrid 基本目录是重命名后的
apigeectl-v1.5
目录所在的目录:Linux
tar xvzf filename.tar.gz -C ./
Mac OS
tar xvzf filename.tar.gz -C ./
Windows
tar xvzf filename.zip -C ./
-
默认情况下,tar 内容会扩展到其名称中包含版本和平台的目录。例如:
./apigeectl_1.6.9-d591b23_linux_64
。使用以下命令将该目录重命名为apigeectl
:Linux
mv directory-name-linux apigeectl
Mac OS
mv directory-name-mac apigeectl
Windows
rename directory-name-windows apigeectl
-
切换到
apigeectl
目录:cd ./apigeectl
apigeectl
可执行文件位于此目录中。 - 以下说明将环境变量
$APIGEECTL_HOME
用于文件系统中安装apigeectl
实用程序的目录。如果需要,请使用cd
进入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.6.9
- 移至
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/OVERRIDES.yaml --dry-run=client
其中,OVERRIDES 是替换文件的名称。
- 如果没有错误,请初始化 Hybrid 1.6.9:
${APIGEECTL_HOME}/apigeectl init -f ./overrides/OVERRIDES.yaml
- 检查初始化状态:
${APIGEECTL_HOME}/apigeectl check-ready -f ./overrides/OVERRIDES.yaml
- 试运行
apply
命令以检查是否存在错误:${APIGEECTL_HOME}/apigeectl apply -f ./overrides/OVERRIDES.yaml --dry-run=client
- 如果没有错误,则应用替换文件。选择生产环境或演示/实验环境的相关说明并按照这些说明操作,具体取决于您的安装。
生产环境
对于生产环境,您应该单独升级每个 Hybrid 组件,并检查升级后的组件的状态,再继续升级下一个组件。
- 确保您位于
hybrid-files
目录中。 - 应用替换文件以升级 Cassandra:
${APIGEECTL_HOME}/apigeectl apply -f ./overrides/OVERRIDES.yaml --datastore
- 检查完成情况:
${APIGEECTL_HOME}/apigeectl check-ready -f ./overrides/OVERRIDES.yaml
仅当 Pod 准备就绪后,才继续执行下一步。
- 应用替换文件以升级遥测组件和检查完成情况:
${APIGEECTL_HOME}/apigeectl apply -f ./overrides/OVERRIDES.yaml --telemetry
${APIGEECTL_HOME}/apigeectl check-ready -f ./overrides/OVERRIDES.yaml
- 启动 Redis 组件:
${APIGEECTL_HOME}/apigeectl apply -f ./overrides/OVERRIDES.yaml --redis
- 应用替换文件以升级组织层级组件(MART、Watcher 和 Apigee Connect)并检查完成情况:
${APIGEECTL_HOME}/apigeectl apply -f ./overrides/OVERRIDES.yaml --org
${APIGEECTL_HOME}/apigeectl check-ready -f ./overrides/OVERRIDES.yaml
- 应用替换文件以升级您的环境。您有以下两种选择:
- 对每个环境逐一应用:每次将替换文件应用于一个环境,然后检查完成情况。对每个环境重复执行此步骤:
${APIGEECTL_HOME}/apigeectl apply -f ./overrides/OVERRIDES.yaml --env ENV_NAME
${APIGEECTL_HOME}/apigeectl check-ready -f ./overrides/OVERRIDES.yaml
其中,ENV_NAME 是您要升级的环境的名称。
- 同时应用于所有环境:将替换文件同时应用于所有环境,然后检查完成情况:
${APIGEECTL_HOME}/apigeectl apply -f ./overrides/OVERRIDES.yaml --all-envs
${APIGEECTL_HOME}/apigeectl check-ready -f ./overrides/OVERRIDES.yaml
- 对每个环境逐一应用:每次将替换文件应用于一个环境,然后检查完成情况。对每个环境重复执行此步骤:
演示/实验环境
在大多数演示或实验环境中,您可以将替换文件同时应用于所有组件。如果您的演示/实验环境大且复杂或非常类似于生产环境,则可能需要使用升级生产环境的说明
- 确保您位于
hybrid-files
目录中。 ${APIGEECTL_HOME}/apigeectl apply -f ./overrides/OVERRIDES.yaml
- 检查状态:
${APIGEECTL_HOME}/apigeectl check-ready -f ./overrides/OVERRIDES.yaml
- 确保您位于
-
将以下符号链接更新为
将 ASM 升级到 1.12版
使用适合您的平台的 ASM 文档执行升级:
安装和配置 ASM 的说明因平台而异。这些平台分为以下几种类别:
- GKE:在 Google Cloud 上运行的 Google Kubernetes Engine 集群。
- Google Cloud 外部:在以下位置运行的 Anthos 集群:
- Anthos clusters on VMware (GKE on-prem)
- Anthos on Bare Metal
- Anthos clusters on AWS
- Amazon EKS
- 其他 Kubernetes 平台:在以下平台上创建和运行的合规集群:
- AKS
- EKS
- OpenShift
GKE
为 Hybrid 安装升级到 ASM 1.12.9 版的顺序如下:
- 准备升级。
- 安装新版 ASM。
- 从当前安装中删除先前 ASM 版本的部署、服务和网络钩子。
- 升级网关并配置新的网络钩子。
如需升级到 GKE 上 Hybrid 的 ASM 1.12.9 版,请运行以下命令:
- 查看升级 Anthos Service Mesh 中的要求,但尚不执行升级。
- 在安装新版本之前,确定当前修订版本。您需要使用此信息从当前安装中删除先前 ASM 版本的部署、服务和网络钩子。使用以下命令将当前 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: revision: asm-1129-3 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)%"}'
- 按照 ASM 文档中以下部分的说明操作:
- 删除变更网络钩子和验证网络钩子:
- 使用
cd
进入asmcli
的安装目录。 - 将当前新修订版本存储在环境变量中,以便用于删除网络钩子的脚本:
UPGRADE_REV="asm-1129-3"
- 创建一个包含以下命令的 Shell 脚本:
#!/bin/bash set -ex PROJECT_ID="YOUR_PROJECT_ID" CLUSTER_NAME="YOUR_CLUSTER_NAME" CLUSTER_LOCATION="YOUR_CLUSTER_LOCATION" kubectl label namespace istio-system istio.io/rev=${UPGRADE_REV} istio-injection- --overwrite kubectl rollout restart deployment -n istio-system kubectl apply -n istio-system -f PATH_TO_INGRESSGATEWAYistio-ingressgateway kubectl apply -n istio-system -f PATH_TO_INGRESSGATEWAY/istio-ingressgateway-connectors if [[ "${DELETE_REV}" != "${UPGRADE_REV}" ]]; then kubectl apply -f out/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 外部
下面的说明介绍了如何在以下位置升级 ASM:
- Anthos clusters on VMware (GKE on-prem)
- Anthos on Bare Metal
- Anthos clusters on AWS
- Amazon EKS
为 Hybrid 安装升级到 ASM 1.12.9 版的顺序如下:
- 准备升级。
- 安装新版 ASM。
- 从当前安装中删除变更网络钩子和验证网络钩子。
- 升级网关并配置新的网络钩子。
- 查看升级 Anthos Service Mesh 中的要求,但尚不执行升级。
- 在安装新版本之前,确定当前修订版本。您需要使用此信息从当前 ASM 安装中删除验证网络钩子和变更网络钩子。使用以下命令将当前 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: revision: asm-1129-3 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)%"}'
- 按照 ASM 文档中以下部分的说明操作:
- 删除变更网络钩子和验证网络钩子:
- 使用
cd
进入asmcli
的安装目录。 - 将当前新修订版本存储在环境变量中,以便用于删除网络钩子的脚本:
UPGRADE_REV="asm-1129-3"
- 创建一个包含以下命令的 Shell 脚本:
#!/bin/bash set -ex PROJECT_ID="YOUR_PROJECT_ID" CLUSTER_NAME="YOUR_CLUSTER_NAME" CLUSTER_LOCATION="YOUR_CLUSTER_LOCATION" gcloud config configurations activate ${PROJECT_ID} gcloud container clusters get-credentials ${CLUSTER_NAME} --region ${CLUSTER_LOCATION} --project ${PROJECT_ID} kubectl label namespace istio-system istio.io/rev=${UPGRADE_REV} istio-injection- --overwrite kubectl rollout restart deployment -n istio-system kubectl apply -n istio-system -f PATH_TO_INGRESSGATEWAYistio-ingressgateway kubectl apply -n istio-system -f PATH_TO_INGRESSGATEWAY/istio-ingressgateway-connectors if [[ "${DELETE_REV}" != "${UPGRADE_REV}" ]]; then kubectl apply -f out/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 Service Mesh (ASM) istio-1.12.9-asm.3 版的过程与执行全新安装相同。
准备安装 Anthos Service Mesh
- 删除变更网络钩子和验证网络钩子:
- 使用
cd
进入asmcli
的安装目录。 - 将当前新修订版本存储在环境变量中,以便用于删除网络钩子的脚本:
UPGRADE_REV="asm-1129-3"
- 创建一个包含以下命令的 Shell 脚本:
#!/bin/bash set -ex kubectl label namespace istio-system istio.io/rev=${UPGRADE_REV} istio-injection- --overwrite kubectl rollout restart deployment -n istio-system if [[ "${DELETE_REV}" != "${UPGRADE_REV}" ]]; then kubectl apply -f out/asm/istio/istiod-service.yaml kubectl apply -f ASMCLI_OUTPUT_DIR/asm/istio/istiod-service.yaml ASMCLI_OUTPUT_DIR/istioctl tag set default --revision ${UPGRADE_REV} kubectl delete deploy -l app=istio-ingressgateway,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
- 执行此脚本以删除当前网络钩子。
- 使用
- 将 Anthos Service Mesh 安装文件下载到当前工作目录中:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.12.9-asm.3-linux-amd64.tar.gz
- 下载签名文件并使用 openssl 验证签名:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.12.9-asm.3-linux-amd64.tar.gz.1.sig
openssl dgst -verify /dev/stdin -signature istio-1.12.9-asm.3-linux-amd64.tar.gz.1.sig istio-1.12.9-asm.3.tar.gz <<'EOF'
-----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF - 将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:
tar xzf istio-1.12.9-asm.3-linux-amd64.tar.gz
该命令会在当前工作目录中创建一个名为
istio-1.12.9-asm.3
的安装目录,其中包含:samples
目录中的示例应用。- 用于安装 Anthos Service Mesh 的
istioctl
命令行工具位于bin
目录中。 - Anthos Service Mesh 配置文件位于
manifests/profiles
目录中。
- 确保您位于 Anthos Service Mesh 安装的根目录。
cd istio-1.12.9-asm.3
- 为方便起见,请将 /bin 目录中的工具添加到 PATH:
export PATH=$PWD/bin:$PATH
- 将 Anthos Service Mesh 安装文件下载到当前工作目录中:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.12.9-asm.3-osx.tar.gz
- 下载签名文件并使用 openssl 验证签名:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.12.9-asm.3-osx.tar.gz.1.sig
openssl dgst -sha256 -verify /dev/stdin -signature istio-1.12.9-asm.3-osx.tar.gz.1.sig istio-1.12.9-asm.3.tar.gz <<'EOF'
-----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF - 将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:
tar xzf istio-1.12.9-asm.3-osx.tar.gz
该命令会在当前工作目录中创建一个名为
istio-1.12.9-asm.3
的安装目录,其中包含:samples
目录中的示例应用。- 用于安装 Anthos Service Mesh 的
istioctl
命令行工具位于bin
目录中。 - Anthos Service Mesh 配置文件位于
manifests/profiles
目录中。
- 确保您位于 Anthos Service Mesh 安装的根目录。
cd istio-1.12.9-asm.3
- 为方便起见,请将 /bin 目录中的工具添加到 PATH:
export PATH=$PWD/bin:$PATH
- 将 Anthos Service Mesh 安装文件下载到当前工作目录中:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.12.9-asm.3-win.zip
- 下载签名文件并使用 openssl 验证签名:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.12.9-asm.3-win.zip.1.sig
openssl dgst -verify - -signature istio-1.12.9-asm.3-win.zip.1.sig istio-1.12.9-asm.3.win.zip <<'EOF'
-----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF - 将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:
tar xzf istio-1.12.9-asm.3-win.zip
该命令会在当前工作目录中创建一个名为
istio-1.12.9-asm.3
的安装目录,其中包含:samples
目录中的示例应用。- 用于安装 Anthos Service Mesh 的
istioctl
命令行工具位于bin
目录中。 - Anthos Service Mesh 配置文件位于
manifests\profiles
目录中。
- 确保您位于 Anthos Service Mesh 安装的根目录。
cd istio-1.12.9-asm.3
- 为方便起见,请将 \bin 目录中的工具添加到 PATH:
set PATH=%CD%\bin:%PATH%
- 现在,ASM Istio 已安装,请检查
istioctl
的版本:istioctl version
- 为控制平面组件创建一个名为 istio-system 的命名空间:
kubectl create namespace istio-system
Linux
Mac OS
Windows
安装 Anthos Service Mesh
- 修改
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: - enabled: true name: istio-ingressgateway 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 Service Mesh:istioctl install \ --set profile=asm-multicloud \ --set revision="asm-1129-3" \ --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-1129-3-798ffb964-2ls88 1/1 Running 0 3m21s istiod-asm-1129-3-798ffb964-fnj8c 1/1 Running 1 3m21s
--set revision
参数会将格式为istio.io/rev=asm-1129-3
的修订版本标签添加到 istiod。自动边车注入器网络钩子使用修订版本标签将注入的边车与特定 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-asm-1129-3 ClusterIP 172.200.63.220 <none> 15010/TCP,15012/TCP,443/TCP,15014/TCP 3m43s
OpenShift
在这些说明中,在 Anthos 关联的集群上升级 Anthos Service Mesh (ASM) istio-1.12.9-asm.3 版的过程与执行全新安装相同。
准备安装 Anthos Service Mesh
- 删除变更网络钩子和验证网络钩子:
- 使用
cd
进入asmcli
的安装目录。 - 将当前新修订版本存储在环境变量中,以便用于删除网络钩子的脚本:
UPGRADE_REV="asm-1129-3"
- 创建一个包含以下命令的 Shell 脚本:
#!/bin/bash set -ex kubectl label namespace istio-system istio.io/rev=${UPGRADE_REV} istio-injection- --overwrite kubectl rollout restart deployment -n istio-system kubectl apply -n istio-system -f PATH_TO_INGRESSGATEWAYistio-ingressgateway if [[ "${DELETE_REV}" != "${UPGRADE_REV}" ]]; then kubectl apply -f out/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
- 执行此脚本以删除当前网络钩子。
- 使用
- 使用以下 OpenShift CLI (
oc
) 命令向 istio-system 授予anyuid
安全上下文限制条件 (SCC):oc adm policy add-scc-to-group anyuid system:serviceaccounts:istio-system
- 将 Anthos Service Mesh 安装文件下载到当前工作目录中:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.12.9-asm.3-linux-amd64.tar.gz
- 下载签名文件并使用 openssl 验证签名:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.12.9-asm.3-linux-amd64.tar.gz.1.sig
openssl dgst -verify /dev/stdin -signature istio-1.12.9-asm.3-linux-amd64.tar.gz.1.sig istio-1.12.9-asm.3.tar.gz <<'EOF'
-----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF - 将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:
tar xzf istio-1.12.9-asm.3-linux-amd64.tar.gz
该命令会在当前工作目录中创建一个名为
istio-1.12.9-asm.3
的安装目录,其中包含:samples
目录中的示例应用。- 用于安装 Anthos Service Mesh 的
istioctl
命令行工具位于bin
目录中。 - Anthos Service Mesh 配置文件位于
manifests/profiles
目录中。
- 确保您位于 Anthos Service Mesh 安装的根目录。
cd istio-1.12.9-asm.3
- 为方便起见,请将 /bin 目录中的工具添加到 PATH:
export PATH=$PWD/bin:$PATH
- 使用以下 OpenShift CLI (
oc
) 命令向 istio-system 授予anyuid
安全上下文限制条件 (SCC):oc adm policy add-scc-to-group anyuid system:serviceaccounts:istio-system
- 将 Anthos Service Mesh 安装文件下载到当前工作目录中:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.12.9-asm.3-osx.tar.gz
- 下载签名文件并使用 openssl 验证签名:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.12.9-asm.3-osx.tar.gz.1.sig
openssl dgst -sha256 -verify /dev/stdin -signature istio-1.12.9-asm.3-osx.tar.gz.1.sig istio-1.12.9-asm.3.tar.gz <<'EOF'
-----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF - 将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:
tar xzf istio-1.12.9-asm.3-osx.tar.gz
该命令会在当前工作目录中创建一个名为
istio-1.12.9-asm.3
的安装目录,其中包含:samples
目录中的示例应用。- 用于安装 Anthos Service Mesh 的
istioctl
命令行工具位于bin
目录中。 - Anthos Service Mesh 配置文件位于
manifests/profiles
目录中。
- 确保您位于 Anthos Service Mesh 安装的根目录。
cd istio-1.12.9-asm.3
- 为方便起见,请将 /bin 目录中的工具添加到 PATH:
export PATH=$PWD/bin:$PATH
- 使用以下 OpenShift CLI (
oc
) 命令向 istio-system 授予anyuid
安全上下文限制条件 (SCC):oc adm policy add-scc-to-group anyuid system:serviceaccounts:istio-system
- 将 Anthos Service Mesh 安装文件下载到当前工作目录中:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.12.9-asm.3-win.zip
- 下载签名文件并使用 openssl 验证签名:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.12.9-asm.3-win.zip.1.sig
openssl dgst -verify - -signature istio-1.12.9-asm.3-win.zip.1.sig istio-1.12.9-asm.3.win.zip <<'EOF'
-----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF - 将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:
tar xzf istio-1.12.9-asm.3-win.zip
该命令会在当前工作目录中创建一个名为
istio-1.12.9-asm.3
的安装目录,其中包含:samples
目录中的示例应用。- 用于安装 Anthos Service Mesh 的
istioctl
命令行工具位于bin
目录中。 - Anthos Service Mesh 配置文件位于
manifests\profiles
目录中。
- 确保您位于 Anthos Service Mesh 安装的根目录。
cd istio-1.12.9-asm.3
- 为方便起见,请将 \bin 目录中的工具添加到 PATH:
set PATH=%CD%\bin:%PATH%
- 现在,ASM Istio 已安装,请检查
istioctl
的版本:istioctl version
- 为控制平面组件创建一个名为 istio-system 的命名空间:
kubectl create namespace istio-system
Linux
Mac OS
Windows
安装 Anthos Service Mesh
- 修改
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: - enabled: true name: istio-ingressgateway 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 Service Mesh:istioctl install \ --set profile=asm-multicloud \ --set revision="asm-1129-3" \ --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-1129-3-798ffb964-2ls88 1/1 Running 0 3m21s istiod-asm-1129-3-798ffb964-fnj8c 1/1 Running 1 3m21s
--set revision
参数会将格式为istio.io/rev=1.6.11-asm.1
的修订版本标签添加到 istiod。自动边车注入器网络钩子使用修订版本标签将注入的边车与特定 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-asm-1129-3 ClusterIP 172.200.63.220 <none> 15010/TCP,15012/TCP,443/TCP,15014/TCP 3m43s
回滚升级
要回滚以前的升级,请按以下步骤操作:
- 清理混合运行时命名空间的已完成作业,其中 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
- 在要回滚到的安装的根目录中,运行
${APIGEECTL_HOME}/apigeectl apply
,检查 pod 的状态,然后运行${APIGEECTL_HOME}/apigeectl init
。对于要回滚到的版本,请务必使用原始替换文件:- 在
hybrid-files
目录中,运行${APIGEECTL_HOME}/apigeectl apply
:${APIGEECTL_HOME}/apigeectl apply -f ./overrides/ORIGINAL_OVERRIDES
.yaml
- 检查您的 Pod 的状态:
kubectl -n NAMESPACE get pods
其中,NAMESPACE 是您的 Apigee Hybrid 命名空间。
- 检查
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 init
:${APIGEECTL_HOME}/apigeectl init -f ./overrides/ORIGINAL_OVERRIDES.yaml
- 在