Облачная платформаAdvanced

Создание LoadBalancer Ingress в Console

Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

В Kubernetes ingress — это объект ресурса, который контролирует, как Services внутри кластера могут быть доступны из внешней сети кластера. Вы можете использовать ingress для настройки различных правил переадресации доступа к pods в кластере. Ниже используется Nginx workload в качестве примера, чтобы описать, как создать LoadBalancer ingress в console.

Требования

Ограничения

  • Только кластеры v1.17 и новее поддерживают выделенные load balancer'ы.
  • Рекомендуется, чтобы другие ресурсы не использовали load balancer, автоматически создаваемый ingress'ом. В противном случае load balancer будет занят после удаления ingress, что приведёт к оставшимся ресурсам.
  • После создания ingress обновляйте и поддерживайте конфигурацию выбранных load balancers в консоли CCE. Не изменяйте конфигурацию в консоли ELB. В противном случае сервис ingress может работать некорректно.
  • URL, зарегистрированный в политике переадресации ingress, должен совпадать с URL, используемым для доступа к backend Service. В противном случае будет возвращена ошибка 404.
  • В кластере IPVS, если LoadBalancer ingress и Service используют один и тот же load balancer, доступ к ingress из узлов и контейнеров кластера невозможен. Это происходит потому, что kube-proxy привязывает адрес LoadBalancer Service к мосту ipvs-0, перехватывающему трафик ELB. Используйте разные load balancers для LoadBalancer ingress и Service.
  • Выделенный load balancer должен быть типа application (HTTP/HTTPS) и поддерживать private networks (с частным IP address).
  • Если несколько ingress'ов обращаются к одному и тому же порту ELB в кластере, параметры конфигурации listener'а (например, сертификат, связанный с listener'ом, и атрибут HTTP/2 listener'а) подчиняются конфигурации первого ingress.

Добавление LoadBalancer Ingress

