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:
Вы приобрели NAT шлюз и EIP. Конкретная процедура следующая:
После покупки NAT шлюза вам не нужно добавлять правила SNAT или DNAT.
При покупке NAT шлюза убедитесь, что он принадлежит тому же VPC и подсети, что и кластер CCE, где запущена рабочая нагрузка.
Параметр | Описание |
|---|---|
Имя Сервиса | Введите имя, которое может совпадать с именем рабочей нагрузки. |
Тип Сервиса | Выберите DNAT. |
Пространство имён | Выберите пространство имён, к которому относится рабочая нагрузка. |
Привязка Сервиса | Определяет, направлять ли внешний трафик к локальному узлу или к кластерному эндпоинту. Подробнее смотрите Service Affinity (externalTrafficPolicy).
|
Селектор | Сервис будет связан с pod‑ами рабочей нагрузки на основе метки и будет направлять трафик к pod‑ам с этой меткой. Вы можете добавить ключ и значение метки pod и нажать Подтвердить. Вы также можете нажать Reference Workload Label чтобы использовать метку существующей рабочей нагрузки. В появившемся диалоговом окне выберите нагрузку и нажмите OK. |
DNAT | Выберите DNAT шлюз и EIP, приобретённые в Подготовка: создание NAT Gateway и EIP. |
Порт |
|
Вы можете настроить доступ к Сервису при создании рабочей нагрузки с помощью kubectl. В этом разделе в качестве примера используется нагрузка Nginx, чтобы показать, как реализовать внутрикластерный доступ с помощью kubectl.
vi nginx-deployment.yaml
Содержимое файла:
apiVersion: apps/v1kind: Deploymentmetadata:name: nginxspec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- image: nginx:latestname: nginximagePullSecrets:- name: default-secret
vi nginx-nodeport-svc.yaml
Содержимое файла:
apiVersion: v1kind: Servicemetadata:name: nginx-natannotations:kubernetes.io/elb.class: dnatkubernetes.io/natgateway.id: e4a1cfcf-29df-4ab8-a4ea-c05dc860f554spec:loadBalancerIP: 10.78.42.242ports:- name: service0port: 80protocol: TCPtargetPort: 80selector:app: nginxtype: LoadBalancer
Параметр | Обязательно | Тип | Описание |
|---|---|---|---|
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. |
kubectl create -f nginx-deployment.yaml
Если отображается информация, похожая на следующую, нагрузка создана:
deployment/nginx created
Проверьте созданную нагрузку.
kubectl get pod
Если отображается информация, похожая на следующую, нагрузка работает:
NAME READY STATUS RESTARTS AGEnginx-2601814895-znhbr 1/1 Running 0 15snginx-2601814895-znhbr 1/1 Running 0 15s
kubectl create -f nginx-nat-svc.yaml
Если отображается информация, похожая на следующую, Сервис создаётся:
service/nginx-nat created
Проверьте созданный Сервис.
kubectl get svc
Если отображается информация, похожая на следующую, Сервис создан:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes ClusterIP 10.247.0.1 <none> 443/TCP 3dnginx-nat LoadBalancer 10.247.226.2 **.**.**.** 80:30589/TCP 5snginx-nat LoadBalancer 10.247.226.2 **.**.**.** 80:30589/TCP 5s
