跳到主要内容
版本:Dev

升级 Docker 网关

通过数据面中的 Docker 选项卡提供的 docker run 命令启动的 AISIX Enterprise 网关,需要通过更换容器来升级。它的配置和用量历史保留在控制面中,新容器则保留网关证书和有意设置的容器选项。

执行此步骤前,先升级并验证 AISIX Enterprise 控制面。如果控制面必须经过中间版本,请先按此步骤将旧版网关升级到该版本,再继续升级控制面。参见升级 AISIX Enterprise。

开始前​

以下命令使用生成的安装代码片段中的容器名称 aisix-dp。如果实际名称不同,请替换。

单个网关从完成连接排空到替换容器加载配置期间无法处理流量。如果多个网关位于负载均衡器之后,请逐个更换并验证。

保留当前部署​

找到最初生成的 docker run 命令或部署记录。你需要其中有意设置的环境变量覆盖值、入口点和命令、挂载、发布的端口、主机映射、重启和停止设置,以及连接的网络。下方的基础替换命令本身不会重现自定义容器。

如果找不到原始命令,请在移除容器前保存完整的容器检查结果。该文件包含凭据和其他敏感配置,因此应限制其权限,不要提交或共享:

umask 077
docker inspect aisix-dp > aisix-dp-inspect.json

在受保护的文件中检查 .Config.Env、.Config.Entrypoint、.Config.Cmd、.HostConfig、.Mounts 和 .NetworkSettings.Networks。不要将完整环境变量打印到终端或 CI 日志中:其中包含托管私钥,也可能包含其他凭据。检查结果还会显示镜像定义的默认值,因此只延续部署时有意提供的设置。

只有签发证书后才会出现私钥。如果没有保留生成的命令,请从运行中的容器读取托管连接配置,并将其保存在当前 Shell 中:

export AISIX_MANAGED__CP_BASE_URL="$(docker exec aisix-dp printenv AISIX_MANAGED__CP_BASE_URL)"
export AISIX_MANAGED__CP_CERT_PEM="$(docker exec aisix-dp printenv AISIX_MANAGED__CP_CERT_PEM)"
export AISIX_MANAGED__CP_KEY_PEM="$(docker exec aisix-dp printenv AISIX_MANAGED__CP_KEY_PEM)"
export AISIX_MANAGED__CP_CA_PEM="$(docker exec aisix-dp printenv AISIX_MANAGED__CP_CA_PEM)"

如果证书已过期,请签发新证书,并改用新证书配置。

更换容器​

停止并移除旧容器。默认情况下,网关至少需要 30 秒排空连接,因此使用 Docker 默认的 10 秒停止超时会以 SIGKILL 结束:

docker stop -t 45 aisix-dp
docker rm aisix-dp

运行时间超过停止超时的请求会被中断。如需保留更长时间的流式请求,请按调整平台截止时间中的说明增加超时时间。

使用目标镜像启动新容器。加入从旧容器记录的所有有意设置的选项。下列没有指定值的 -e 选项会使用上方导出的值:

export TARGET_VERSION="<target-version>"

docker run -d --name aisix-dp \
--restart unless-stopped \
--stop-timeout 45 \
-e AISIX_CONFIG_PATH=/etc/aisix/config.managed.yaml \
-e AISIX_MANAGED__CP_BASE_URL \
-e AISIX_MANAGED__CP_CERT_PEM \
-e AISIX_MANAGED__CP_KEY_PEM \
-e AISIX_MANAGED__CP_CA_PEM \
-p 3000:3000 \
"docker.io/api7/aisix:${TARGET_VERSION}"

--restart unless-stopped 使网关在主机重启后重新启动。--stop-timeout 45 使后续不带 -t 选项的 docker stop 等待足够长的时间。由 1.9.0 或更早版本控制面生成的安装代码片段不包含这些选项,因此更换此类网关时要添加它们。

docker run 可以通过 --network 将容器连接到一个网络。如果旧容器还连接了其他网络,请在新容器启动后逐一重新连接:

docker network connect <additional-network> aisix-dp

验证新容器​

等待新容器加载配置:

until curl -fs --noproxy 127.0.0.1 "http://127.0.0.1:3000/readyz"; do sleep 1; done; echo

如果命令持续等待,请查看 docker logs aisix-dp 查找原因。

在数据面中,确认新实例报告目标版本,然后通过网关发送有代表性的请求。被替换的实例会继续以旧版本显示,直到其注册过期。

保留受保护的检查文件或其他完整部署记录,直到回滚窗口结束。验证后,从 Shell 中移除证书变量:

unset AISIX_MANAGED__CP_BASE_URL AISIX_MANAGED__CP_CERT_PEM AISIX_MANAGED__CP_KEY_PEM AISIX_MANAGED__CP_CA_PEM

回滚​

确认升级前的网关版本仍受当前控制面支持。旧部署的分阶段升级路径会在控制面最终升级前,将网关升级到 1.7.1。在最后的升级步骤中,1.7.1 是网关的回滚版本。

如果保存的检查结果和证书变量已不可用,请重新执行保留当前部署。然后按更换容器的步骤,将 TARGET_VERSION 设为升级前的版本,并恢复记录的所有容器选项。

在继续回滚控制面之前,完成验证新容器。

回滚窗口结束后清理​

如果创建了敏感的检查文件,请删除:

rm -f aisix-dp-inspect.json