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

DNAT

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

A DNAT Сервис предоставляет Трансляция сетевых адресов (NAT) для всех узлов в кластере, чтобы несколько узлов могли использовать один EIP. Адрес доступа сервиса DNAT имеет формат <EIP-of-the-NAT-gateway>:<access-port>, например, 10.117.117.117:80.

Если pods требуют временного доступа из Интернета или трафик низкий, вы можете создать сервис DNAT. Сервисы DNAT обеспечивают более высокую надежность, чем NodePort Services. При использовании сервиса DNAT нет необходимости привязывать EIP к отдельному узлу, и запросы могут по‑прежнему распределяться к рабочей нагрузке, даже если любой из узлов внутри отключён.

Рисунок 1 Сервис DNAT


Ограничения

Соблюдайте следующие ограничения при использовании сервиса NAT Gateway:

  • Правила DNAT не поддерживают авторизацию enterprise проекта.
  • Контейнеры в кластере не могут получить доступ к сервису DNAT, чей externalTrafficPolicy является Локальный.
  • Для одного NAT‑gateway можно использовать один и тот же EIP в нескольких правилах, но правила разных NAT‑gateway должны использовать разные EIP‑ы.
  • Для каждой VPC может быть только один NAT‑gateway.
  • Пользователи не могут вручную добавить маршрут по умолчанию в VPC.
  • В подсети VPC можно добавить только одно правило SNAT.
  • Правила SNAT и DNAT предназначены для разных функций. Если правила SNAT и DNAT используют один и тот же EIP, произойдёт вытеснение ресурсов. Правило SNAT не может делить EIP с правилом DNAT с Тип порта установить в Все порты.
  • Правила DNAT не поддерживают привязку EIP к виртуальному IP‑адресу.
  • Когда оба сервиса EIP и NAT Gateway настроены для сервера, данные будут перенаправлены через EIP.
  • Пользовательский CIDR‑блок должен быть подмножеством CIDR‑блоков подсети VPC.
  • Пользовательский CIDR‑блок должен быть CIDR‑блоком Direct Connect и не может конфликтовать с существующими CIDR‑блоками подсети VPC.
  • Когда вы выполняете операции над базовыми ресурсами ECS, например, меняете его характеристики, настроенные правила NAT gateway становятся недействительными. Удалите правила и перенастройте их.
  • После создания Service, если настройка аффинити переключена с уровня Кластер на уровень node, таблица трассировки соединений не будет очищена. Не изменяйте настройку аффинити Service после его создания. Чтобы изменить её, создайте Service заново.
  • Если подсеть node связана с пользовательской таблицей маршрутов, добавьте маршрут NAT в пользовательскую таблицу маршрутов при использовании сервиса DNAT.

Подготовка: создание NAT Gateway и EIP

Вы приобрели NAT gateway и EIP. Конкретная процедура следующая:

  1. Войдите в консоль NAT Gateway и нажмите Купить Public NAT Gateway в правом верхнем углу.

    После покупки NAT gateway, вам не нужно добавлять правила SNAT или DNAT.

    Note

    При покупке NAT gateway убедитесь, что NAT gateway принадлежит той же VPC и подсети, что и кластер CCE, где запущена рабочая нагрузка.

  2. Войдите в консоль EIP и нажмите Купить EIP в правом верхнем углу.

Используя консоль CCE

  1. Войдите в консоль CCE и нажмите название кластера, чтобы открыть консоль кластера.
  2. В навигационной панели выберите Сервисы & Ingresses. В правом верхнем углу нажмите Создать сервис.
  3. Настройте параметры шлюза DNAT.

    Параметр

    Описание

    Имя сервиса

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

    Тип сервиса

    Выбрать DNAT.

    Пространство имён

    Выберите пространство имён, к которому относится рабочая нагрузка.

    Привязанность сервиса

    Определяет, направлять ли внешний трафик к локальному узлу или к общекластерному эндпоинту. Подробнее см. Привязанность сервиса (externalTrafficPolicy).

    • Уровень кластера: IP-адреса и порты всех узлов в кластере могут обращаться к рабочей нагрузке, связанной с Service. Однако обращение к Service может привести к снижению производительности из‑за перенаправления маршрута, и исходный IP-адрес клиента может быть недоступен.
    • Уровень узла: Только IP-адрес и порт узла, на котором расположена рабочая нагрузка, могут обращаться к рабочей нагрузке, связанной с Service. Обращение к Service не приведет к снижению производительности из‑за перенаправления маршрута, и исходный IP-адрес клиента может быть получен.

    Селектор

    Service будет ассоциирован с pod-ами рабочей нагрузки на основе метки и будет направлять трафик к pod-ам с этой меткой.

    Вы можете добавить ключ и значение для метки pod и нажать Подтвердить.

    Вы также можете нажать Ссылка на метку рабочей нагрузки чтобы использовать метку существующей рабочей нагрузки. В отображаемом диалоговом окне выберите рабочую нагрузку и нажмите OK.

    DNAT

    Выберите шлюз DNAT и EIP, приобретённые в Подготовка: создание шлюза NAT и EIP.

    Порт

    • Протокол: протокол, поддерживаемый Сервисом.
    • Порт контейнера: прослушиваемый порт сервисных контейнеров. Порт находится в диапазоне от 1 до 65535. Вам необходимо определить порт на основе образа контейнера. Например, порт по умолчанию для Nginx — 80, а порт по умолчанию для MySQL — 3306.
    • Порт сервиса: порт, используемый для доступа к сервису DNAT. При необходимости вы можете настроить порт. Порт находится в диапазоне от 1 до 65535.

  4. Нажмите OK.

