Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2024-09-10 GMT+08:00

DNAT

Escenario

Un gateway de traducción de direcciones de red de destino (DNAT) está situado entre los nodos de clúster y las redes públicas y se le asigna una EIP. Después de recibir solicitudes entrantes de redes públicas, el gateway de NAT traduce la EIP (dirección de destino en las solicitudes entrantes) en una dirección interna de clúster. A los usuarios de la carga de trabajo les parece que todos los nodos que ejecutan la carga de trabajo comparten la misma EIP.

DNAT proporciona mayor fiabilidad que el NodePort basado en EIP en el que la EIP está vinculada a un único nodo y una vez que el nodo está inactivo, todas las solicitudes entrantes a la carga de trabajo no se distribuirán. La dirección de acceso tiene el formato de <EIP>:<puerto de acceso>, por ejemplo, 10.117.117.117:80.

Figura 1 DNAT

Notas y restricciones

Tenga en cuenta las siguientes restricciones cuando utilice el servicio de NAT Gateway:

  • Los clústeres que utilizan el modelo de red de VPC no permiten que contenedores acceda a los servicios de DNAT cuyo externalTrafficPolicy está establecido en local.
  • Múltiples reglas para un gateway de NAT pueden usar la misma EIP, pero las reglas para diferentes gateway de NAT deben usar diferentes EIP.
  • Cada VPC puede tener solo un gateway de NAT.
  • Los usuarios no pueden agregar manualmente la ruta predeterminada en una VPC.
  • Solo se puede agregar una regla de SNAT a una subred en una VPC.
  • Las reglas de SNAT y de DNAT están diseñadas para diferentes funciones. Si las reglas de SNAT y de DNAT usan la misma EIP, se producirá una preferencia de recursos. Una regla de SNAT no puede compartir una EIP con una regla de DNAT con Port Type establecida en All ports.
  • Las reglas de DNAT no admiten la vinculación de una EIP a una dirección IP virtual.
  • Cuando se configuren los servicios EIP y NAT Gateway para un servidor, los datos serán reenviados a través de la EIP.
  • El bloque CIDR personalizado debe ser un subconjunto de los bloques CIDR de subred de VPC.
  • El bloque CIDR personalizado debe ser un bloque CIDR de Direct Connect y no puede entrar en conflicto con los bloques CIDR de subred existentes de VPC.
  • Cuando realiza operaciones en recursos subyacentes de un ECS, por ejemplo, cambiando sus especificaciones, las reglas de gateway de NAT configuradas se vuelven inválidas. Es necesario eliminar las reglas y volver a configurarlas.
  • Después de crear un Service, si la configuración de afinidad se cambia del nivel de clúster al nivel de nodo, la tabla de seguimiento de conexiones no se borrará. Se recomienda no modificar la configuración de afinidad del Service después de que se haya creado el Servicio. Si necesita modificarlo, vuelva a crear un Service.
  • Si la subred de nodo está asociada con una tabla de ruta personalizada, debe agregar la ruta de NAT a la tabla de ruta personalizada cuando use el Service de DNAT.

Creación de un gateway de NAT y una dirección IP elástica

Ha creado un gateway de NAT y una dirección IP elástica. El procedimiento específico es el siguiente:

  1. Inicie sesión en la consola de gestión, elija Networking > NAT Gateway en la lista de servicios y haga clic en Buy NAT Gateway en la esquina superior derecha. Configure los parámetros basados en los requisitos del sitio.

    Al comprar un gateway de NAT, asegúrese de que el gateway de NAT pertenece a la misma VPC y subred que el clúster de CCE donde se ejecuta la carga de trabajo.

  2. Inicie sesión en la consola de gestión, elija Networking > Elastic IP en la lista de servicios y haga clic en Buy EIP en la esquina superior derecha. Configure los parámetros según los requisitos del sitio.

