Вход GCE с маршрутами всегда возвращается к умолчанию-http-backend

версия Kubernetes: 1.4.5

у меня очень простой сервис с type: NodePort. Он возвращает только текст на /info. Я использую контроллер входа GKE по умолчанию (L7 Google load balancer) с 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

curl -k https://130.211.39.140/info
POD: gate-front-1871107570-ue07p
IP: 10.0.2.26
REQ: /info

$ 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

сломан вход

однако, если я введу правило и оставлю бэкэнд по умолчанию, все запросы return 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

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"}

если я добавляю хосты и использую curl -k --resolve ... Я получаю такое же поведение.

я прошел через следующую документацию и примеры:

может ли кто-нибудь пролить свет на этом?

2 ответов


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

можете ли вы просмотреть эту часть и прокомментировать, если она решает проблему:

обратите внимание, что только что произошло, конечная точка предоставляет / имя хоста, и loadbalancer перенаправил весь соответствующий url-адрес на конечную точку. Это означает, что если бы у вас был "/foo " во входе и попытался получить доступ к /hostname, ваша конечная точка получила бы /foo/hostname и не знала, как ее маршрутизировать. Теперь обновить вход для доступа к статическому контенту через конечную точку /fs:


У меня была аналогичная проблема с другой причиной, Если вы используете GCE, просто помните, что каждый контроллер входа получает новый IP.

Я указал свой DNS на первый контроллер входа, который я сделал, и не знал, что новые контроллеры входа получили новые IPs. Трафик с неправильного хоста отправлялся на мой первый контроллер входа, поэтому ответ 404 был правильным.

убедитесь, что вы правильно указали DNS, проверив контроллер входа с помощью kubectl:

kubectl describe ingress/<name>