Использование kubectl

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

  1. Используйте kubectl для доступа к кластеру. Для получения подробностей см Доступ к кластеру с использованием kubectl.
  2. Создайте и отредактируйте nginx-deployment.yaml файл для настройки образцовой рабочей нагрузки. Для получения подробностей см Создание Deployment. nginx-deployment.yaml это пример имени файла. Вы можете переименовать его по необходимости.

    vi nginx-deployment.yaml

    Содержимое файла:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: nginx
    spec:
    replicas: 1
    selector:
    matchLabels:
    app: nginx
    template:
    metadata:
    labels:
    app: nginx
    spec:
    containers:
    - image: nginx:latest
    name: nginx
    imagePullSecrets:
    - name: default-secret

  3. Создайте и отредактируйте nginx-nat-svc.yaml файл для настройки параметров Service. nginx-nat-svc.yaml это пример имени файла. Вы можете переименовать его по необходимости.

    vi nginx-nodeport-svc.yaml

    Содержимое файла:

    apiVersion: v1
    kind: Service
    metadata:
    name: nginx-nat
    annotations:
    kubernetes.io/elb.class: dnat
    kubernetes.io/natgateway.id: e4a1cfcf-29df-4ab8-a4ea-c05dc860f554
    spec:
    loadBalancerIP: 10.78.42.242
    ports:
    - name: service0
    port: 80
    protocol: TCP
    targetPort: 80
    selector:
    app: nginx
    type: LoadBalancer
    Таблица 1 Ключевые параметры

    Параметр

    Обязательно

    Тип

    Описание

    kubernetes.io/elb.class

    Да

    Строка

    Этот параметр установлен в dnat, который используется для доступа к сервису NAT Gateway и добавления правил DNAT. Этот параметр нельзя изменить после создания ресурса.

    kubernetes.io/natgateway.id

    Да

    Строка

    ID NAT‑шлюза. Этот параметр нельзя изменить после создания ресурса.

    Как получить:

    В консоли управления щелкните Список сервисов и выберите Сеть > NAT Gateway. Щелкните имя целевого NAT Gateway, чтобы открыть страницу его сведений. На Основная информация вкладке, найдите и скопируйте ID.

    loadBalancerIP

    Да

    String

    Введите EIP, связанный с NAT Gateway.

    порт

    Да

    Integer

    Порт, используемый для доступа к сервису DNAT. При необходимости вы можете настроить порт. Порт находится в диапазоне от 1 до 65535.

    targetPort

    Да

    String

    Прослушиваемый порт контейнеров сервиса. Порт находится в диапазоне от 1 до 65535. Необходимо определить порт на основе образа контейнера. Например, порт по умолчанию для Nginx — 80, а порт по умолчанию для MySQL — 3306.

    тип

    Да

    Строка

    NAT gateway тип сервиса должен быть установлен на LoadBalancer.

  4. Создать рабочую нагрузку.

    kubectl create -f nginx-deployment.yaml

    Если отображается информация, похожая на следующую, рабочая нагрузка была создана:

    deployment/nginx created

    Проверьте созданную рабочую нагрузку.

    kubectl get pod

    Если отображается информация, похожая на следующую, рабочая нагрузка запущена:

    NAME READY STATUS RESTARTS AGE
    nginx-2601814895-znhbr 1/1 Running 0 15s

  5. Создать сервис.

    kubectl create -f nginx-nat-svc.yaml

    Если отображается информация, похожая на следующую, сервис создается:

    service/nginx-nat created

    Проверьте созданный сервис.

    kubectl get svc

    Если отображается информация, похожая на следующую, сервис был создан:

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    kubernetes ClusterIP 10.247.0.1 <none> 443/TCP 3d
    nginx-nat LoadBalancer 10.247.226.2 **.**.**.** 80:30589/TCP 5s

  6. Введите URL, который имеет формат <EIP>:<port>, в адресной строке браузера.