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