Ранчер 2.x через входной контроллер возвращает 404
Ранчо сервис:
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
rancher ClusterIP 10.10.17.245 <none> 80/TCP,443/TCP 1h
Служба входного контроллера:
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-ingress nginx-ingress LoadBalancer 10.10.15.181 <ext-IP> 80:30324/TCP,443:31022/TCP 3h
Входная роль:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: rancher-ing
annotations:
kubernetes.io/ingress.class: "rancher"
spec:
rules:
- host: api.sample.com
http:
paths:
- path: /
backend:
serviceName: rancher
servicePort: 443
Ingress:
$ kubectl get ingress
NAME HOSTS ADDRESS PORTS AGE
rancher api.sample.com 80 19s
Когда я пытаюсь связаться с владельцем ранчо по внутреннему контроллеру ext-IP:
$ curl http://api.sample.com/
В ответ у меня есть не закодированная строка. Если я сделаю это через веб-браузер, эта строка будет загружена, и у меня будет 404.
Подобная роль для некоторого случайного сервиса через http (без https) работает нормально, так что дело не в неправильной конфигурации входного контроллера.
2 ответа
Если я следую установке по умолчанию входного контроллера:
https://github.com/nginxinc/kubernetes-ingress/blob/master/docs/installation.md
и применить роль входа ранчо, как:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
labels:
app: rancher
name: rancher
namespace: cattle-system
spec:
tls:
- hosts:
- api.sample.com
secretName: default-server-secret
rules:
- host: api.sample.com
http:
paths:
- path: /
backend:
serviceName: rancher
servicePort: 80
Это решение позволило использовать https для Rancher UI через входной контроллер без аннотаций.
Если вы хотите использовать kubernetes.io/ingress.class: "rancher"
Вы должны развернуть свой входной контроллер с --ingress-class=rancher
аннотаций.
Есть много на https://github.com/nginxinc/kubernetes-ingress/tree/master/examples/multiple-ingress-controllers и https://kubernetes.github.io/ingress-nginx/user-guide/multiple-ingress/
ура