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:
Вы приобрели NAT gateway и EIP. Конкретная процедура выглядит следующим образом:
После покупки NAT gateway добавлять правила SNAT или DNAT не требуется.
При покупке NAT gateway убедитесь, что NAT gateway принадлежит той же VPC и подсети, что и кластер CCE, в котором работает нагрузка.
Параметр | Описание |
|---|---|
Имя сервиса | Введите имя, которое может совпадать с именем рабочей нагрузки. |
Тип сервиса | Выберите DNAT. |
Пространство имён | Выберите пространство имён, к которому относится рабочая нагрузка. |
Привязка сервиса | Определяет, направлять ли внешний трафик к локальному узлу или к конечной точке на уровне кластера. Подробнее см. Service Affinity (externalTrafficPolicy). |
Селектор | Сервис будет связан с pod‑ами рабочей нагрузки на основе метки и будет направлять трафик к pod‑ам с этой меткой. Вы можете добавить ключ и значение для метки pod и нажмите Confirm. Вы также можете нажать Reference Workload Label, чтобы использовать метку существующего workload. В отображаемом диалоговом окне выберите workload и нажмите OK. |
DNAT | Выберите шлюз DNAT и EIP, приобретённые в Preparations: Creating a NAT Gateway and an EIP. |
Port |
|
Вы можете настроить доступ к Service при создании workload с помощью kubectl. В этом разделе в качестве примера используется workload Nginx, чтобы описать, как реализовать внутрикластерный доступ с помощью kubectl.
vi nginx-deployment.yaml
Содержимое файла:
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 | Да | String | Этот параметр установлен в dnat, который используется для доступа к сервису NAT Gateway и добавления правил DNAT. Этот параметр нельзя изменить после создания Service. |
kubernetes.io/natgateway.id | Да | String | Идентификатор NAT gateway. Этот параметр нельзя изменить после создания Service. Как получить: В консоли управления нажмите Service List и выберите Networking > NAT Gateway. Нажмите имя целевого NAT gateway, чтобы открыть страницу его деталей. На вкладке Basic Information найдите и скопируйте ID. |
loadBalancerIP | Yes | String | Введите EIP, связанный с NAT gateway. |
port | Yes | Integer | Порт, используемый для доступа к сервису DNAT. При необходимости вы можете настроить порт. Диапазон портов от 1 до 65535. |
targetPort | Yes | String | Порт прослушивания контейнеров сервиса. Диапазон портов от 1 до 65535. Необходимо определить порт исходя из образа контейнера. Например, порт по умолчанию для Nginx — 80, а порт по умолчанию для MySQL — 3306. |
type | Yes | String | Тип службы NAT gateway должен быть установлен в LoadBalancer. |
kubectl create -f nginx-deployment.yaml
Если отображается информация, аналогичная следующей, workload создан:
deployment/nginx created
Проверьте созданный workload.
kubectl get pod
Если отображается информация, аналогичная следующей, workload работает:
NAME READY STATUS RESTARTS AGEnginx-2601814895-znhbr 1/1 Running 0 15s
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) AGEkubernetes ClusterIP 10.247.0.1 <none> 443/TCP 3dnginx-nat LoadBalancer 10.247.226.2 **.**.**.** 80:30589/TCP 5s
