此过程涉及从 Apigee Hybrid 1.14.x 版升级到 Apigee Hybrid 1.15.0 版。
相对于 Apigee Hybrid v1.14 的更改
请注意以下更改:
-
对大消息载荷的支持:从 1.15 版以及 1.14.2 补丁版本开始,Apigee 现在支持高达 30MB 的消息载荷。如需了解详情,请参阅以下主题:
- 在 Apigee Hybrid 中配置大型消息载荷支持
- 配置属性参考文档中的
runtime.resources.limits.memory
。 - 配置属性参考文档中的
runtime.resources.requests.memory
。
- 更严格的类实例化检查:Apigee Hybrid 的 JavaCallout 政策现在在 Java 类实例化期间包含额外的安全功能。增强型安全措施可防止部署直接或间接尝试执行不允许的操作的政策。
在大多数情况下,现有政策将继续按预期发挥作用,不会出现任何问题。不过,依赖于第三方库的政策或包含间接触发需要提升权限的操作的自定义代码的政策可能会受到影响。
如需详细了解 Hybrid 1.14 版中的功能,请参阅 Apigee Hybrid v1.14.0 版本说明。
前提条件
升级到 Hybrid 1.15 版之前,请确保您的安装满足以下要求:
- 如果 Hybrid 安装运行的版本低于 v1.14,则在升级到 v1.15 之前,您必须先升级到 1.14 版。请参阅将 Apigee Hybrid 升级到 1.14 版。
- Helm v3.14.2+ 版。
kubectl
:适合 Kubernetes 平台版本的受支持的kubectl
版本。请参阅受支持的平台和版本:kubectl
。- cert-manager:受支持的 cert-manager 版本。请参阅受支持的平台和版本:cert-manager。如果需要,您会在下面的准备升级到 1.15 版部分中升级 cert-manager。
在升级到 1.15.0 之前 - 限制和重要注意事项
Apigee Hybrid 1.15.0 引入了新的增强型单环境代理限制,可让您在单个环境中部署更多代理和共享流。如需了解每个环境可部署的代理和共享流数量的限制,请参阅限制:API 代理。此功能仅适用于新创建的 Hybrid 组织,无法应用于升级后的组织。如需使用此功能,请执行 Hybrid 1.15.0 的全新安装,然后创建新的组织。
此功能仅在 2024 年订阅方案中提供,并受该订阅授予的权益的约束。如需详细了解此功能,请参阅增强型个别环境代理限制。
升级到 Apigee Hybrid 1.15 版可能需要停机。
将 Apigee 控制器升级到 1.15.0 版时,所有 Apigee 部署都将执行滚动式重启。为了最大限度地减少滚动重启期间生产混合环境中的停机时间,请确保您至少(在相同或不同的区域/数据中心)运行两个集群。将所有生产流量转移到单个集群并且让您要升级的集群下线,然后继续执行升级过程。对每个集群重复执行此过程。
Apigee 建议您在开始升级后,应尽快升级所有集群,以降低影响生产的可能性。第一个集群升级后,其余所有集群必须在何时升级是没有限制的。但是,在所有剩余集群升级之前,Cassandra 备份和恢复不能使用混合版本。例如,Hybrid 1.14 的备份不能用于恢复 Hybrid 1.15 实例。
在升级过程中,管理平面的更改无需完全暂停。下面的升级说明中列出了对管理平面更改的所有必需的临时暂停操作。
升级到 1.15.0 版概览
以下各部分介绍升级 Apigee Hybrid 的过程:
准备升级到 1.15 版
备份 Hybrid 安装
- 这些说明将环境变量 APIGEE_HELM_CHARTS_HOME 用于文件系统中安装了 Helm 图表的目录。如果需要,请切换到此目录,然后使用以下命令定义变量:
Linux
export APIGEE_HELM_CHARTS_HOME=$PWD
echo $APIGEE_HELM_CHARTS_HOME
Mac OS
export APIGEE_HELM_CHARTS_HOME=$PWD
echo $APIGEE_HELM_CHARTS_HOME
Windows
set APIGEE_HELM_CHARTS_HOME=%CD%
echo %APIGEE_HELM_CHARTS_HOME%
- 创建 1.14 版
$APIGEE_HELM_CHARTS_HOME/
目录的备份副本。您可以使用任何备份过程。例如,您可以使用以下命令创建整个目录的tar
文件:tar -czvf $APIGEE_HELM_CHARTS_HOME/../apigee-helm-charts-v1.14-backup.tar.gz $APIGEE_HELM_CHARTS_HOME
- 按照 Cassandra 备份和恢复中的说明备份 Cassandra 数据库。
- 如果您使用替换文件中的服务证书文件 (
.json
) 对服务账号进行身份验证,请确保服务账号证书文件位于正确的 Helm 图表目录中。Helm 图表无法读取每个图表目录之外的文件。如果您使用 Kubernetes Secret 或 Workload Identity Federation for GKE 对服务账号进行身份验证,则无需执行此步骤。
下表展示了每个服务账号文件的目标位置,具体取决于您的安装类型:
生产
服务账号 默认文件名 Helm 图表目录 apigee-cassandra
PROJECT_ID-apigee-cassandra.json
$APIGEE_HELM_CHARTS_HOME/apigee-datastore/
apigee-logger
PROJECT_ID-apigee-logger.json
$APIGEE_HELM_CHARTS_HOME/apigee-telemetry/
apigee-mart
PROJECT_ID-apigee-mart.json
$APIGEE_HELM_CHARTS_HOME/apigee-org/
apigee-metrics
PROJECT_ID-apigee-metrics.json
$APIGEE_HELM_CHARTS_HOME/apigee-telemetry/
apigee-runtime
PROJECT_ID-apigee-runtime.json
$APIGEE_HELM_CHARTS_HOME/apigee-env
apigee-synchronizer
PROJECT_ID-apigee-synchronizer.json
$APIGEE_HELM_CHARTS_HOME/apigee-env/
apigee-udca
PROJECT_ID-apigee-udca.json
$APIGEE_HELM_CHARTS_HOME/apigee-org/
apigee-watcher
PROJECT_ID-apigee-watcher.json
$APIGEE_HELM_CHARTS_HOME/apigee-org/
非生产
创建以下每个目录中的
apigee-non-prod
服务账号文件的副本:服务账号 默认文件名 Helm 图表目录 apigee-non-prod
PROJECT_ID-apigee-non-prod.json
$APIGEE_HELM_CHARTS_HOME/apigee-datastore/
$APIGEE_HELM_CHARTS_HOME/apigee-telemetry/
$APIGEE_HELM_CHARTS_HOME/apigee-org/
$APIGEE_HELM_CHARTS_HOME/apigee-env/
-
确保您的 TLS 证书和密钥文件(
.crt
、.key
和/或.pem
)位于$APIGEE_HELM_CHARTS_HOME/apigee-virtualhost/
目录中。
升级 Kubernetes 版本
检查您的 Kubernetes 平台版本,并根据需要将 Kubernetes 平台升级到 Hybrid 1.14 和 Hybrid 1.15 均支持的版本。如需帮助,请参阅该平台的相关文档。
移除 Istio CRD
Apigee Hybrid 集群中存在 istio.io
自定义资源定义 (CRD) 可能会导致 apigee-ingressgateway-manager
Pod 失败。
如需详细了解 Apigee Hybrid 中的 istio.io
CRD,请参阅已知问题 416634326。
-
使用以下命令确定您的集群中是否有
istio.io
CRD:kubectl get crd -o custom-columns=NAME:metadata.name | grep istio.io
如果您的集群有
istio.io
CRD,输出将如下所示:kubectl get crd -o custom-columns=NAME:metadata.name | grep istio.io
authorizationpolicies.security.istio.io destinationrules.networking.istio.io envoyfilters.networking.istio.io gateways.networking.istio.io peerauthentications.security.istio.io proxyconfigs.networking.istio.io requestauthentications.security.istio.io serviceentries.networking.istio.io sidecars.networking.istio.io telemetries.telemetry.istio.io virtualservices.networking.istio.io wasmplugins.extensions.istio.io workloadentries.networking.istio.io workloadgroups.networking.istio.io - 可选:将 CRD 保存到本地,以防需要重新创建它们:
kubectl get crd $(cat istio-crd.csv) -o yaml > istio-crd.yaml
-
删除
istio.io
CRD:试运行:
kubectl delete crd $(cat istio-crd.csv) --dry-run=client
执行:
kubectl delete crd $(cat istio-crd.csv)
-
列出要重新安装或重新创建的
ingress-manager
Pod:kubectl get deployments -n apigee
输出示例:
NAME READY UP-TO-DATE AVAILABLE AGE apigee-controller-manager 1/1 1 1 32d apigee-ingressgateway-manager 2/2 2 2 32d
- 重启
ingress-manager
pod:kubectl rollout restart deployment -n APIGEE_NAMESPACE apigee-ingressgateway-manager
安装 Hybrid 1.15.0 运行时
配置数据收集流水线。
从 Hybrid v1.14 开始,系统会默认为所有 Apigee Hybrid 组织启用新的分析和调试数据流水线。您必须按照启用分析发布方访问权限中的步骤配置授权流程。
准备 Helm 图表升级
- 拉取 Apigee Helm 图表。
Apigee Hybrid 图表托管在 Google Artifact Registry 中:
oci://us-docker.pkg.dev/apigee-release/apigee-hybrid-helm-charts
使用以下
pull
命令将所有 Apigee Hybrid Helm 图表复制到您的本地存储空间:export CHART_REPO=oci://us-docker.pkg.dev/apigee-release/apigee-hybrid-helm-charts
export CHART_VERSION=1.15.0
helm pull $CHART_REPO/apigee-operator --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-datastore --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-env --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-ingress-manager --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-org --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-redis --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-telemetry --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-virtualhost --version $CHART_VERSION --untar
- 根据需要升级 cert-manager。
如果您需要升级 cert-manager 版本,请使用以下命令安装新版本:
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.17.2/cert-manager.yaml
如需查看受支持的版本列表,请参阅受支持的平台和版本:cert-manager。
- 如果 Apigee 命名空间不是
apigee
,请修改apigee-operator/etc/crds/default/kustomization.yaml
文件并将namespace
值替换为您的 Apigee 命名空间。apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namespace: APIGEE_NAMESPACE
如果您使用
apigee
作为命名空间,则无需修改该文件。 - 安装更新后的 Apigee CRD:
-
通过运行以下命令使用
kubectl
试运行功能:kubectl apply -k apigee-operator/etc/crds/default/ --server-side --force-conflicts --validate=false --dry-run=server
-
使用试运行命令进行验证后,运行以下命令:
kubectl apply -k apigee-operator/etc/crds/default/ \ --server-side \ --force-conflicts \ --validate=false
- 使用
kubectl get crds
命令验证安装:kubectl get crds | grep apigee
输出内容应如下所示:
apigeedatastores.apigee.cloud.google.com 2024-08-21T14:48:30Z apigeedeployments.apigee.cloud.google.com 2024-08-21T14:48:30Z apigeeenvironments.apigee.cloud.google.com 2024-08-21T14:48:31Z apigeeissues.apigee.cloud.google.com 2024-08-21T14:48:31Z apigeeorganizations.apigee.cloud.google.com 2024-08-21T14:48:32Z apigeeredis.apigee.cloud.google.com 2024-08-21T14:48:33Z apigeerouteconfigs.apigee.cloud.google.com 2024-08-21T14:48:33Z apigeeroutes.apigee.cloud.google.com 2024-08-21T14:48:33Z apigeetelemetries.apigee.cloud.google.com 2024-08-21T14:48:34Z cassandradatareplications.apigee.cloud.google.com 2024-08-21T14:48:35Z
-
-
检查集群节点上的标签。 默认情况下,Apigee 会将数据 pod 调度到带有
cloud.google.com/gke-nodepool=apigee-data
标签的节点上,并将运行时 pod 调度到带有cloud.google.com/gke-nodepool=apigee-runtime
标签的节点上。您可以在overrides.yaml
文件中自定义节点池标签。如需了解详情,请参阅配置专用节点池。
安装 Apigee Hybrid Helm 图表
- 如果没有,请转到
APIGEE_HELM_CHARTS_HOME
目录。从该目录运行以下命令。 - 升级 Apigee Operator/Controller:
试运行:
helm upgrade operator apigee-operator/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE \ --dry-run=server
升级图表:
helm upgrade operator apigee-operator/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE
验证 Apigee Operator 安装:
helm ls -n APIGEE_NAMESPACE
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION operator apigee 3 2024-08-21 00:42:44.492009 -0800 PST deployed apigee-operator-1.15.0 1.15.0
通过检查可用性来验证它已启动并正在运行:
kubectl -n APIGEE_NAMESPACE get deploy apigee-controller-manager
NAME READY UP-TO-DATE AVAILABLE AGE apigee-controller-manager 1/1 1 1 7d20h
- 升级 Apigee 数据存储区:
试运行:
helm upgrade datastore apigee-datastore/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE \ --dry-run=server
升级图表:
helm upgrade datastore apigee-datastore/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE
通过检查
apigeedatastore
的状态来验证它已启动并正在运行:kubectl -n APIGEE_NAMESPACE get apigeedatastore default
NAME STATE AGE default running 2d
- 升级 Apigee 遥测:
试运行:
helm upgrade telemetry apigee-telemetry/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE \ --dry-run=server
升级图表:
helm upgrade telemetry apigee-telemetry/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE
通过检查状态来验证它已启动并正在运行:
kubectl -n APIGEE_NAMESPACE get apigeetelemetry apigee-telemetry
NAME STATE AGE apigee-telemetry running 2d
- 升级 Apigee Redis:
试运行:
helm upgrade redis apigee-redis/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE \ --dry-run=server
升级图表:
helm upgrade redis apigee-redis/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE
通过检查状态来验证它已启动并正在运行:
kubectl -n APIGEE_NAMESPACE get apigeeredis default
NAME STATE AGE default running 2d
- 升级 Apigee 入站流量管理器:
试运行:
helm upgrade ingress-manager apigee-ingress-manager/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE \ --dry-run=server
升级图表:
helm upgrade ingress-manager apigee-ingress-manager/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE
通过检查可用性来验证它已启动并正在运行:
kubectl -n APIGEE_NAMESPACE get deployment apigee-ingressgateway-manager
NAME READY UP-TO-DATE AVAILABLE AGE apigee-ingressgateway-manager 2/2 2 2 2d
- 升级 Apigee 组织:
试运行:
helm upgrade ORG_NAME apigee-org/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE \ --dry-run=server
升级图表:
helm upgrade ORG_NAME apigee-org/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE
通过检查相应组织的状态来验证它已启动并正在运行:
kubectl -n APIGEE_NAMESPACE get apigeeorg
NAME STATE AGE apigee-org1-xxxxx running 2d
- 升级环境。
一次只能安装一个环境。使用
--set env=
ENV_NAME 指定环境。试运行:
helm upgrade ENV_RELEASE_NAME apigee-env/ \ --install \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ -f OVERRIDES_FILE \ --dry-run=server
- ENV_RELEASE_NAME 是用于跟踪
apigee-env
图表的安装和升级情况的名称。此名称必须与安装中的其他 Helm 版本名称不同。 通常,这与ENV_NAME
相同。但是,如果环境与环境组具有相同的名称,则您必须为环境和环境组使用不同的版本名称,例如dev-env-release
和dev-envgroup-release
。如需详细了解 Helm 中的版本,请参阅 Helm 文档中的三大概念 class="external"。 - ENV_NAME 是您要升级的环境的名称。
- OVERRIDES_FILE 是 v.1.15.0 的新替换文件
升级图表:
helm upgrade ENV_RELEASE_NAME apigee-env/ \ --install \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ -f OVERRIDES_FILE
通过检查相应环境的状态来验证它已启动并正在运行:
kubectl -n APIGEE_NAMESPACE get apigeeenv
NAME STATE AGE GATEWAYTYPE apigee-org1-dev-xxx running 2d
- ENV_RELEASE_NAME 是用于跟踪
-
升级环境组 (
virtualhosts
)。- 一次只能升级一个环境组 (virtualhost)。使用
--set envgroup=
ENV_GROUP_NAME 指定环境组。对 override.yaml 文件中提到的每个环境组重复运行以下命令:试运行:
helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \ --install \ --namespace APIGEE_NAMESPACE \ --set envgroup=ENV_GROUP_NAME \ -f OVERRIDES_FILE \ --dry-run=server
ENV_GROUP_RELEASE_NAME 是您之前安装
apigee-virtualhost
图表时使用的名称。通常为 ENV_GROUP_NAME。升级图表:
helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \ --install \ --namespace APIGEE_NAMESPACE \ --set envgroup=ENV_GROUP_NAME \ -f OVERRIDES_FILE
- 检查 ApigeeRoute (AR) 的状态。
安装
virtualhosts
会创建 ApigeeRouteConfig (ARC),它会在 Apigee Watcher 从控制平面拉取环境组相关详细信息后在内部创建 ApigeeRoute (AR)。因此,请检查相应 AR 的状态是否为正在运行:kubectl -n APIGEE_NAMESPACE get arc
NAME STATE AGE apigee-org1-dev-egroup 2d
kubectl -n APIGEE_NAMESPACE get ar
NAME STATE AGE apigee-org1-dev-egroup-xxxxxx running 2d
- 一次只能升级一个环境组 (virtualhost)。使用
- 确认所有安装都已成功升级后,从
apigee-system
命名空间中删除较旧的apigee-operator
版本。- 卸载旧的
operator
版本:helm delete operator -n apigee-system
- 删除
apigee-system
命名空间:kubectl delete namespace apigee-system
- 卸载旧的
- 再次在 Apigee 命名空间中升级
operator
,以重新安装已删除的集群级资源:helm upgrade operator apigee-operator/ \ --install \ --namespace APIGEE_NAMESPACE \ --atomic \ -f overrides.yaml
从 1.14.0 版或更早版本升级后验证政策
请按照以下过程在从 1.14.0 升级后验证 JavaCallout 政策的行为。
- 检查 Java JAR 文件是否请求了不必要的权限。
部署政策后,请检查运行时日志,以查看是否存在以下日志消息:
"Failed to load and initialize class ..."
。如果您看到此消息,则表明已部署的 JAR 请求了不必要的权限。如需解决此问题,请调查 Java 代码并更新 JAR 文件。 - 调查并更新 Java 代码。
查看任何 Java 代码(包括依赖项),以确定可能不允许的操作的原因。发现后,根据需要修改源代码。
- 测试启用了安全检查的政策。
在非生产环境中,启用安全检查标志,并使用更新后的 JAR 重新部署政策。如需设置该标志,请执行以下操作:
- 在
apigee-env/values.yaml
文件中,将runtime:cwcAppend:
下的conf_security-secure.constructor.only
设置为true
。例如:# Apigee Runtime runtime: cwcAppend: conf_security-secure.constructor.only: true
- 针对该环境更新
apigee-env
图表以应用更改。例如:helm upgrade ENV_RELEASE_NAME apigee-env/ \ --install \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ -f OVERRIDES_FILE
ENV_RELEASE_NAME 是用于跟踪
apigee-env
图表的安装和升级情况的名称。此名称必须与安装中的其他 Helm 版本名称不同。 通常,这与ENV_NAME
相同。但是,如果环境与环境组具有相同的名称,则您必须为环境和环境组使用不同的版本名称,例如dev-env-release
和dev-envgroup-release
。如需详细了解 Helm 中的版本,请参阅 Helm 文档中的三大概念 class="external"。
如果日志消息
"Failed to load and initialize class ..."
仍然存在,请继续修改和测试 JAR 文件,直到该日志消息不再出现。 - 在
- 在生产环境中启用安全检查。
在非生产环境中全面测试和验证 JAR 文件后,将标志
conf_security-secure.constructor.only
设置为true
并针对生产环境更新apigee-env
图表以应用更改,从而在生产环境中启用安全检查。
回滚到先前的版本
如需回滚到先前版本,请使用较早的图表版本以相反的顺序回滚升级过程。从 apigee-virtualhost
开始,然后返回 apigee-operator
,接着还原 CRD。
- 将所有图表从
apigee-virtualhost
还原为apigee-datastore
。以下命令假定您使用的是先前版本 (v1.14.x) 中的图表。对每个环境组运行以下命令:
helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \ --install \ --namespace apigee \ --atomic \ --set envgroup=ENV_GROUP_NAME \ -f 1.14_OVERRIDES_FILE
对每个环境运行以下命令:
helm upgrade ENV_RELEASE_NAME apigee-env/ \ --install \ --namespace apigee \ --atomic \ --set env=ENV_NAME \ -f 1.14_OVERRIDES_FILE
还原除
apigee-operator
以外的其余图表。helm upgrade ORG_NAME apigee-org/ \ --install \ --namespace apigee \ --atomic \ -f 1.14_OVERRIDES_FILE
helm upgrade ingress-manager apigee-ingress-manager/ \ --install \ --namespace apigee \ --atomic \ -f 1.14_OVERRIDES_FILE
helm upgrade redis apigee-redis/ \ --install \ --namespace apigee \ --atomic \ -f 1.14_OVERRIDES_FILE
helm upgrade telemetry apigee-telemetry/ \ --install \ --namespace apigee \ --atomic \ -f 1.14_OVERRIDES_FILE
helm upgrade datastore apigee-datastore/ \ --install \ --namespace apigee \ --atomic \ -f 1.14_OVERRIDES_FILE
- 创建
apigee-system
命名空间。kubectl create namespace apigee-system
- 将资源注解重新修补到
apigee-system
命名空间。kubectl annotate --overwrite clusterIssuer apigee-ca-issuer meta.helm.sh/release-namespace='apigee-system'
- 如果您也更改了版本名称,请使用
operator
版本名称更新注释。kubectl annotate --overwrite clusterIssuer apigee-ca-issuer meta.helm.sh/release-name='operator'
- 将
apigee-operator
重新安装到apigee-system
命名空间中。helm upgrade operator apigee-operator/ \ --install \ --namespace apigee-system \ --atomic \ -f 1.14_OVERRIDES_FILE
- 通过重新安装较旧的 CRD 来还原 CRD。
kubectl apply -k apigee-operator/etc/crds/default/ \ --server-side \ --force-conflicts \ --validate=false
- 清理 APIGEE_NAMESPACE 命名空间中的
apigee-operator
版本以完成回滚过程。helm uninstall operator -n APIGEE_NAMESPACE
- 当
operator
被卸载时,某些集群级资源(例如clusterIssuer
)会被删除。使用以下命令重新安装它们:helm upgrade operator apigee-operator/ \ --install \ --namespace apigee-system \ --atomic \ -f 1.14_OVERRIDES_FILE