Kubernetes 在同一个子域部署两个微服务导致频繁和随机的 404 错误
Posted
技术标签:
【中文标题】Kubernetes 在同一个子域部署两个微服务导致频繁和随机的 404 错误【英文标题】:Kubernetes deployment of two microservices at same subdomain resulting in frequent and random 404 errors 【发布时间】:2020-12-02 08:33:37 【问题描述】:我们有一个由 nodejs 前端和 nginx 后端组成的 Kubernetes 部署。我们发现这两个部署分别在 Kubernetes 中运行良好,但是当它们都部署到前端时,几乎 50% 的时间都返回 404。
假设我们的虚拟服务存在问题是很自然的,但事实似乎并非如此,基于 vs/gateway 的部署不足以导致问题的事实。似乎如果我们在后端部署一个不同的、不相关的图像,前端会继续工作而不会出现 404 错误。
该应用最初是通过 JHipster 生成的,我们手动分离了前端和后端组件。前端是nodejs,后端是Java/nginx。该应用在本地运行,但在 k8s 部署中失败。
另外,我们的 Kubernetes 部署在 Rancher 中。
实验似乎表明它与我们后端部署中的某些东西有关,所以我在下面包含了我们的后端 deployement.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: ourapp-be-custom-mount
spec:
revisionHistoryLimit: 3
replicas: 1
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%
template:
spec:
containers:
- name: ourapp-be-custom-mount
image: "IMAGE_SET_BY_OVERLAYS_KUSTOMIZATION"
envFrom:
- configMapRef:
name: ourapp-be-config
ports:
- name: http
containerPort: 8080
resources:
limits:
cpu: "0.5"
memory: "2048Mi"
requests:
cpu: "0.1"
memory: "64Mi"
imagePullPolicy: IfNotPresent
volumeMounts:
- mountPath: /usr/share/h2/data
name: ourapp-db-vol01-custom-mount
securityContext:
runAsNonRoot: true
runAsUser: 1000
imagePullSecrets:
- name: regcred-nexus
volumes:
- name: ourapp-db-vol01-custom-mount
persistentVolumeClaim:
claimName: ourapp-db-pvc-volume01-custom-mount
terminationGracePeriodSeconds: 30
【问题讨论】:
您将前端与 java 后端分开,这很好。不幸的是,您在运行npm start
时使用的 webpack 开发服务器不打算在生产中使用,您的包应该部署到像 nginx 这样的 web 服务器或 JHipster 网关。需要说明的是,你的前端不是 nodejs,它使用的是 nodejs 开发工具。
你检查后端使用的资源了吗?
请显示相关的服务、入口和前端资源定义。很难从提供的信息中推断出任何东西。
【参考方案1】:
每个服务都需要指向不同的应用。您可以在 Rancher 中验证每个服务指向不同的应用程序。检查你的 yaml。如果使用 Kustomize,commonLabels:app 可能会绊倒你。确保它指向不同的前端和后端应用。
【讨论】:
以上是关于Kubernetes 在同一个子域部署两个微服务导致频繁和随机的 404 错误的主要内容,如果未能解决你的问题,请参考以下文章