程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了GKE Ingres 和 GCE 负载均衡器:始终获得 404大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决GKE Ingres 和 GCE 负载均衡器:始终获得 404?

开发过程中遇到GKE Ingres 和 GCE 负载均衡器:始终获得 404的问题如何解决?下面主要结合日常开发的经验,给出你关于GKE Ingres 和 GCE 负载均衡器:始终获得 404的解决方法建议,希望对你解决GKE Ingres 和 GCE 负载均衡器:始终获得 404有所启发或帮助;

我尝试部署 2 个应用程序(在 2 个分离的 Deployments 对象后面)。我每个部署有 1 个服务,类型为 NodePort

application1_service.yaml

APIVersion: v1
kind: service
Metadata:
  name: application1-service
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  SELEctor:
    run: application1
  type: NodePort

application2_service.yaml完全相同(namerun 除外)

我使用 Ingress 使这 2 个服务可用,

ingress.yaml

APIVersion: networking.k8s.io/v1beta1
kind: Ingress
Metadata:
  name: my-ingress
  Annotations:
    kubernetes.io/ingress.global-static-ip-name: "my-static-ip"
    networking.gke.io/managed-certificates: "my-certificate"
    kubernetes.io/ingress.class: "gce"
spec:
  rules:
  - host: "my.host.com"
    http:
      paths:
      - path: /*
        BACkend:
          servicename: application1-service
          servicePort: 80
      - path: /application2/*
        BACkend:
          servicename: application2-service
          servicePort: 80

我还创建了一个 @H_260_3@managedCertificate 对象,以便能够处理 httpS 请求。

@H_725_7@ma​​naged_certificate.yaml

APIVersion: networking.gke.io/v1beta1
kind: ManagedCertificate
Metadata:
  name: my-certificate 
spec:
  domains:
    - my.host.com

这里奇怪的是 curl https://my.host.com/ 工作正常,我可以访问我的服务,但是当我尝试 curl https://my.host.com/application2/ 时,我一直收到 404 Not Found

为什么根在工作而不是另一个?

其他信息: ManagedCertificate 有效并且与 / 一起工作正常。 application1 和 application2 是完全相同的应用程序,如果我在入口交换它们,输出是相同的。

感谢您的帮助!

编辑:

这是我尝试访问 application2 时得到的 404

GKE Ingres 和 GCE 负载均衡器:始终获得 404

不知道它是否有帮助,但这里也是显示 404 的 Ingress 访问日志的一部分

GKE Ingres 和 GCE 负载均衡器:始终获得 404

解决方法

我认为您不能为 2 个不同的应用程序使用相同的端口,因为该端口用于每个节点上以路由到一个应用程序。

来自文档:

NodePort:在静态端口(NodePort)处公开每个节点 IP 上的服务。 NodePort 服务路由到的 ClusterIP 服务会自动创建。您将能够通过请求从集群外部联系 NodePort 服务:.

因此,在您的情况下,一个应用程序已经在使用端口 80,您可以尝试为应用程序 2 使用另一个端口

,
  • 我在没有域的情况下复制了该问题并管理了一个 证书。对我来说,使用负载均衡器 IP 工作正常 地址。

               (ingress-316204)$ curl http://<LB IP address>/v2/
                               Hello,world!
                               Version: 2.0.0
                               Hostname: web2-XXX
    
               (ingress-316204)$ curl http://<LB IP address>/
                               Hello,world!
                               Version: 1.0.0
                               Hostname: web-XXX
    
  • 根据 doc,入口配置似乎是正确的。检查 curl https://LB IP address/application2/ 是否有效,如果有效则主机名可能有问题。

  • 检查您是否使用 LB IP 行更新了主机文件 (/etc/hosts) 地址 my.host.com

  • 检查Load中是否正确配置了主机、路径和后端 平衡器配置。

  • 如果仍有问题,请检查端口节点端口目标端口是否正确配置,否则共享的输出'kubectl describe ing my-ingress' 以供进一步调查。

,

回答我自己的问题:

找了几天,终于找到问题的原因了。

集群和配置一切正常,我的问题出在 Flask API 上。

所有的 URL 都是这样的

@app.route("/my_function")

所以它在带有 @H_260_3@my.host.com/my_function 的根路径上运行良好,但是当我输入 @H_260_3@my.host.com/application1/my_function 时它不起作用......

我刚刚将我的应用更改为

@app.route("/application1/my_function")

现在一切正常:) 希望它会有所帮助!

大佬总结

以上是大佬教程为你收集整理的GKE Ingres 和 GCE 负载均衡器:始终获得 404全部内容,希望文章能够帮你解决GKE Ingres 和 GCE 负载均衡器:始终获得 404所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。