В 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.