Kubernetes 带有路由的GCE入口始终返回默认http后端

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:

Kubernetes版本:1.4.5

我有一个非常简单的服务,
类型: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…
我会得到相同的行为

我浏览了以下文档和示例:

有人能解释一下吗

您是否可以查看此部分并评论它是否解决了问题:

注意刚才发生的事情,端点公开/hostname,负载平衡器将整个匹配的url转发给端点。这意味着,如果入口中有“/foo”并尝试访问/hostname,那么端点将收到/foo/hostname,而不知道如何路由它。现在更新入口以通过/fs端点访问静态内容:


我遇到了一个原因不同的类似问题,如果您使用的是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>