Сервис DNAT предоставляет Network Address Translation (NAT) для всех узлов в кластере, чтобы несколько узлов могли совместно использовать EIP. Адрес доступа сервиса DNAT имеет формат \u003cEIP-of-the-NAT-gateway\u003e:\u003caccess-port\u003e, например, 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, в котором работает нагрузка.
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 | Да | 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 | Строка | Тип службы 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 создаётся:
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
