Вход 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 ...
Я получаю такое же поведение.
я прошел через следующую документацию и примеры:
- http://kubernetes.io/docs/user-guide/ingress/
- https://github.com/kubernetes/contrib/blob/master/ingress/controllers/gce/README.md
может ли кто-нибудь пролить свет на этом?
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>