Использую GCE и пытаюсь выставить приложение через ingress. Но правила пути не работают.
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: front-ingress
namespace: {{ .Release.Namespace }}
annotations:
{{ if eq .Values.env "dev" }}
kubernetes.io/ingress.global-static-ip-name: "test-ip"
{{ else }}
cloud.google.com/load-balancer-type: "Internal"
{{ end }}
spec:
rules:
- host: {{ .Values.domain }}
http:
paths:
- path: /
backend:
serviceName: front-service
servicePort: 80
- path: /api/
backend:
serviceName: backend-service
servicePort: 80
Когда сайт открывается в браузере - все файлы возвращают 404. Когда я открываю файл по URL-адресу, я получаю: backend по умолчанию - 404. Если я установил backend по умолчанию через аннотации - все файлы загружены, но запросы / api завершились неудачно - ошибка 404.
Что это может быть?
Основная идея: протестировать ветку на поддомене сайта. k8s namespace = имя ветки. Ingress развернут в каждом пространстве имен с разными хостами в правилах. Глобальный статический IP-адрес, заданный аннотацией и установленный в GCE Cloud DNS.
Спасибо.
ОБНОВИТЬ:
Если я использую аннотацию kubernetes.io/ingress.class: "gce" и путь: / * и / api / * - сайт работает отлично. Но поскольку я использую глобальный статический IP-адрес, я не могу создать более одного входа для каждого IP-адреса. Если я использую kubernetes.io/ingress.class: "nginx" - сайт возвращает ошибку: default backend - 404

Фактически вы можете создать несколько входов, используя один и тот же внешний IP-адрес. Вам просто нужно убедиться, что они находятся под разными хостами (или правилами имен хостов), чтобы пути не мешали друг другу. Каждый хост представляет собой блок сервер {} в конфигурациях nginx с уникальным server_name.
Ingress1:
spec:
rules:
- host: host1.domain1
http:
paths:
- path: /
backend:
serviceName: front-service1
servicePort: 80
- path: /api/
backend:
serviceName: backend-service1
servicePort: 80
Ingress2:
- host: host2.domain2
http:
paths:
- path: /
backend:
serviceName: front-service2
servicePort: 80
- path: /api/
backend:
serviceName: backend-service2
servicePort: 80
Если вы хотите использовать внешний IP-адрес, это все еще возможно, но вам просто нужно использовать отдельный входной контроллер с другим именем входного класса. Например, с контроллер входящего трафика nginx вы можете использовать параметр --ingress-class:
Кроме того, если вы не укажете --ingress-class в своем первом контроллере входящего трафика, вам также придется его настроить, иначе, как указано в опции, первый вход будет удовлетворять всем классам.
Спасибо за Ваш ответ. Но у меня проблемы с определением входа. Я хочу использовать статический ip для всех входов. Но kubernetes.io/ingress.global-static-ip-name игнорируется, если я использую ingress.class == nginx. Если я передаю статический ip в spec.loadBalancerIP, он игнорируется. Может я чего-то не понимаю. Что еще я могу сделать, чтобы развернуть каждую ветку в субдомен? Благодарю.