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.
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:
- 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.
- 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
- Efetue logon no console do CCE e acesse o console do cluster.
- Escolha Networking no painel de navegação e clique em Create Service no canto superior direito.
- 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.
- 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.
- Use o kubectl para se conectar ao cluster. Para mais detalhes, consulte Conexão a um cluster usando o kubectl.
- 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.
- 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
- 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
- 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.