Создание входящих ресурсов на основе доменов: подробное руководство с примерами кода

В Kubernetes Ingress — это мощный ресурс, обеспечивающий внешний доступ к сервисам внутри кластера. Создавая ресурсы Ingress на основе доменов, вы можете маршрутизировать входящий трафик к различным сервисам на основе запрошенного имени домена. В этой статье мы рассмотрим различные методы создания ресурсов Ingress на основе доменов, а также приведем примеры кода.

Метод 1. Использование аннотаций
Аннотации предоставляют простой способ определения маршрутизации на основе домена во входящих ресурсах. Вот пример того, как можно использовать аннотации для достижения этой цели:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: domain-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: domain1.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: service1
            port:
              number: 80
  - host: domain2.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: service2
            port:
              number: 80

Метод 2: использование пользовательских контроллеров входящего трафика
Некоторые контроллеры входящего трафика, такие как Traefik или Ambassador, предлагают специальные функции для маршрутизации на основе домена. Эти контроллеры часто обеспечивают дополнительную гибкость и расширенные возможности конфигурации. Вот пример использования Traefik:

apiVersion: networking.k8s.io/v1
kind: IngressRoute
metadata:
  name: domain-ingress
spec:
  routes:
  - match: Host(`domain1.com`)
    kind: Rule
    services:
    - name: service1
      port: 80
  - match: Host(`domain2.com`)
    kind: Rule
    services:
    - name: service2
      port: 80

Метод 3. Использование внешнего DNS
Если у вас есть внешний поставщик DNS, вы можете использовать его для динамического создания записей DNS. Этот подход позволяет сопоставлять домены с конкретными ресурсами Ingress. Вот пример использования внешнего DNS с аннотациями:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: domain-ingress
  annotations:
    external-dns.alpha.kubernetes.io/hostname: domain1.com
spec:
  rules:
  - host: domain1.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: service1
            port:
              number: 80

Создание ресурсов Ingress на основе доменов — важный метод маршрутизации трафика в кластерах Kubernetes. В этой статье мы рассмотрели три метода: использование аннотаций, использование пользовательских контроллеров Ingress и интеграцию с внешними поставщиками DNS. Используя эти подходы, вы можете эффективно управлять маршрутизацией на основе домена в своей среде Kubernetes.