Установка с помощью Helm#

Angie Ingress Controller (ANIC) разворачивается в кластере Kubernetes с помощью Helm.

Программные требования:

  • Kubernetes 1.22+

  • Helm 3.0+

Поддерживаемые дистрибутивы:

Название

Версии

Архитектуры

Alpine Linux

3.21

x86_64, ARM64

Debian

11 "Bullseye"

x86_64, ARM64

ALT Linux

10

x86_64, ARM64

Получение доступа к образу ANIC#

  1. Авторизуйтесь в Docker Registry, чтобы получить доступ к образу ANIC:

    $ docker login -u=<login> -p=<password> anic.docker.angie.software
    

    После успешной авторизации информация о доступе будет сохранена в файле ~/.docker/config.json.

  2. Создайте секрет для Kubernetes, используя файл Docker-конфигурации:

    $ kubectl create secret generic regcred \
          --from-file=.dockerconfigjson=$HOME/.docker/config.json \
          --type=kubernetes.io/dockerconfigjson
    

    Секрет regcred будет использоваться для доступа к приватным образам в Kubernetes.

Cкачаивание образа ANIC#

Cкачайте образ ANIC и перенесите его в свой личный репозиторий, для этого:

  1. Загрузите образ ANIC:

    $ docker pull anic.docker.angie.software/anic:latest
    
  2. Переименуйте образ:

    $ docker tag anic.docker.angie.software/anic:latest <ваш_репозиторий>/<образ_anic>
    
  3. Отправьте переименованный образ в свой репозиторий:

    $ docker push <ваш_репозиторий>/<образ_anic>
    
  4. В файле values.yaml обновите поле controller.image.repository соответственно.

Подключение лицензии#

Подключите лицензию для ANIC, следуя инструкции.

Получение и настройка Helm-чарта#

  1. Склонируйте Helm-чарт из репозитория Angie Software.

    Доступ к репозиторию можно получить, обратившись на .

    $ git clone https://git.angie.software/web-server/anic-helm-charts.git
    
  2. Отредактируйте файл values.yaml, указав имя секрета, созданного для доступа к образам:

    imagePullSecretName: "regcred"
    
  3. Соберите и установите Helm-чарт:

    $ helm install <имя_релиза> <путь_до_чарта>
    

    Helm cгенерирует манифесты Kubernetes на основе шаблонов (templates/) и значений (values.yaml), а затем установит их в кластере.

    Примечание

    По умолчанию для ANIC требуется несколько CRD (определений пользовательских ресурсов), установленных в кластере. Helm устанавливает их автоматически. Если не установить CRD, поды ANIC не будут готовы (Ready). Если вы не используете пользовательские ресурсы, для которых требуются CRD (что соответствует параметру controller.enableCustomResources, установленному как false), установку CRD можно пропустить, указав в команде helm install параметр --skip-crds.

Обновление CRD#

Чтобы обновить CRD, скачайте исходные файлы Helm-чарта, а затем выполните команду:

$ kubectl apply -f crds/

Примечание

Может появиться следующее предупреждение, но его можно проигнорировать:

Warning: kubectl apply should be used on resource created by either
kubectl create --save-config or kubectl apply

Удаление CRD#

Чтобы удалить CRD, скачайте исходные файлы Helm-чарта, а затем выполните команду:

$ kubectl delete -f crds/

Примечание

Эта команда удалит все соответствующие CRD в вашем кластере во всех пространствах имен. Убедитесь, что в кластере нет пользовательских ресурсов, которые вы хотите сохранить, и не запущены другие экземпляры ANIC.

Конфигурация#

Ниже перечислены настраиваемые параметры Helm-чарта Ingress Controller и их значения по умолчанию.

controller.name#

Имя daemonset или deployment ANIC.

По умолчанию: создается автоматически

controller.kind#

Тип установки ANIC - deployment или daemonset.

По умолчанию: deployment

controller.annotations#

Позволяет устанавливать аннотации для deployment или daemonset.

По умолчанию: {}

controller.angiePro#

Развертывает ANIC для Angie PRO.

