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‑шлюз и EIP. Конкретная процедура выглядит следующим образом:
После покупки NAT‑шлюза добавлять правила SNAT или DNAT не требуется.
При покупке NAT‑шлюза убедитесь, что NAT‑шлюз принадлежит той же VPC и подсети, что и кластер CCE, в котором работает нагрузка.
Parameter | Description |
|---|---|
Service Type | Выберите DNAT. |
Service Name | Введите имя, которое может совпадать с именем workload. |
Namespace | Выберите namespace, к которому относится workload. |
Selector | Добавьте ключ и значение метки pod. Service будет связан с pod workload на основе метки и будет направлять трафик к pod с этой меткой. Вы также можете нажать Reference Workload Label, чтобы использовать метку существующего workload. В отображённом диалоговом окне выберите workload и нажмите OK. |
Parameter | Description |
|---|---|
Service Affinity | Определяет, направлять ли внешний трафик к локальному узлу или к конечной точке на уровне кластера. Для получения подробной информации см. Service Affinity (externalTrafficPolicy). |
DNAT | Выберите шлюз DNAT и EIP, приобретённые в Preparations: Creating a NAT Gateway and an EIP. |
Port |
|
Вы можете настроить доступ к Service при создании рабочей нагрузки с помощью kubectl. В этом разделе в качестве примера используется нагрузка 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 | Да | Строка | Этот параметр установлен в 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. |
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
