Kubernetes 带有路由的GCE入口始终返回默认http后端
Kubernetes版本:1.4.5 我有一个非常简单的服务,Kubernetes 带有路由的GCE入口始终返回默认http后端,kubernetes,google-kubernetes-engine,Kubernetes,Google Kubernetes Engine,Kubernetes版本:1.4.5 我有一个非常简单的服务,类型:NodePort。它只返回/info上的一些文本。我在TLS中使用默认的GKE入口控制器(L7 Google负载平衡器)。如果我使用以下入口,一切正常: 工作入口 破口 但是,如果我引入一个规则并省略默认后端,那么所有请求都返回默认后端-404 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: global-ingress namespace:
类型:NodePort
。它只返回/info
上的一些文本。我在TLS中使用默认的GKE入口控制器(L7 Google负载平衡器)。如果我使用以下入口,一切正常:
工作入口
破口 但是,如果我引入一个规则并省略默认后端,那么所有请求都返回
默认后端-404
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: global-ingress
namespace: global
annotations:
kubernetes.io/ingress.allow-http: "false"
spec:
tls:
- secretName: tls-secret
rules:
- http:
paths:
- path: /gate
backend:
serviceName: gate-front
servicePort: 80
$kubectl描述了如何使用
名称:全球入口
名称空间:全局
地址:130.211.33.150
默认后端:默认http后端:80(10.0.2.3:8080)
TLS:
tls秘密终止
规则:
主机路径后端
---- ---- --------
*
/门前:80()
注释:
https转发规则:k8s-fws-global-global2-ingress--f3f0bf21d171a625
https目标代理:k8s-tps-global-global2-ingress--f3f0bf21d171a625
url映射:k8s-um-global-global2-ingress--f3f0bf21d171a625
后端:{“k8s-be-31966--f3f0bf21d171a625:“健康”,“k8s-be-32552--f3f0bf21d171a625:“健康”}
如果我添加主机并使用curl-k--resolve…
我会得到相同的行为
我浏览了以下文档和示例:
我遇到了一个原因不同的类似问题,如果您使用的是GCE,请记住每个入口控制器都有一个新的IP 我已经将我的DNS指向了我制作的第一个入口控制器,并且没有意识到新的入口控制器获得了新的IP。来自错误主机的流量被发送到我的第一个入口控制器,因此404响应是正确的 通过使用kubectl检查入口控制器,确保正确指向DNS:
kubectl describe ingress/<name>
kubectl描述入口/
是的,实际上我现在看到它与完整路径匹配-因此在本例中,将路径设置为/gate/*
将产生预期的结果。另外,如果我看一下实际生成的转发规则,现在一切都有意义了。我认为在文档中(以及在这个答案中)也可以给出一个具体的代码示例。例如,就我的围棋而言,我有http.HandleFunc(“/gate/info”,handlerFunc)
,而不仅仅是http.HandleFunc(“/info”,handlerFunc)
。我期待着看到ingress在未来如何成熟。您自然需要为您的dns创建一个保留的静态ip。
$ kubectl describe ing
Name: global-ingress
Namespace: global
Address: 130.211.39.140
Default backend: gate-front:80 (10.0.2.25:8080,10.0.2.26:8080)
TLS:
tls-secret terminates
Rules:
Host Path Backends
---- ---- --------
* * gate-front:80 (10.0.2.25:8080,10.0.2.26:8080)
Annotations:
backends: {"k8s-be-31966--f3f0bf21d171a625":"HEALTHY"}
https-forwarding-rule: k8s-fws-global-global-ingress--f3f0bf21d171a625
https-target-proxy: k8s-tps-global-global-ingress--f3f0bf21d171a625
url-map: k8s-um-global-global-ingress--f3f0bf21d171a625
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: global-ingress
namespace: global
annotations:
kubernetes.io/ingress.allow-http: "false"
spec:
tls:
- secretName: tls-secret
rules:
- http:
paths:
- path: /gate
backend:
serviceName: gate-front
servicePort: 80
curl -k https://130.211.33.150/gate/info
default backend - 404
$ kubectl describe ing
Name: global-ingress
Namespace: global
Address: 130.211.33.150
Default backend: default-http-backend:80 (10.0.2.3:8080)
TLS:
tls-secret terminates
Rules:
Host Path Backends
---- ---- --------
*
/gate gate-front:80 (<none>)
Annotations:
https-forwarding-rule: k8s-fws-global-global2-ingress--f3f0bf21d171a625
https-target-proxy: k8s-tps-global-global2-ingress--f3f0bf21d171a625
url-map: k8s-um-global-global2-ingress--f3f0bf21d171a625
backends: {"k8s-be-31966--f3f0bf21d171a625":"HEALTHY","k8s-be-32552--f3f0bf21d171a625":"HEALTHY"}
kubectl describe ingress/<name>