Публикация приложений средствами Ingress NGINX Controller

Для публикации приложений администратор кластера должен создать Ingress-контроллер. Порядок настройки описан в разделе «Примеры настройки балансировки». Запросите у администратора имя ingressClass контроллера и укажите его в манифесте ресурса Ingress, который маршрутизирует входящий трафик к приложению.

  • HTTP
  • HTTPS

Пример базового Ingress для публикации приложения по HTTP:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  namespace: prod
spec:
  ingressClassName: nginx # Имя IngressClass, предоставленное администратором кластера.
  rules:
  - host: app.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: productpage
            port:
              number: 80

Для HTTPS укажите Secret с сертификатом в секции tls. Secret должен существовать в том же неймспейсе, что и Ingress. Сертификат может выпустить либо cert-manager, либо администратор вручную.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  namespace: prod
spec:
  ingressClassName: nginx
  tls:
    - hosts:
        - app.example.com
      secretName: application-tls # Secret с tls.crt и tls.key в неймспейсе prod.
  rules:
  - host: app.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: productpage
            port:
              number: 80

Дополнительные параметры маршрутизации задаются аннотациями Ingress. Полный список поддерживаемых аннотаций — в описании модуля ingress-nginx. Частые примеры:

  • nginx.ingress.kubernetes.io/rewrite-target — перезапись пути;
  • nginx.ingress.kubernetes.io/whitelist-source-range — список разрешённых CIDR;
  • nginx.ingress.kubernetes.io/backend-protocol: "GRPC" — протокол к бэкенду для gRPC, если имя порта Service не указывает на gRPC.

Проверка

После применения Ingress проверьте объект и адрес контроллера:

d8 k -n <NAMESPACE> get ingress
d8 k -n <NAMESPACE> describe ingress <INGRESS_NAME>

Убедитесь, что в статусе Ingress есть адрес и что DNS для host указывает на точку входа контроллера, которую сообщил администратор.

Проверьте доступность приложения, подставив адрес точки входа (успешный ответ — код 200 или другой ожидаемый код приложения):

curl -vk \
  --resolve app.example.com:443:<ENTRY_POINT_ADDRESS> \
  https://app.example.com/

Балансировка gRPC

Раздел относится к публикации gRPC через Ingress NGINX Controller (ingress-nginx). Для Gateway API используйте GRPCRoute.

Чтобы балансировка gRPC-сервисов за Ingress NGINX заработала автоматически, присвойте порту соответствующего объекта Service имя с префиксом или значением grpc. Если имя порта другое, добавьте аннотацию nginx.ingress.kubernetes.io/backend-protocol: "GRPC" к Ingress.

Дополнительные ресурсы