Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Atualizado em 2024-11-28 GMT+08:00

DNAT

Cenário

Um gateway de conversão de endereços de rede de destino (DNAT) está situado entre nós de cluster e redes públicas e é atribuído um EIP. Depois de receber solicitações de entrada de redes públicas, o gateway NAT traduz o EIP (endereço de destino nas solicitações de entrada) em um endereço interno de cluster. Parece aos usuários da carga de trabalho como se todos os nós que executam a carga de trabalho compartilhassem o mesmo EIP.

DNAT fornecem maior confiabilidade do que NodePort baseado em EIP, nos quais o EIP está vinculado a um único nó e, quando o nó estiver desativado, todas as solicitações de entrada para a carga de trabalho serão distribuídas. O endereço de acesso está no formato de <EIP>:<access port>, por exemplo, 10.117.117.117:80.

Figura 1 DNAT

Restrições

Observe as seguintes restrições ao usar o serviço NAT Gateway:

  • Os clusters que usam o modelo de rede VPC não permitem que os contêineres acessem os Serviços de DNAT cujo externalTrafficPolicy esteja definido como local.
  • Várias regras para um gateway NAT podem usar o mesmo EIP, mas as regras para diferentes gateways NAT devem usar diferentes EIPs.
  • Cada VPC pode ter apenas um gateway NAT.
  • Os usuários não podem adicionar manualmente a rota padrão em uma VPC.
  • Somente uma regra de SNAT pode ser adicionada a uma sub-rede em uma VPC.
  • As regras de SNAT e de DNAT são projetadas para diferentes funções. Se as regras de SNAT e de DNAT usarem o mesmo EIP, a preempção de recursos ocorrerá. Uma regra de SNAT não pode compartilhar um EIP com uma regra de DNAT com Port Type definido como All ports.
  • As regras de DNAT não suportam a vinculação de um EIP a um endereço IP virtual.
  • Quando os serviços EIP e NAT Gateway estiverem configurados para um servidor, os dados serão encaminhados por meio do EIP.
  • O bloco CIDR personalizado deve ser um subconjunto dos blocos CIDR da sub-rede de VPC.
  • O bloco CIDR personalizado deve ser um bloco CIDR da Direct Connect e não pode entrar em conflito com os blocos CIDR de sub-rede existentes da VPC.
  • Ao executar operações em recursos subjacentes de um ECS, por exemplo, alterar suas especificações, as regras de gateway NAT configuradas se tornarão inválidas. Exclua as regras e as reconfigure.
  • Depois que um serviço é criado, se a configuração de afinidade for alternada do nível de cluster para o nível de nó, a tabela de rastreamento de conexão não será limpa. Recomendamos que você não modifique a configuração de afinidade de Serviço após a criação do Serviço. Para modificá-lo, crie um Serviço novamente.
  • Se a sub-rede de nó estiver associada a uma tabela de rota personalizada, adicione a rota de NAT à tabela de rota personalizada ao usar o Serviço DNAT.

Criar um gateway NAT e um endereço IP elástico

Você criou um gateway NAT e um endereço IP elástico. O procedimento específico é o seguinte:

  1. Faça logon no console de gerenciamento, escolha Networking > NAT Gateway na lista de serviços e clique em Buy Public NAT Gateway no canto superior direito. Configure parâmetros com base nos requisitos do site.

    Ao comprar um gateway NAT, verifique se o gateway NAT pertence à mesma VPC e sub-rede que o cluster do CCE em que a carga de trabalho está em execução.

  2. Faça logon no console de gerenciamento, escolha Networking > Elastic IP na lista de serviços e clique em Buy EIP no canto superior direito. Configure parâmetros com base nos requisitos do site.