По умолчанию: false

controller.angieDashboard.enable#

Включает Angie Dashboard (status endpoint для получения информации о состоянии Angie). Соответствует аргументу командной строки -angie-dashboard.

По умолчанию: false

controller.angieDashboard.port#

Задает порт для Angie Dashboard. Соответствует аргументу командной строки -angie-dashboard-port.

По умолчанию: 8082

controller.angieDashboard.allowCidrs#

Добавляет блоки IP/CIDR в список разрешенных для Angie Dashboard. Соответствует аргументу командной строки -angie-dashboard-allow-cidrs. Несколько IP или CIDR разделяются запятыми.

По умолчанию: 127.0.0.1,::1

controller.angieStatusPrometheus.enable#

Включает выдачу статистики Angie в формате Prometheus. Соответствует аргументу командной строки -angie-status-prometheus.

По умолчанию: true

controller.angieStatusPrometheus.port#

Задает порт, на котором доступна статистика Angie в формате Prometheus. Формат: [1024 - 65535]. Соответствует аргументу командной строки -angie-status-prometheus-port.

По умолчанию: 8083

controller.angieStatusPrometheus.allowCidrs#

Добавляет блоки IP/CIDR в список разрешений для статистики Angie в формате Prometheus. Соответствует аргументу командной строки -angie-status-prometheus-allow-cidrs. Несколько IP или CIDR разделяются запятыми.

По умолчанию: 127.0.0.1,::1

controller.angieStatusPrometheus.path#

Позволяет менять путь для публикации статистики Angie в формате Prometheus. Соответствует аргументу командной строки -angie-status-prometheus-path.

По умолчанию: /p8s

controller.angieStatusPrometheus.service.create#

Создает сервис ClusterIP для предоставления метрик веб-сервера Angie.

По умолчанию: false

controller.angieStatusPrometheus.service.labels#

Задает лейблы для сервиса ClusterIP.

По умолчанию: service: "anic-webserver-metrics"

controller.angieStatusPrometheus.serviceMonitor.create#

Создает ServiceMonitor для метрик веб-сервера Angie.

По умолчанию: false

controller.angieStatusPrometheus.serviceMonitor.labels#

Задает лейблы для сервиса ServiceMonitor.

По умолчанию: Нет

controller.reloadTimeout#

Время ожидания в миллисекундах, в течение которого ANIC будет ожидать успешной перезагрузки Angie после изменения или при начальном запуске.

По умолчанию: 60000

controller.hostNetwork#

Позволяет подам ANIC использовать сетевое пространство имен хоста.

По умолчанию: false

controller.dnsPolicy#

Политика DNS для подов ANIC.

По умолчанию: ClusterFirst

controller.debug#

Включает отладку для Angie. Требуется задать значение error-log-level: debug в ConfigMap через controller.config.entries.

По умолчанию: false

controller.logLevel#

Уровень ведения журнала ANIC.

По умолчанию: 1

controller.image.digest#

Дайджест образа ANIC.

По умолчанию: Нет

controller.image.repository#

Репозиторий образов ANIC.

По умолчанию: myregistry.host.ru/angie-ingress

controller.image.tag#

Тег образа ANIC.

По умолчанию:

controller.image.pullPolicy#

Политика скачивания образа ANIC.

По умолчанию: IfNotPresent

controller.lifecycle#

Жизненный цикл подов ANIC.

По умолчанию: {}

controller.customConfigMap#

Имя пользовательской ConfigMap, используемой ANIC. Если имя задано, то конфигурация по умолчанию игнорируется.

По умолчанию: ""

controller.config.name#

Имя ConfigMap, используемой ANIC.

По умолчанию: создается автоматически

controller.config.annotations#

Аннотации к ConfigMap в ANIC.

По умолчанию: {}

controller.config.entries#

Записи в ConfigMap для настройки конфигурации Angie.

По умолчанию: {}

controller.customPorts#

Список пользовательских портов, которые должны быть доступны в поде ANIC. Следует обычному синтаксису yaml Kubernetes для контейнерных портов.

