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

DNAT

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

A DNAT Service provides Network Address Translation (NAT) for all nodes in a cluster so that multiple nodes can share an EIP. The access address of a DNAT Service is in the format of <EIP-of-the-NAT-gateway>:<access-port>, for example, 10.117.117.117:80.

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

Рисунок 1 DNAT Service


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

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

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

Подготовка: создание NAT‑шлюза и EIP

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

  1. Войдите в NAT Gateway console и нажмите Buy Public NAT Gateway в правом верхнем углу.

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

    Note

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

  2. Войдите в EIP console и нажмите Buy EIP в правом верхнем углу.

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

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

    Parameter

    Description

    Service Type

    Выберите DNAT.

    Service Name

    Введите имя, которое может совпадать с именем workload.

    Namespace

    Выберите namespace, к которому относится workload.

    Selector

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

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

  4. Настройте параметры доступа.

    Parameter

    Description

    Service Affinity

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

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

    DNAT

    Выберите шлюз DNAT и EIP, приобретённые в Preparations: Creating a NAT Gateway and an EIP.

    Port

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

  5. Нажмите Create.

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

Вы можете настроить доступ к Service при создании рабочей нагрузки с помощью 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 для настройки параметров 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
    Table 1 Ключевые параметры

    Параметр

    Обязательно

    Тип

    Описание

    kubernetes.io/elb.class

    Да

    Строка

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

    kubernetes.io/natgateway.id

    Да

    Строка

    Идентификатор NAT gateway. Этот параметр нельзя изменить после создания Service.

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

    В консоли управления нажмите Service List и выберите Networking > NAT Gateway. Нажмите имя целевого NAT gateway, чтобы открыть страницу его сведений. На вкладке Basic Information найдите и скопируйте ID.

    loadBalancerIP

    Yes

    String

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

    port

    Yes

    Integer

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

    targetPort

    Yes

    String

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

    type

    Yes

    Строка

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

  4. Создайте workload.

    kubectl create -f nginx-deployment.yaml

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

    deployment/nginx created

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

    kubectl get pod

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

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

  5. Создайте Service.

    kubectl create -f nginx-nat-svc.yaml

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

    service/nginx-nat created

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

    kubectl get svc

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

    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. Enter the URL, which is in the format of <EIP>:<port>, in the address bar of a browser.

DNAT — документация Cloud Container Engine руководство пользователя облако Cloud.ru