【问题标题】:404 not found for GKE Ingress未找到 GKE Ingress 的 404
【发布时间】:2023-03-16 02:00:01
【问题描述】:

我正在尝试使用 GKE Cluster` 中的 Ingress 功能。以下是我遵循的步骤

  1. Create deployment with below command

     kubectl create deployment hello --image=gcr.io/google-samples/hello-app:2.0

  2. Exposed the deployment of type NodePort

     kubectl expose deployment hello --port=8080 --type=NodePort

  3. my ingress manifests is as follows

 apiVersion: networking.k8s.io/v1beta1
 kind: Ingress
 metadata:
   name: basic-ingress
   annotations:
      kubernetes.io/ingress.class: gce 
 spec:
   rules:      
   - http:
       paths:
       - path: /
       backend:
         serviceName: hello
         servicePort: 8080              

$ kubectl get services
  NAME         TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)            AGE
  hello       NodePort        10.0.41.132     <None>      8080:30820/TCP       113m

$ kubectl get ingress
  NAME            HOSTS      ADDRESS        PORTS    AGE
  basic-ingress    *       35.X.X.X        80      26m

但是当我使用 curl 访问外部 IP 时,它会抛出 404 not found 。

可以从 GKE 控制台看到以下错误

我想我在 ingress 定义中遗漏了一些东西。请指导解决此问题。

图像定义取自本指南 https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer

【问题讨论】:

  • 请你用-path: /* 代替-path:/ 试试看
  • 试过了..但还是一样
  • 感谢您指出这一点。它帮助我验证了基于 GCE 的注释

标签: google-cloud-platform google-kubernetes-engine kubernetes-ingress


【解决方案1】:

我尝试从头开始创建相同的入口(无集群、无入口服务、无服务),我能够创建它并成功执行 curl,这些是步骤:

1.- 创建集群(细节无所谓,随心所欲创建)

2.- 连接集群并安装kubectl-> sudo apt-get install kubectl

3.- kubectl create deployment hello --image=gcr.io/google-samples/hello-app:2.0

4.- kubectl 公开部署你好 --port=8080 --type=NodePort

5.- 按照Creating an Ingress resource,按如下方式创建入口(无注释)

api版本:networking.k8s.io/v1beta1 种类:入口 元数据: 名称:基本入口 规格: 后端: 服务名称:网络 服务端口:8080

6.- 检查你的入口 kubectl get ingress basic-ingress

@cloudshell:$ kubectl 获取入口基本入口 名称 主机 地址 端口 年龄 基本入口 * 130.211.xx.xxx 80 5m46s

7.- 当我执行 curl 时现在正在工作:

@cloudshell:$ curl http://130.211.xx.xxx 你好世界! 版本:2.0.0 主机名:hello-86dbf5b7c6-f7qgl

您使用的是ingress annotations,它是创建入口服务的另一种方式,但更高级一些。我的建议是先创建它尽可能简单。

请以这种方式尝试并告诉我。

【讨论】:

  • 谢谢。它有效 $ curl 34.120.X.X 你好,世界!版本:2.0.0 主机名:hello-86dbf5b7c6-9m4bn
  • 尝试与 GCE Ingress 相同
  • 为什么同样的方法在基于 SharedVPC 的 GKE 集群上不起作用?
【解决方案2】:

相同的 YAML 定义在 SharedVPC 中对我来说失败了。添加以下防火墙规则后,此问题得到解决

  gcloud compute firewall-rules create k8s-fw-l7--60cada75751e6d79 --network <SharedVPC> --description "GCE L7 firewall rule" --allow tcp:30000-32767 --source-ranges 130.211.0.0/22,209.85.152.0/22,209.85.204.0/22,35.191.0.0/16 --target-tags gke-privatetestgkecluster-cf899a18-node --project <Project> 

https://cloud.google.com/load-balancing/docs/health-checks

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-16
    • 2021-11-05
    • 2021-04-30
    • 2021-12-03
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    相关资源
    最近更新 更多