По умолчанию: []

controller.defaultTLS.cert#

Сертификат TLS в кодировке Base64 для сервера HTTPS по умолчанию.

Примечание

Рекомендуется указать свой собственный сертификат. Альтернативное решение: полный пропуск секрета сервера по умолчанию приведет к тому, что Angie будет по умолчанию отклонять TLS-подключения к серверу.

По умолчанию: Нет

controller.defaultTLS.key#

Ключ TLS в кодировке Base64 для сервера HTTPS по умолчанию.

Примечание

Рекомендуется указать свой собственный ключ. Альтернативное решение: полный пропуск секрета сервера по умолчанию приведет к тому, что Angie будет по умолчанию отклонять TLS-подключения к серверу.

По умолчанию: Нет

controller.defaultTLS.secret#

Секрет с сертификатом TLS и ключом для сервера HTTPS по умолчанию. Значение должно соответствовать следующему формату: <пространство имен>/<имя>. Используется в качестве альтернативы указанию сертификата и ключа с помощью параметров controller.defaultTLS.cert и controller.defaultTLS.key.

Примечание

Альтернативное решение: полный пропуск секрета сервера по умолчанию приведет к тому, что Angie будет по умолчанию отклонять TLS-подключения к серверу.

По умолчанию: Нет

controller.wildcardTLS.cert#

Сертификат TLS в кодировке Base64 для каждого узла Ingress или VirtualServer, у которого включен TLS, но не указан секрет. Если параметр не задан, Angie прервет любую попытку установить TLS-соединение для таких узлов Ingress или VirtualServer.

По умолчанию: Нет

controller.wildcardTLS.key#

Ключ TLS в кодировке Base64 для каждого узла Ingress или VirtualServer, у которого включен TLS, но не указан секрет. Если параметр не задан, Angie прервет любую попытку установить TLS-соединение для таких узлов Ingress или VirtualServer.

По умолчанию: Нет

controller.wildcardTLS.secret#

Секрет с сертификатом TLS и ключом для каждого узла Ingress или VirtualServer, у которого включен TLS, но не указан секрет. Значение должно соответствовать следующему формату: <пространство имен>/<имя>. Используется в качестве альтернативы указанию сертификата и ключа с помощью параметров controller.wildcardTLS.cert и controller.wildcardTLS.key.

По умолчанию: Нет

controller.nodeSelector#

Селектор узлов для назначения подов ANIC.

По умолчанию: {}

controller.terminationGracePeriodSeconds#

Период плавного завершения работы пода ANIC.

По умолчанию: 30

controller.tolerations#

Допуски подов ANIC (tolerations).

По умолчанию: []

controller.affinity#

Привязка подов ANIC (affinity).

По умолчанию: {}

controller.topologySpreadConstraints#

Ограничения на распространение топологии подов ANIC.

По умолчанию: {}

controller.env#

Дополнительные переменные окружения, которые должны быть установлены на подах ANIC.

По умолчанию: []

controller.volumes#

Тома подов ANIC.

По умолчанию: []

controller.volumeMounts#

Точки подключения томов подов ANIC.

По умолчанию: []

controller.initContainers#

Значение initContainers для подов ANIC.

По умолчанию: []

controller.extraContainers#

Дополнительные контейнеры (например, сайдкар) для подов Ingress Controller.

По умолчанию: []

controller.resources#

Ресурсы подов ANIC.

По умолчанию: requests: cpu=100m,memory=128Mi

controller.replicaCount#

Количество реплик deployment ANIC.

По умолчанию: 1

controller.ingressClass#

Класс ANIC. Должен быть развернут ресурс IngressClass с именем, тождественным этому классу. В противном случае ANIC не запустится. ANIC обрабатывает только те ресурсы, которые принадлежат его классу, т. е. их ресурс поля "ingressClassName" совпадает с классом. ANIC обрабатывает все ресурсы VirtualServer, VirtualServerRoute и TransportServer, которые не имеют поля "ingressClassName", во всех версиях Kubernetes.

По умолчанию: angie