This section uses an Nginx workload as an example to describe how to add a LoadBalancer ingress.

  1. Войдите в CCE console и нажмите cluster name, чтобы открыть консоль кластера.
  2. Выберите Services and Ingresses в панели навигации, нажмите Ingresses tab и нажмите Create Ingress в правом верхнем углу.
  3. Настройте параметры ingress.

    • Name: Введите имя для ingress, например, ingress-demo.
    • Interconnect with Nginx: Эта опция отображается только после установки дополнения NGINX Ingress Controller. Если эта опция доступна, дополнение NGINX Ingress Controller уже установлено. Включение этой опции создаст Nginx ingress. Отключите её, если хотите создать LoadBalancer ingress. Подробнее см. Creating an Nginx Ingress on the Console.
    • Protocol Version: Выберите версию протокола для LoadBalancer ingress. Этот параметр доступен только для кластеров с двойным стеком IPv4/IPv6.
    • Load Balancer: Выберите тип балансировщика нагрузки и режим создания.

      Балансировщик нагрузки может быть выделенным или общим. Выделенный балансировщик нагрузки должен быть типа application (HTTP/HTTPS) и поддерживать частные сети.

      Вы можете выбрать Use existing или Auto create для получения балансировщика нагрузки. Подробнее о конфигурации различных режимов создания см. Table 1.

      Table 1 Конфигурация балансировщика нагрузки

      Как создать

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

      Use existing

      Только балансировщики нагрузки в той же VPC, что и кластер, могут быть выбраны. Если доступный балансировщик нагрузки отсутствует, нажмите Create Load Balancer, чтобы создать его в консоли ELB.

      Auto create

      • Instance Name: Введите имя балансировщика нагрузки.
      • Enterprise Project: Этот параметр доступен только для корпоративных пользователей, которые включили проект предприятия. Проекты предприятия упрощают управление на уровне проекта и группировку облачных ресурсов и пользователей.
      • AZ: доступно только для выделенных балансировщиков нагрузки. Вы можете создавать балансировщики нагрузки в нескольких AZ, чтобы повысить доступность сервиса. Если требуется восстановление после аварии, рекомендуется выбрать несколько AZ.
      • Frontend Subnet: доступно только для выделенных балансировщиков нагрузки. Используется для выделения IP‑адресов балансировщикам нагрузки для внешнего предоставления сервисов.
      • Backend Subnet: доступно только для выделенных балансировщиков нагрузки. Используется для выделения IP‑адресов балансировщикам нагрузки для доступа к бэкенд‑сервису.
      • Network Specifications, Application-oriented Specifications или Specifications (доступно только для выделенных балансировщиков нагрузки)
        • Elastic: применяется к переменному трафику, оплата производится на основе общего трафика. Кластеры v1.21.10-r10, v1.23.8-r10, v1.25.3-r10 и более поздних версий поддерживают эластичные спецификации.
        • Fixed: применяется к стабильному трафику, оплата производится на основе спецификаций.
      • EIP: если вы выберете Auto assign, вы можете настроить размер пропускной способности для публичной сети.
      • Resource Tag: Вы можете добавлять теги ресурсов для классификации ресурсов. Вы можете создавать predefined tags в консоли TMS. Эти теги доступны всем ресурсам, поддерживающим теги. Вы можете использовать эти теги для повышения эффективности создания тегов и миграции ресурсов.

    • Listener: An ingress configures a listener for the load balancer, which listens to requests from the load balancer and distributes traffic. After the configuration is complete, a listener is created on the load balancer. The default listener name is k8s_<Protocol type>_<Port number>, for example, k8s_HTTP_80.
      • Frontend Protocol: задайте протокол listener балансировщика нагрузки для установления соединений с клиентами.
      • External Port: номер порта, открытый для адреса сервиса ELB. Номер порта настраиваемый. Если вы выбираете существующий балансировщик нагрузки, порты listener разных кластеров нельзя переиспользовать. Несколько ingress в одном кластере могут использовать один и тот же порт listener, но рабочая конфигурация listener определяется первой конфигурацией ingress.
      • Access Control
        • Inherit ELB Configurations: CCE не изменяет существующие конфигурации контроля доступа в консоли ELB.
        • Allow all IP addresses: Не настроен контроль доступа.
        • Trustlist: Только выбранная группа IP‑адресов может получить доступ к балансировщику нагрузки.
        • Blocklist: Выбранная группа IP‑адресов не может получить доступ к балансировщику нагрузки.
        Note

        Для кластеров v1.25.16-r10, v1.27.16-r10, v1.28.15-r0, v1.29.10-r0, v1.30.6-r0, v1.31.1-r0 и более новых, при использовании выделенного балансировщика нагрузки, можно одновременно выбрать не более пяти групп IP‑адресов для контроля доступа.

      • Certificate Source: Поддерживаются TLS secret и сертификаты сервера ELB.
        • TLS secret: For details about how to create a secret certificate, see Creating a Secret.
        • ELB server certificate: Используйте сертификат, созданный в ELB.
      • Server Certificate: При создании HTTPS‑слушателя для балансировщика нагрузки привяжите сертификат к балансировщику, чтобы обеспечить зашифрованную аутентификацию при передаче данных по HTTPS.
        Note

        Если для выбранного порта на балансировщике нагрузки уже существует HTTPS‑ingress, сертификат нового HTTPS‑ingress должен совпадать с сертификатом существующего ingress. Это означает, что у слушателя может быть только один сертификат. Если к одному и тому же слушателю того же балансировщика нагрузки добавить два сертификата, каждый с разным ingress, действующим будет только тот сертификат, который был добавлен первым.

      • SNI: обозначает Server Name Indication (SNI) — расширенный протокол TLS. SNI позволяет использовать несколько доменных имён, совместимых с TLS, для внешнего доступа по одному IP‑адресу и номеру порта, при этом разные доменные имена могут использовать разные сертификаты безопасности. После включения SNI клиент может передать запрашиваемое доменное имя при инициировании TLS‑handshake. Получив TLS‑запрос, балансировщик нагрузки ищет сертификат по доменному имени в запросе. Если соответствующий сертификат найден, балансировщик возвращает его для авторизации. В противном случае возвращается сертификат по умолчанию (серверный сертификат) для авторизации.
        Note
        • Опция SNI доступна только при использовании HTTPS.
        • Эта функция поддерживается только в кластерах v1.15.11 и более новых.
        • Для каждого сертификата SNI можно указать только одно доменное имя. Поддерживаются сертификаты с подстановочным доменом.
        • Для ingress‑ов, подключённых к одному порту ELB, не настраивайте SNI с одинаковым доменным именем, но разными сертификатами. В противном случае SNI будут перезаписаны.
      • Security Policy: комбинации различных версий TLS и поддерживаемых наборов шифров, доступные для HTTPS‑слушателей. Значение по умолчанию — TLS-1-2.

        Для получения подробной информации о политиках безопасности см. Elastic Load Balance User Guide.

        Note
        • Security Policy доступна только при выборе HTTPS.
        • Эта функция поддерживается только в кластерах v1.17.9 и более поздних версиях.
      • Backend Protocol:

        Когда listener соответствует HTTP, можно выбрать только HTTP.

        Если это HTTPS listener, этот параметр можно установить в HTTP или HTTPS.

      • Advanced Options

        Configuration

        Description

        Constraint

        Transfer Listener Port Number

        Если эта функция включена, прослушиваемый порт на балансировщике нагрузки может быть передан бэкэнд‑серверам через HTTP‑заголовок пакета.

        Эта функция доступна только для выделенных балансировщиков нагрузки.

        Transfer Port Number in the Request

        Если эта функция включена, исходный порт клиента может быть передан бэкэнд‑серверам через HTTP‑заголовок пакета.

        Эта функция доступна только для выделенных балансировщиков нагрузки.

        Перезаписать X-Forwarded-Host

        Если эта функция включена, X-Forwarded-Host будет перезаписан с использованием поля Host в заголовке запроса клиента и передан бэкэнд‑серверам.

        Эта функция доступна только для выделенных балансировщиков нагрузки.

        Сжатие данных

        Если эта функция включена, определённые файлы будут сжаты. Если она не включена, файлы не будут сжаты.

        • Brotli может сжимать все форматы файлов.
        • GZIP может сжимать файлы следующих типов:

          text/xml, text/plain, text/css, application/javascript, application/x-javascript, application/rss+xml, application/atom+xml, application/xml и application/json

        Эта функция доступна только для выделенных балансировщиков нагрузки.

        Idle Timeout

        Период, в течение которого соединение клиента может оставаться бездействующим до его завершения. Если в течение этого времени к балансировщику нагрузки не поступает запросов, балансировщик разрывает соединение с клиентом и устанавливает новое соединение при появлении нового запроса.

        Эта конфигурация не поддерживается, если порт совместного балансировщика нагрузки использует UDP.

        Request Timeout

        Период, в течение которого должен быть получен запрос от клиента. Существует два случая:

        • Если клиент не успеет отправить заголовок запроса к load balancer в течение этого периода, запрос будет прерван.
        • Если интервал между двумя последовательными телами запросов, достигающими load balancer, превышает этот период, соединение будет разорвано.

        Эта функция доступна только для HTTP и HTTPS listeners.

        Response Timeout

        Период, в течение которого ожидается ответ от backend server. Если backend server не отвечает в течение этого периода после получения запроса, load balancer прекращает ожидание и возвращает ошибку HTTP 504.

        Эта функция доступна только для HTTP и HTTPS listeners.

        Enable HTTP/2

        Определяет, включать ли HTTP/2 для HTTPS‑запросов между клиентом и load balancer. Перенаправление запросов с использованием HTTP/2 повышает производительность доступа между вашим приложением и load balancer. Однако load balancer по‑прежнему использует HTTP/1.x для перенаправления запросов к backend server.

        Эта функция доступна только когда listener поддерживает HTTPS.

    • Forwarding Policy: Когда адрес доступа запроса соответствует forwarding policy (которая состоит из доменного имени, порта и URL, например, 10.117.117.117:80/helloworld), запрос перенаправляется к целевому Service для обработки. Вы можете нажать , чтобы добавить несколько forwarding policies.
      • Domain Name: Введите фактическое доменное имя для доступа. Если оставить поле пустым, ingress можно будет открыть по IP‑адресу. Убедитесь, что доменное имя зарегистрировано и лицензировано. После того как forwarding policy настроена с указанным доменным именем, для доступа необходимо использовать доменное имя.
      • Path Matching Rule:
        • Prefix match: Если URL установлен как /healthz, можно обращаться к URL, соответствующим префиксу, например, /healthz/v1 и /healthz/v2.
        • Exact match: URL доступен только при полном совпадении. Например, если URL установлен как /healthz, доступен только /healthz.
        • RegEx match: URL сопоставляется на основе регулярного выражения. Например, если регулярное выражение /[A-Za-z0-9_.-]+/test, все URL, соответствующие этому правилу, доступны, например, /abcA9/test и /v1-Ab/test. Поддерживаются два стандарта регулярных выражений: POSIX и Perl.
      • Path: путь доступа, например, /healthz
        Note

        Указанный здесь путь доступа должен существовать в бекенд‑приложении. В противном случае переадресация завершится неудачей.

        Например, URL доступа по умолчанию для приложения Nginx — /usr/share/nginx/html. При добавлении /test в политику переадресации ingress убедитесь, что URL доступа вашего приложения Nginx содержит /usr/share/nginx/html/test. В противном случае будет возвращена ошибка 404.

      • Destination Service: Выберите существующий Service. Только Service, отвечающие требованиям, автоматически отображаются в списке Service.
      • Destination Service Port: Выберите порт доступа назначения Service.
      • Set ELB:
        • Algorithm: Вы можете выбрать Weighted round robin, Weighted least connections или Source IP hash.
          Note
          • Weighted round robin: Запросы переадресуются на разные серверы в зависимости от их весов, отражающих производительность обработки серверов. Серверы с более высоким весом получают пропорционально больше запросов, тогда как серверы с одинаковым весом получают одинаковое количество запросов. Этот алгоритм часто используется для коротких соединений, таких как HTTP‑службы.
          • Weighted least connections: Помимо веса, назначенного каждому серверу, учитывается количество соединений, обрабатываемых каждым бекенд‑сервером. Запросы переадресуются на сервер с наименьшим отношением количество соединений к весу. Этот алгоритм основан на алгоритме наименьшего количества соединений и назначает вес каждому серверу в зависимости от его возможностей обработки. Алгоритм часто используется для постоянных соединений, таких как соединения с базой данных.
          • Source IP hash: IP‑адрес источника каждого запроса вычисляется с помощью хеш‑алгоритма для получения уникального хеш‑ключа, после чего все бекенд‑серверы нумеруются. Сгенерированный ключ привязывает клиент к определённому серверу. Это позволяет распределять запросы от разных клиентов в режиме балансировки нагрузки и гарантирует, что запросы от одного и того же клиента переадресуются на один и тот же сервер. Алгоритм применяется к TCP‑соединениям без использования cookie.
        • Sticky Session: Функция отключена по умолчанию. Доступные варианты:
          • Load balancer cookie: Введите Stickiness Duration, значение от 1 до 1440 минут.
          • Application cookie: Введите Cookie Name, значение от 1 до 64 символов.
          Note
          • Когда distribution policy использует хеш IP‑источника, параметр sticky session нельзя задать.
          • Выделенные балансировщики нагрузки в кластерах версии ниже v1.21 не поддерживают sticky sessions. Если требуется sticky sessions, используйте общие балансировщики нагрузки.
        • Health Check: Установите конфигурацию проверки работоспособности балансировщика нагрузки. Если эта функция включена, поддерживаются следующие параметры:

          Параметр

          Описание

          Протокол

          Поддерживаются TCP, HTTP.

          • Check Path: Этот параметр доступен только для HTTP‑проверок работоспособности. Он указывает URL для проверок. Путь проверки должен начинаться со слеша (/) и содержать от 1 до 80 символов.

          Порт

          По умолчанию для проверки работоспособности используется порт сервиса (NodePort или контейнерный порт Service). Вы также можете указать другой порт для проверки. После указания порта для Service будет добавлен сервисный порт с именем cce-healthz.

          • Node Port: Если используется общий балансировщик нагрузки или не привязан экземпляр ENI, в качестве порта проверки используется node port. Если параметр не указан, используется случайный порт. Диапазон значений от 30000 до 32767.
          • Container Port: Когда выделенный балансировщик нагрузки привязан к сетевому интерфейсу, для проверки используется контейнерный порт. Диапазон значений от 1 до 65535.

          Период проверки (с)

          Указывает максимальный интервал между проверками работоспособности. Диапазон значений от 1 до 50.

          Тайм‑аут (с)

          Указывает максимальное время ожидания для каждой проверки. Диапазон значений от 1 до 50.

          Максимальное количество повторов

          Указывает максимальное количество повторных проверок состояния. Значение может принимать от 1 до 10.

      • Operation: нажмите Delete, чтобы удалить конфигурацию.
    • Annotation: Ingresses предоставляют некоторые расширенные функции CCE, которые реализуются с помощью аннотаций. При использовании kubectl для создания контейнера аннотации будут применяться. Подробнее см. Automatically Creating a Load Balancer While Creating an Ingress или Associating an Existing Load Balancer to an Ingress While Creating the Ingress.

  4. Нажмите OK. После создания ingress он отображается в списке ingress.

    On the ELB console, you can check the load balancer automatically created through CCE. The default name is cce-lb-<ingress.UID>. Click the load balancer name to go to the details page. On the Listeners tab page, check the listener and forwarding policy of the target ingress.

    Notice

    После создания ingress обновляйте и обслуживайте выбранный балансировщик нагрузки в консоли CCE. Не изменяйте конфигурацию в консоли ELB. В противном случае сервис ingress может работать некорректно.

  5. Получите доступ к интерфейсу /healthz рабочей нагрузки, например, рабочей нагрузке defaultbackend.

    1. Получите адрес доступа к интерфейсу /healthz рабочей нагрузки. Адрес доступа состоит из IP‑адреса балансировщика нагрузки, внешнего порта и URL‑отображения, например, 10.**.**.**:80/healthz.
    2. Введите URL интерфейса /healthz, например http://10.**.**.**:80/healthz, в адресную строку браузера, чтобы получить доступ к рабочей нагрузке, как показано на Figure 1.

      Figure 1 Accessing the /healthz interface of defaultbackend