找不到 GKE Ingress 的 404

404 not found for GKE Ingress

我正在尝试使用 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 未找到。

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

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

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

我尝试从头开始创建相同的入口(none 集群,none 入口服务,none 服务),我能够创建它并执行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 expose deployment hello --port=8080 --type=NodePort

5.- 按照 Creating an Ingress resource

创建入口如下(没有注释)

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

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

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

7.- 执行卷曲后现在可以正常工作了:

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

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

请按此方式尝试并告诉我。

相同的 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