Входные правила не работают - PullRequest
0 голосов
/ 22 октября 2018

Я использую GCE и пытаюсь выставить приложение через вход.Но правила пути не работают.

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, я получаю: default 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

1 Ответ

0 голосов
/ 23 октября 2018

Вы можете создать несколько входов, используя один и тот же внешний IP-адрес.Вам просто нужно убедиться, что они находятся под другим хостом (или правилами имени хоста), чтобы пути не мешали друг другу.Каждый хост представляет server {} блок в конфигах 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

Если вы хотите использовать externalIP, это все еще выполнимо, но вам просто нужно использовать отдельный входной контроллер с другим именем входного класса.Например, для входного контроллера nginx вы можете использовать опцию --ingress-class:

ingress class

Кроме того, если вы не укажете --ingress-class в своем первом входном контроллере, вам придется настроить его тоже, в противном случае, как говорит опция, первый вход будет удовлетворять всем классам.

...