Ingress с поддоменами

Я использую Google Cloud для развертывания корпоративного приложения.

Цель: каждую ветку развернуть на какой-то субдомен (example.com): task-123.example.com и т.д.

Я копирую пространство имен Cloud DNS регистратору домена. Я передаю статический IP-адрес (через kubernetes.io/ingress.global-static-ip-name: "test-static-ip") для Ingress и передаю его регистратору домена в запись A. Но я не могу понять, как заставить работать субдомен.

Каждая ветка создает Ingress со статическим IP-адресом, но с разными URL-адресами для хоста.

Я сделал CNAME *.example.com, который ссылается на example.com, но это не работает.

Помоги мне, пожалуйста. Извините за мой английский.


person Serhii Koberniuk    schedule 21.10.2018    source источник
comment
чтобы уточнить, вы, кажется, используете GCE LB по умолчанию. Используете ли вы один вход с несколькими правилами или отдельный вход для каждого поддомена?   -  person Patrick W    schedule 22.10.2018
comment
Я использую Ingress для каждого поддомена (для каждого пространства имен).   -  person Serhii Koberniuk    schedule 22.10.2018
comment
Итак, разные входы для каждого поддомена и разные IP-адреса для каждого из них? Есть ли у вас записи A для каждого поддомена/входного ресурса?   -  person Patrick W    schedule 23.10.2018


Ответы (2)


Вы хотите, чтобы *.example.com указывал на контроллер входящего трафика, чтобы и branch1.example.com, и branch2.example.com обращались к контроллеру входящего трафика. Это достигается с помощью DNS с подстановочными знаками.

Каждая ветвь в вашем сценарии должна иметь собственное правило маршрутизации (входной ресурс) с разделом хоста, определенным для ее конкретной ветви. Контроллер входящего трафика обновляется при создании нового входящего ресурса, и его правила маршрутизации затем отражают дополнительное правило. Таким образом, создание новой ветки с новым входным ресурсом для этого хоста сообщит входному контроллеру, что трафик для этого конкретного хоста должен направляться в службу, специфичную для этой ветки. (Или вы можете определить все правила ветвления за один раз с входом разветвления - см. -combine-many-hosts-into-one-ingr/52382878#52382878">ingress-nginx — создать один вход на хост? Или объединить несколько хостов в один вход и перезагрузить? )

Вот как это работает. Я не уверен, что это ваш вопрос? Трудно диагностировать вашу проблему. Предположительно у вас есть Ingress, Service и Deployment? Чтобы помочь с этим, я думаю, вам нужно опубликовать их и объяснить (либо в виде обновления, либо в виде отдельного вопроса), какое поведение вы видите (возможно, 404)?

person Ryan Dawson    schedule 21.10.2018
comment
У меня есть развертывание + сервис + вход на ветку. Каждый вход имеет одно и то же правило пути, но с другим хостом, который зависит от имени ветки. У меня текущая ситуация, когда я пытаюсь открыть поддомен - я вижу долгую загрузку. При эхо-запросе хоста PING *** (***): 56 байт данных Тайм-аут запроса для icmp_seq 0 Тайм-аут запроса для icmp_seq 1 Тайм-аут запроса для icmp_seq 2 Тайм-аут запроса для icmp_seq 3 - person Serhii Koberniuk; 21.10.2018
comment
Я предполагаю, что вы используете вход GCE, а не NGINX (mkubaczyk.com/2017/12/13/). В их FAQ есть несколько советов по отладке (github.com). /kubernetes/ingress-gce/blob/master/docs/faq/gce.md). Я предполагаю, что вы делаете что-то вроде cloud.google. .com/kubernetes-engine/docs/tutorials/ У меня сложилось впечатление, что ваш DNS, вероятно, не соответствует IP-адресу субдоменов. Попробуйте только с одной ветвью без подстановочных знаков, чтобы сузить проблему. Также дважды проверьте статусы в консоли gcloud. - person Ryan Dawson; 22.10.2018
comment
Проблема решилась переключением на другой ip. Я использую региональный ip для входа, но он работает только с глобальным ip. У меня есть еще одна проблема, может быть, вы знаете, как я могу ее исправить /questions/52934429/ingress-rules-not-works - person Serhii Koberniuk; 22.10.2018

Заставить Ingress работать с поддоменами чрезвычайно просто благодаря kubernetes. По сути, вы просто определяете правила для каждого из ваших хостов.

Вот конкретные шаги, которые вы можете выполнить

  1. Направьте DNS на ваш входящий IP-адрес. для этого вам необходимо настроить глобальный статический IP-адрес. В облаке Google вы можете перейти сюдаи посмотри как это настроить

  2. Укажите этот статический IP-адрес в своей входной аннотации.

  3. Определите правила и сопоставление узлов, здесь есть документы для этого

Окончательный код будет выглядеть так, здесь я использую helm для итерации своих хостов

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: ingress-router
      annotations:
        kubernetes.io/ingress.global-static-ip-name: "your-static-domain"
        networking.gke.io/managed-certificates: "your-tls-cert"
    spec:
      rules:
    {{- range $index,$service := .Values.deployments }}
        - host: {{ $service.host }}
          http:
            paths:
              - backend:
                  serviceName: {{ $service.name }}-service-name
                  servicePort: {{ $service.port }}
    {{- end }}
person Dagm Fekadu    schedule 02.03.2020