Облачная платформаВсе платформы

DNAT

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

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

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

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


Примечания и ограничения

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

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

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

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

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

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

    Note

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

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

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

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

    Параметр

    Описание

    Имя Сервиса

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

    Тип Сервиса

    Выберите DNAT.

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

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

    Привязка Сервиса

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

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

    Селектор

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

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

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

    DNAT

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

    Порт

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

  4. Нажмите OK.

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

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

  1. Используйте kubectl для доступа к кластеру. Подробнее см.Accessing a Cluster Using kubectl.
  2. Создайте и отредактируйте nginx-deployment.yaml файл для настройки примерной нагрузки. Подробнее см.Creating a 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 файл для настройки параметров Сервиса. 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

    Yes

    String

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

    kubernetes.io/natgateway.id

    Yes

    String

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

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

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

    loadBalancerIP

    Yes

    String

    Введите EIP, связанный с NAT шлюзом.

    port

    Yes

    Integer

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

    targetPort

    Yes

    String

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

    type

    Yes

    String

    Тип сервиса NAT шлюза должен быть установлен в 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 15snginx-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 5snginx-nat LoadBalancer 10.247.226.2 **.**.**.** 80:30589/TCP 5s

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