在 GKE 中部署的两个具有相同配置的后端应用出现意外行为

在 GKE 中部署的两个具有相同配置的后端应用出现意外行为

问题背景

我没有其他词来描述我在工作场所 Kubernetes 部署中发现的部署行为,

我们有五个使用 Koa.js 的后端应用程序的 Kubernetes 部署,一个开发部署,两个暂存部署和两个生产部署。

API 分为两个版本,通过文件夹名称 v3 和 v4 来区分。两个版本的 Koa 路由器都访问相同的控制器和服务功能,两个路由器完全相同,不同之处在于 v4 比 v3 增加了更多路由。

两个生产部署仅在名称上有所不同。其余部署配置保持不变(例如:isafe-prod-android-api、isafe-prod-ios-api)。两个部署也共享相同的配置图和机密。


问题解释

当我被分配调整一个端点以从 2 个不同的云 OSS 下载图像时,奇怪的行为就开始了,1 个来自 GCP 存储桶,1 个来自阿里巴巴 OSS。

端点预期行为旨在处理两个存储桶之间的动态检查和下载图像。

例如:我想使用此端点下载旧图像,端点应该首先检查来自阿里巴巴OSS的存储桶,当在那里找不到图像时,处理此检查的函数应该只返回false而不是抛出错误,但如果在阿里巴巴OSS中找到,它会返回图像并重定向到url。

如果在阿里巴巴中找不到图像,也会发生同样的情况,该函数应该只返回 false,并继续该过程以从 GCP 存储桶函数检查图像,如果找到,则重定向到图像 url,但如果在两个存储桶中都找不到图像,那么它应该抛出错误作为其响应,即图像不存在于机器人存储桶中。

预期行为发生在开发和首次生产部署(ios 后端)中。意外行为发生在 android 后端的生产部署中,其配置与 ios 相同,只是命名不同。

意外行为:

  1. 在 ios 生产部署中,无论是在 v3 还是 v4 中,它都能按预期工作,当发送两个存储桶中均不存在的图像名称时,它会返回预期的响应,此外,当检查仅存在于任一存储桶中的图像时,它会毫无问题地返回图像。

尝试从 v4 中的 android 生产部署访问端点时出现问题,我尝试获取 GCP 存储桶中存在但不存在于 Alibaba OSS 中的图像,预期行为是它应该只返回图像,因为它存在于 GCP 中。但实际发生的情况是,它以 XML 格式从 alibaba oss 抛出错误,就好像“return false”错误处理程序从未执行过一样。


问题证据和代码片段 主要问题证据

来自 Android v4 版本的图片

在 iOS 的生产部署中不会发生这种情况。两者都使用来自同一容器注册表的相同 docker 映像版本。

处理检查图像和下载本身的函数已经在 try catch 块中,它应该只返回 false 而不是抛出错误。

以下是逻辑的代码片段

下载图片v4逻辑代码片段

这是检查阿里云OSS镜像的服务逻辑

下载图片服务逻辑

另外,在查看 kubernetes 日志时,我发现了这样的错误,该错误总是在我向/api/v4/images/:filename生产 android 部署发送请求后发生,而没有任何痕迹表明是哪段代码导致了这个问题。

我在论坛上调查了这个错误,但没有找到任何线索。

无法解释的错误证据解析错误


任何建议或建议,非常感谢

相关内容