Как разворачивал Nginx Ingress Controller в Kubernetes

«Как разворачивал Nginx Ingress Controller в Kubernetes» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для развертывания Ingress-контроллера я использовал Helm-чарт ingress-nginx, так как это стандартный и поддерживаемый сообществом метод.

Базовая установка:

# Добавление репозитория и обновление индексов
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update

# Установка в namespace ingress-nginx
helm install ingress-nginx ingress-nginx/ingress-nginx 
  -n ingress-nginx 
  --create-namespace

Проверка: После установки проверял, что контроллер запустился и получил внешний IP (в случае Cloud LoadBalancer).

kubectl get svc -n ingress-nginx

Кастомизация под облако: В AWS для использования Network Load Balancer (NLB) вместо Classic применял аннотации через values.yaml:

controller:
  service:
    type: LoadBalancer
    annotations:
      service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
      service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing"

Для bare-metal или локальных кластеров: Настраивал контроллер в режиме NodePort и использовал внешний балансировщик (например, HAProxy) или разворачивал MetalLB в layer2-режиме для выделения IP-адресов из внутренней сети.

Дополнительные настройки: Часто добавлял конфигурационные параметры для увеличения таймаутов, настройки SSL или включения модулей, например, modsecurity для WAF.