【问题标题】:Why does Load Balancer turn a 4XX error into 5XX为什么负载均衡器会将 4XX 错误变成 5XX
【发布时间】:2022-10-13 15:08:31
【问题描述】:

因此,我们一直在尝试让一些应用程序在带有自动驾驶仪的 GKE 集群上运行。

然而,当我们去测试时,我们得到了 5XX 错误,而我们期待 4XX。这更奇怪,因为当我们收到 2XX 响应时,相应地会收到消息。

在查看应用程序日志时,我们看到 inteded 输出是 4XX,但是,当响应发送到客户端时,它作为 5XX 发送。什么可能会改变响应?这个回应来自哪里?

<html lang="en">
<head>
    <title>Unable to forward your request to a backend - Web Forwarder - Cloud Shell</title>
</head>
<body style="font-family: monospace;">
    <h1 style="font-size: 1.5em;">Unable to forward your request to a backend</h1>
    <p>Couldn&#39;t connect to a server on port 8080</p>
</body>

负载均衡器遵循此模板

apiVersion: v1
kind: Service
metadata:
  name: app-gateway
  namespace: namespace
  annotations:
    networking.gke.io/load-balancer-type: "Internal"
    cloud.google.com/neg: '{"ingress": true}'
spec:
  type: LoadBalancer
  externalTrafficPolicy: Cluster
  selector:
    app: app-gateway
  ports:
    - port: 80
      targetPort: 80
      name: http

和入口

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: app-gateway
  namespace: namespace
  annotations:
    kubernetes.io/ingress.class: "gce-internal"
spec:
  rules:
    - host: app.internal
      http:
        paths:
          - pathType: Prefix
            path: "/"
            backend:
              service:
                name: app-gateway
                port:
                  number: 80

根据要求,这是系统的架构。名字被省略了

这是一种非常简单的方法,只需在内部负载均衡器后面处理几个工作负载,连接到本地 Mongo 和 Rabbit。

编辑- 更多细节

我正在做的方式是设置一个从我的 gcp 控制台转发到 pod 的端口。

当我转到 /swagger/index.html 并尝试测试 API 时,它会在预期为 4XX 时返回 503 错误。但是 2XX 发送成功。 当我在自己的控制台中转发(使用与 GCP 控制台中相同的命令)并执行 curl -X -I GET localhost:8080/swagger/index.html 时,我得到了正确的响应。

这意味着它可能与云壳本身有关。

【问题讨论】:

  • 您可以交叉检查您的 targetPort 是否与 containerPort 相同?
  • 您好,您可以分享以下信息以进一步了解。 1. 你的预期行为是什么。 2.这是内部访问还是外部访问。 3. 你的设置图。 4. 您正在关注的文档
  • @Sridhar targetPort 和 containerPort 都设置为 80。
  • @Eddoasso 你可以在服务中将type: LoadBalancer 更改为type: ClusterIP
  • 你有设置vpn吗?检查 yaml 后,它显示您的负载均衡器是内部的,没有外部 IP 地址。只想知道本地源如何访问 GCP 网络。我建议执行连接测试以了解两个流量是否会流向同一条路线。您的客户是否有任何理由需要内部负载均衡器?

标签: kubernetes google-kubernetes-engine


【解决方案1】:

在使用 curl 进行测试时,我们需要知道您的流量如何使用这两种来源进行路由。我建议使用连接测试。通过这种方式,我们可以识别两个设备(源)在到达目的地时是否具有相同的路线。

要了解有关我的建议的更多信息,您可以查看此link。从链接中,您将看到流量可能流向不同路径的信息。从这里我们可能会看到另一个有用的信息,为什么我们会收到这些类型的错误消息,并将从不同的角度看待如何解决问题。

【讨论】:

    猜你喜欢
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多