controller.setAsDefaultIngress#

Новым Ingress без указанного поля "ingressClassName" будет присвоен класс, указанный в controller.ingressClass.

По умолчанию: false

controller.watchNamespace#

Разделенный запятыми список пространств имен, за ресурсами которых должен следить ANIC. По умолчанию ANIC отслеживает все пространства имен. Взаимоисключающие с controller.watchNamespaceLabel. Обратите внимание, что при настройке нескольких пространств имен с использованием опции Helm cli --set строка должна быть заключена в двойные кавычки, а запятые экранированы с помощью обратной косой черты - например, --set controller.watchNamespace="default\,anic".

По умолчанию: ""

controller.watchNamespaceLabel#

Настраивает в ANIC просмотр только пространств имен с меткой foo=bar. По умолчанию ANIC отслеживает все пространства имен. Взаимоисключающая с controller.watchNamespace настройка.

По умолчанию: ""

controller.watchSecretNamespace#

Разделенный запятыми список пространств имен, за которыми Ingress Controller должен следить в поисках ресурсов типа Secret. Если этот параметр не настроен, ANIC отслеживает одни и те же пространства имен в поисках всех ресурсов. См. также controller.watchNamespace и controller.watchNamespaceLabel. Обратите внимание, что при настройке нескольких пространств имен с использованием опции Helm cli --set строка должна быть заключена в двойные кавычки, а запятые экранированы с помощью обратной косой черты - например, --set controller.watchSecretNamespace="default\,angie-ingress".

По умолчанию: ""

controller.enableCustomResources#

Включает пользовательские ресурсы.

По умолчанию: true

controller.enableTLSPassthrough#

Включает передачу данных по протоколу TLS на порту 443. Требуется controller.enableCustomResources.

По умолчанию: false

controller.enableCertManager#

Включает автоматическое управление сертификатами x509 для ресурсов виртуального сервера с помощью cert-manager (cert-manager.io). Требуется controller.enableCustomResources.

По умолчанию: false

controller.enableExternalDNS#

Включает интеграцию с ExternalDNS для настройки общедоступных записей DNS у ресурсов VirtualServer с использованием ExternalDNS. Требуется controller.enableCustomResources.

По умолчанию: false

controller.globalConfiguration.create#

Создает пользовательский ресурс GlobalConfiguration. Требуется controller.enableCustomResources.

По умолчанию: false

controller.globalConfiguration.spec#

Спецификация GlobalConfiguration для определения параметров глобальной конфигурации ANIC.

По умолчанию: {}

controller.enableSnippets#

Включает пользовательские фрагменты конфигурации Angie в ресурсах Ingress, VirtualServer, VirtualServerRoute и TransportServer.

По умолчанию: false

controller.healthStatus#

Добавляет местоположение "/angie-health" на сервер по умолчанию. Местоположение отвечает кодом статуса 200 на любой запрос. Это полезно для внешней проверки работоспособности ANIC.

По умолчанию: false

controller.healthStatusURI#

Задает URI местоположения состояния работоспособности на сервере по умолчанию. Требуется controller.HealthStatus.

По умолчанию: "/angie-health"

controller.angieStatus.enable#

Включает в Angie API.

По умолчанию: true

controller.angieStatus.port#

Задает порт, на котором доступен Angie API.

По умолчанию: 8080

controller.angieStatus.allowCidrs#

Добавляет блоки IP или CIDR в список разрешенных для Angie API. Несколько IP или CIDR разделяются запятыми.

По умолчанию: 127.0.0.1,::1

controller.priorityClassName#

Класс приоритета подов ANIC.

По умолчанию: Нет

controller.service.create#

Создает сервис для предоставления доступа к подам ANIC.

По умолчанию: true

controller.service.type#

Тип сервиса, который необходимо создать для ANIC.

По умолчанию: LoadBalancer

controller.service.externalTrafficPolicy#

Внешняя политика трафика сервиса. Значение Local сохраняет исходный IP-адрес клиента.

По умолчанию: Local

controller.service.annotations#

Аннотации сервиса ANIC.