Creación de un servicio de gateway de DNAT

  1. Inicie sesión en la consola de CCE y acceda a la consola del clúster.
  2. Elija Networking en el panel de navegación y haga clic en Create Service en la esquina superior derecha.
  3. Configure los parámetros relacionados.

    • Service Name: Especifique un nombre de Service, que puede ser el mismo que el nombre de la carga de trabajo.
    • Access Type: Seleccione DNAT.
    • Namespace: Espacio de nombres al que pertenece la carga de trabajo.
    • Service Affinity: Para más información, véase externalTrafficPolicy (afinidad del Service).
      • Cluster level: Las direcciones IP y los puertos de acceso de todos los nodos de un clúster se pueden utilizar para acceder a la carga de trabajo asociada con el Service. El acceso al Service causará una pérdida de rendimiento debido a la redirección de la ruta y no se puede obtener la dirección IP de origen del cliente.
      • Node level: Solo la dirección IP y el puerto de acceso del nodo donde se encuentra la carga de trabajo pueden acceder a la carga de trabajo asociada con el Service. El acceso al Service no causará pérdida de rendimiento debido a la redirección de la ruta, y se puede obtener la dirección IP de origen del cliente.
    • Selector: Agregue una etiqueta y haga clic en Add. Un Service selecciona un pod basado en la etiqueta agregada. También puede hacer clic en Reference Workload Label para hacer referencia a la etiqueta de una carga de trabajo existente. En el cuadro de diálogo que se muestra, seleccione una carga de trabajo y haga clic en OK.
    • IPv6: Esta función está deshabilitada por defecto. Una vez habilitada esta función, la dirección IP del clúster del Service cambia a una dirección IPv6. Para obtener más información, consulte ¿Cómo creo un clúster de doble pila IPv4/IPv6? Este parámetro solo está disponible en clústeres de v1.15 o posterior con IPv6 habilitado (establecido durante la creación del clúster).
    • DNAT: Seleccione el gateway de DNAT y EIP creados en Creación de un gateway de NAT y una dirección IP elástica.
    • Port
      • Protocol: protocolo utilizado por el Service.
      • Container Port: puerto en el que escucha la carga de trabajo. La carga de trabajo de Nginx escucha en el puerto 80.
      • Service Port: un puerto asignado al puerto contenedor en la dirección IP interna del clúster. Se puede acceder a la carga de trabajo desde <cluster-internal IP address>:<access port>. El rango de número de puerto es de 1–65535.

  4. Haga clic en OK.

Configuración del tipo de acceso con kubectl

Puede establecer el Service al crear una carga de trabajo con kubectl. Esta sección utiliza una carga de trabajo de Nginx como ejemplo para describir cómo implementar el acceso intracluster usando kubectl.

  1. Utilice kubectl para conectarse al clúster. Para obtener más información, véase Conexión a un clúster con kubectl.
  2. Cree y edite los archivos nginx-deployment.yaml y nginx-nat-svc.yaml.

    Los nombres de archivo están definidos por el usuario. nginx-deployment.yaml y nginx-nat-svc.yaml son simplemente nombres de archivo de ejemplo.

    vi nginx-deployment.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - image: nginx:latest
            name: nginx
          imagePullSecrets:
          - name: default-secret

    Para ver las descripciones de los campos anteriores, consulte Tabla 1.

    vi nginx-nat-svc.yaml

    apiVersion: v1 
    kind: Service 
    metadata: 
      name: nginx 
      annotations:
        kubernetes.io/elb.class: dnat
        kubernetes.io/natgateway.id: e4a1cfcf-29df-4ab8-a4ea-c05dc860f554
    spec: 
      loadBalancerIP: 10.78.42.242
      ports: 
      - name: service0 
        port: 80 
        protocol: TCP 
        targetPort: 80 
      selector: 
        app: nginx 
      type: LoadBalancer
    Tabla 1 Parámetros de clave

    Parámetro

    Obligatorio

    Tipo

    Descripción

    kubernetes.io/elb.class

    String

    Este parámetro se establece en dnat por lo que CCE puede trabajar con un gateway de NAT y se pueden agregar reglas de DNAT.

    kubernetes.io/natgateway.id

    String

    ID de un gateway de NAT.

    loadBalancerIP

    String

    ID de EIP.

    port

    Integer

    Puerto de acceso establecido en la consola. El valor varía de 1 a 65535.

    targetPort

    String

    El puerto del contenedor está configurado en la consola. El valor varía de 1 a 65535.

    type

    String

    El tipo de servicio de gateway de NAT debe establecerse en LoadBalancer.

  3. Cree una carga de trabajo.

    kubectl create -f nginx-deployment.yaml

    Si se muestra la información similar a la siguiente, se está creando la carga de trabajo.

    deployment "nginx" created

    kubectl get po

    Si se muestra la información similar a la siguiente, la carga de trabajo se está ejecutando.

    NAME                     READY     STATUS             RESTARTS   AGE
    nginx-2601814895-sf71t   1/1       Running            0          8s

  4. Cree un Service.

    kubectl create -f nginx-nat-svc.yaml

    Si se muestra la información similar a la siguiente, se ha creado el Service.

    service "nginx-eip" created

    kubectl get svc

    Si se muestra la siguiente información, el Service se ha establecido correctamente y se puede acceder a la carga de trabajo.

    NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE 
    kubernetes   ClusterIP   10.247.0.1       <none>        443/TCP        3d 
    nginx-nat    LoadBalancer 10.247.226.2  10.154.74.98   80:30589/TCP  5s

  5. En la barra de direcciones de su navegador, introduzca 10.154.74.98:80 y pulse Enter.

    En este ejemplo, 10.154.74.98 es la dirección IP elástica y 80 es el número de puerto obtenido en el paso anterior.