Criar um Serviço de gateway DNAT

  1. Efetue logon no console do CCE e acesse o console do cluster.
  2. Escolha Networking no painel de navegação e clique em Create Service no canto superior direito.
  3. Defina parâmetros relacionados.

    • Service Name: especifique um nome do Serviço, que pode ser o mesmo que o nome da carga de trabalho.
    • Service Type: selecione DNAT.
    • Namespace: namespace ao qual a carga de trabalho pertence.
    • Service Affinity: para mais detalhes, consulte externalTrafficPolicy (afinidade de serviço).
      • Cluster level: os endereços IP e as portas de acesso de todos os nós em um cluster podem acessar a carga de trabalho associada ao Serviço. O acesso ao Serviço causará perda de desempenho devido ao redirecionamento de rota e o endereço IP de origem do cliente não pode ser obtido.
      • Node level: somente o endereço IP e a porta de acesso do nó onde a carga de trabalho está localizada podem acessar a carga de trabalho associada ao Serviço. O acesso ao Serviço não causará perda de desempenho devido ao redirecionamento de rota e o endereço IP de origem do cliente pode ser obtido.
    • Selector: adicione um rótulo e clique em Confirm. Um Serviço seleciona um pod com base no rótulo adicionado. Você também pode clicar em Reference Workload Label para fazer referência ao rótulo de uma carga de trabalho existente. Na caixa de diálogo exibida, selecione uma carga de trabalho e clique em OK.
    • IPv6: esta função está desativada por padrão. Depois que essa função é ativada, o endereço IP do cluster do Serviço muda para um endereço IPv6. Para obter detalhes, consulte Criação de um cluster IPv4/IPv6 de pilha dupla no CCE. Este parâmetro está disponível apenas em clusters de v1.15 ou posterior com IPv6 habilitado (definido durante a criação do cluster).
    • DNAT: selecione o gateway DNAT e o EIP criados em Criar um gateway NAT e um endereço IP elástico.
    • Port
      • Protocol: protocolo utilizado pelo Serviço.
      • Container Port: porta na qual a carga de trabalho escuta. A carga de trabalho do Nginx escuta na porta 80.
      • Service Port: uma porta mapeada para a porta do contêiner no endereço IP interno do cluster. A carga de trabalho pode ser acessada em <cluster-internal IP address>:<access port>. O intervalo de números de porta é de 1 a 65535.

  4. Clique em OK.

Configurar o tipo de acesso usando o kubectl

Você pode definir o Serviço ao criar uma carga de trabalho usando o kubectl. Esta seção usa uma carga de trabalho do Nginx como exemplo para descrever como implementar o acesso dentro do cluster usando kubectl.

  1. Use o kubectl para se conectar ao cluster. Para mais detalhes, consulte Conexão a um cluster usando o kubectl.
  2. Crie e edite os arquivos nginx-deployment.yaml e nginx-nat-svc.yaml.

    Os nomes dos arquivos são definidos pelo usuário. nginx-deployment.yaml e nginx-nat-svc.yaml são apenas exemplo de nomes de arquivo.

    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 obter descrições dos campos anteriores, consulte Tabela 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
    Tabela 1 Parâmetros principais

    Parâmetro

    Obrigatório

    Tipo

    Descrição

    kubernetes.io/elb.class

    Sim

    String

    Esse parâmetro é definido como dnat para que o CCE possa trabalhar com um gateway NAT e as regras de DNAT possam ser adicionadas.

    kubernetes.io/natgateway.id

    Sim

    String

    ID de um gateway NAT.

    loadBalancerIP

    Sim

    String

    ID do EIP.

    port

    Sim

    Integer

    Porta de acesso definida no console. O valor varia de 1 a 65535.

    targetPort

    Sim

    String

    Porta de contêiner definida no console. O valor varia de 1 a 65535.

    type

    Sim

    String

    O tipo de serviço de gateway NAT deve ser definido como LoadBalancer.

  3. Crie uma carga de trabalho.

    kubectl create -f nginx-deployment.yaml

    Se forem exibidas informações semelhantes às seguintes, a carga de trabalho está sendo criada.

    deployment "nginx" created

    kubectl get po

    Se informações semelhantes às seguintes forem exibidas, a carga de trabalho está em execução.

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

  4. Crie um Serviço.

    kubectl create -f nginx-nat-svc.yaml

    Se forem apresentadas informações semelhantes às seguintes, o Serviço foi criado.

    service "nginx-eip" created

    kubectl get svc

    Se as informações a seguir forem exibidas, o Serviço foi definido com êxito e a carga de trabalho está acessível.

    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. Na barra de endereços do seu navegador, digite 10.154.74.98:80 e pressione Enter.

    Neste exemplo, 10.154.74.98 é o endereço IP elástico e 80 é o número da porta obtido na etapa anterior.