По умолчанию: {}

controller.service.extraLabels#

Экстра-метки сервиса.

По умолчанию: {}

controller.service.loadBalancerIP#

Статический IP-адрес для балансировщика нагрузки. Для controller.service.type должно быть установлено значение LoadBalancer. Поставщик облачных услуг должен поддерживать эту функцию.

По умолчанию: ""

controller.service.externalIPs#

Список внешних IP-адресов для сервиса ANIC.

По умолчанию: []

controller.service.loadBalancerSourceRanges#

Диапазоны IP-адресов (CIDR), которым разрешен доступ к балансировщику нагрузки. Для controller.service.type должно быть установлено значение LoadBalancer. Поставщик облачных услуг должен поддерживать эту функцию.

По умолчанию: []

controller.service.name#

Имя сервиса.

По умолчанию: создается автоматически

controller.service.customPorts#

Список пользовательских портов, которые будут доступны через сервис ANIC. Следует обычному синтаксису yaml Kubernetes для портов сервиса.

По умолчанию: []

controller.service.httpPort.enable#

Включает HTTP-порт для сервиса ANIC.

По умолчанию: true

controller.service.httpPort.port#

HTTP-порт сервиса ANIC.

По умолчанию: 80

controller.service.httpPort.nodePort#

Пользовательский NodePort для HTTP-порта. Для controller.service.type должно быть установлено значение NodePort.

По умолчанию: ""

controller.service.httpPort.targetPort#

Целевое значение HTTP-порта сервиса ANIC.

По умолчанию: 80

controller.service.httpsPort.enable#

Включает порт HTTPS для сервиса ANIC.

По умолчанию: true

controller.service.httpsPort.port#

HTTPS-порт сервиса ANIC.

По умолчанию: 443

controller.service.httpsPort.nodePort#

Пользовательский NodePort для HTTPS-порта. Для controller.service.type должно быть установлено значение NodePort.

По умолчанию: ""

controller.service.httpsPort.targetPort#

Целевой порт HTTPS-порта сервиса ANIC.

443

controller.serviceAccount.annotations#

Аннотации учетной записи сервиса ANIC.

По умолчанию: {}

controller.serviceAccount.name#

Имя учетной записи сервиса подов ANIC. Используется для RBAC.

По умолчанию: создается автоматически

controller.serviceAccount.imagePullSecretName#

Имя секретного файла, содержащего учетные данные реестра Docker. Секрет должен находиться в том же пространстве имен, что и релиз Helm.

По умолчанию: ""

controller.reportIngressStatus.enable#

Добавляет в поле адреса в статусе ресурсов Ingress внешний адрес Ingress Controller. Нужно также указать источник внешнего адреса через внешнюю службу через controller.reportIngressStatus.ExternalService, либо через controller.reportIngressStatus.ingressLink, либо через запись external-status-address в ConfigMap через controller.config.entries.

Примечание

Значение controller.config.entries.external-status-address имеет приоритет над остальными.

По умолчанию: true

controller.reportIngressStatus.externalService#

Указывает имя сервиса с типом LoadBalancer, через который Ingress Controller будет доступен извне. Внешний адрес сервиса используется для отчетов о состоянии ресурсов Ingress, VirtualServer и VirtualServerRoute. Значение controller.reportIngressStatus.enable должно быть задано как true. Значение по умолчанию создается автоматически и включается, когда controller.service.create имеет значение true, а controller.service.type - значение LoadBalancer.

По умолчанию: создается автоматически

controller.reportIngressStatus.enableLeaderElection#

Включает выбор лидера, чтобы избежать ситуации, когда несколько реплик контроллера сообщают о состоянии ресурсов Ingress. Значение controller.reportIngressStatus.enable должно быть задано как true.

По умолчанию: true

controller.reportIngressStatus.leaderElectionLockName#

Указывает имя ConfigMap в том же пространстве имен, что и контроллер, которое используется для блокировки выбора лидера. Значение controller.reportIngressStatus.enableLeaderElection должно быть задано как true.

По умолчанию: создается автоматически

