带路由的GCE入口总是回退到default-http-backend

Iul*_*ian 9 kubernetes google-kubernetes-engine

Kubernetes版本:1.4.5

我有一个非常简单的服务type: NodePort.它只返回一些文本/info.我使用默认的GKE入口控制器(L7 Google负载均衡器)和TLS.如果我使用以下入口,一切都按预期工作:

工作入口

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: global-ingress
  namespace: global
  annotations:
    kubernetes.io/ingress.allow-http: "false"
spec:
  tls:
  - secretName: tls-secret
  backend:
    serviceName: gate-front
    servicePort: 80
Run Code Online (Sandbox Code Playgroud)
curl -k https://130.211.39.140/info
POD: gate-front-1871107570-ue07p
IP: 10.0.2.26
REQ: /info
Run Code Online (Sandbox Code Playgroud)
$ 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
Run Code Online (Sandbox Code Playgroud)

破碎的入口

但是,如果我引入规则并省略默认后端,则所有请求都会返回default backend - 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
Run Code Online (Sandbox Code Playgroud)
curl -k https://130.211.33.150/gate/info
default backend - 404
Run Code Online (Sandbox Code Playgroud)
$ 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"}
Run Code Online (Sandbox Code Playgroud)

如果我添加主机并使用curl -k --resolve ...我得到相同的行为.

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

任何人都可以对此有所了解吗?

Pra*_*h B 2

https://github.com/kubernetes/ingress-gce/blob/master/README.md#paths

您能看一下这部分并评论它是否解决了问题:

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