【发布时间】: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'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