controller.reportIngressStatus.annotations#

Аннотации к конфигурационной карте выборов лидера.

По умолчанию: {}

controller.pod.annotations#

Аннотации пода ANIC.

По умолчанию: {}

controller.pod.extraLabels#

Дополнительные экстра-метки для пода ANIC.

По умолчанию: {}

controller.readyStatus.enable#

Включает конечную точку готовности "/angie-ready". Конечная точка возвращает код успешного завершения, если Angie загрузил всю конфигурацию после запуска. Этим также настраивается проверка готовности для подов ANIC, которая использует конечную точку готовности.

По умолчанию: true

controller.readyStatus.port#

HTTP-порт для конечной точки готовности.

По умолчанию: 8081

controller.readyStatus.initialDelaySeconds#

Число секунд с запуска пода ANIC до инициирования проверки готовности.

По умолчанию: 0

controller.enableLatencyMetrics#

Включает сбор метрик задержки для апстримов. Требуется prometheus.create.

По умолчанию: false

controller.minReadySeconds#

Задает минимальное количество секунд, в течение которых вновь созданный под должен прийти в готовое состояние без сбоя какого-либо из контейнеров, чтобы считаться доступным; документацию см. здесь.

По умолчанию: 0

controller.autoscaling.enabled#

Включает HorizontalPodAutoscaling.

По умолчанию: false

controller.autoscaling.annotations#

Аннотации HorizontalPodAutoscaler для ANIC.

По умолчанию: {}

controller.autoscaling.minReplicas#

Минимальное число реплик для HPA.

По умолчанию: 1

controller.autoscaling.maxReplicas#

Максимальное число реплик для HPA.

По умолчанию: 3

controller.autoscaling.targetCPUUtilizationPercentage#

Целевой процент загрузки ЦП.

По умолчанию: 50

controller.autoscaling.targetMemoryUtilizationPercentage#

Целевой процент использования памяти.

По умолчанию: 50

controller.podDisruptionBudget.enabled#

Включает PodDisruptionBudget.

По умолчанию: false

controller.podDisruptionBudget.annotations#

Аннотации к бюджету сбоев пода ANIC.

По умолчанию: {}

controller.podDisruptionBudget.minAvailable#

Количество подов ANIC, которые должны быть доступны. Взаимоисключающая с maxUnavailable` настройка.

По умолчанию: 0

controller.podDisruptionBudget.maxUnavailable#

Количество подов ANIC, которые могут быть недоступны. Взаимоисключающая с minAvailable настройка.

По умолчанию: 0

controller.strategy#

Задает стратегию замены старых подов новыми. Документация по стратегии обновления развертывания и стратегии обновления daemonset

По умолчанию: {}

controller.disableIPV6#

В явной форме отключает прослушиватели IPV6 для узлов, которые не поддерживают стек IPV6.

По умолчанию: false

controller.readOnlyRootFilesystem#

Настраивает корневую файловую систему как доступную только для чтения и добавляет тома для временных данных.

По умолчанию: false

rbac.create#

Настраивает RBAC.

По умолчанию: true

prometheus.create#

Публикует метрики ANIC в формате Prometheus.

По умолчанию: true

prometheus.port#

Настраивает порт для получения метрик.

По умолчанию: 9113

prometheus.scheme#

Настраивает схему HTTP, используемую для подключений к конечной точке Prometheus.

По умолчанию: http

prometheus.secret#

Пространство имен или имя TLS-секрета Kubernetes. Если секрет указан, он используется для защиты конечной точки Prometheus с помощью TLS-соединений.

По умолчанию: ""

prometheus.service.create#

Создает сервис ClusterIP для метрик ANIC.

По умолчанию: false

prometheus.service.labels#

Задает лейблы для сервиса ClusterIP.

По умолчанию: service: "anic-prometheus-service"

prometheus.serviceMonitor.create#

Создает ServiceMonitor для метрик ANIC.

По умолчанию: false

prometheus.serviceMonitor.labels#

Задает лейблы для сервиса ServiceMonitor.

По умолчанию: Нет