У меня есть кластер kubernetes без оболочки (1.13), и я запускаю контроллер входящего трафика nginx (развернутый через helm в пространство имен по умолчанию, v0.22.0).
У меня есть вход в другое пространство имен, которое пытается использовать контроллер nginx.
#ingress.yaml
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: myapp
annotations:
kubernetes.io/backend-protocol: https
nginx.ingress.kubernetes.io/enable-rewrite-log: "true"
nginx.ingress.kubernetes.io/rewrite-target: "/$1"
spec:
tls:
- hosts:
- my-host
secretName: tls-cert
rules:
- host: my-host
paths:
- backend:
servicename: my-service
servicePort: https
path: "/api/(.*)"
Контроллер nginx успешно находит вход и сообщает, что есть конечные точки. Если я попадаю в конечную точку, я получаю 400 без содержимого. Если я включу https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/configmap.md#custom-http-errors, то я получаю 404 от nginx; моя служба не пострадала. Согласно перезапись ведения журнала, URL-адрес переписывается правильно.
Я также подключился к сервису прямо из модуля, и это тоже работает.
#service.yaml
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
ports:
- name: https
protocol: TCP
port: 5000
targetPort: https
selector:
app: my-app
clusterIP: <redacted>
type: ClusterIP
sessionAffinity: None
Что могло пойти не так?
ИЗМЕНИТЬ: отключение https по-прежнему дает ту же ошибку 400. Однако, если мое приложение ожидает HTTPS-запросы, а nginx отправляет HTTP-запросы, тогда запросы попадают в приложение (но оно не может их обрабатывать).