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:
Вы приобрели NAT gateway и EIP. Конкретная процедура следующая:
После покупки NAT gateway, вам не нужно добавлять правила SNAT или DNAT.
При покупке NAT gateway убедитесь, что NAT gateway принадлежит той же VPC и подсети, что и кластер CCE, где запущена рабочая нагрузка.
Параметр | Описание |
|---|---|
Имя сервиса | Введите имя, которое может совпадать с именем рабочей нагрузки. |
Тип сервиса | Выбрать DNAT. |
Пространство имён | Выберите пространство имён, к которому относится рабочая нагрузка. |
Привязанность сервиса | Определяет, направлять ли внешний трафик к локальному узлу или к общекластерному эндпоинту. Подробнее см. Привязанность сервиса (externalTrafficPolicy).
|
Селектор | Service будет ассоциирован с pod-ами рабочей нагрузки на основе метки и будет направлять трафик к pod-ам с этой меткой. Вы можете добавить ключ и значение для метки pod и нажать Подтвердить. Вы также можете нажать Ссылка на метку рабочей нагрузки чтобы использовать метку существующей рабочей нагрузки. В отображаемом диалоговом окне выберите рабочую нагрузку и нажмите OK. |
DNAT | Выберите шлюз DNAT и EIP, приобретённые в Подготовка: создание шлюза NAT и EIP. |
Порт |
|
Вы можете настроить доступ к Service при создании рабочей нагрузки с помощью 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 | Да | Строка | Этот параметр установлен в 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. |
kubectl create -f nginx-deployment.yaml
Если отображается информация, похожая на следующую, рабочая нагрузка была создана:
deployment/nginx created
Проверьте созданную рабочую нагрузку.
kubectl get pod
Если отображается информация, похожая на следующую, рабочая нагрузка запущена:
NAME READY STATUS RESTARTS AGEnginx-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 5s
