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

Rede da VPC

Definição do modelo

A rede da VPC usa o roteamento da VPC para se integrar à rede subjacente. Esse modelo de rede é adequado para cenários de alto desempenho. O número máximo de nós permitidos em um cluster depende da cota de rota da VPC. Cada nó é atribuído a um bloco CIDR de um tamanho fixo. Esse modelo de rede é livre de sobrecarga de encapsulamento de túnel e supera o modelo de rede de túnel de contêiner. Além disso, como o roteamento de VPC inclui rotas para endereços IP de nó e o bloco CIDR de contêiner, os pods de contêiner em um cluster podem ser acessados diretamente de ECSs na mesma VPC fora do cluster.
Figura 1 Modelo de rede da VPC

Comunicação pod a pod

  • No mesmo nó: os pacotes são encaminhados diretamente através de IPvlan.
  • Entre os nós: os pacotes são encaminhados para o gateway padrão por meio de rotas padrão e, em seguida, para o nó do par por meio das rotas da VPC.

Vantagens e desvantagens

Vantagens

  • Nenhum encapsulamento de túnel é necessário, de modo que os problemas de rede são fáceis de localizar e o desempenho é alto.
  • Na mesma VPC, a rede externa do cluster pode ser conectada diretamente ao endereço IP do contêiner.

Desvantagens

  • O número de nós é limitado pela cota de rota da VPC.
  • Cada nó é atribuído a um bloco CIDR de um tamanho fixo, o que leva a um desperdício de endereços IP no bloco CIDR do contêiner.
  • Os pods não podem usar diretamente funcionalidades como EIPs e grupos de segurança.

Cenários aplicáveis

  • Requisitos de alto desempenho: como nenhum encapsulamento de túnel é necessário, o modelo de rede da VPC oferece um desempenho próximo ao de uma rede da VPC quando comparado ao modelo de rede de túnel de contêiner. Portanto, o modelo de rede da VPC se aplica a cenários que possuem altos requisitos de desempenho, como computação de IA e computação de Big Data.
  • Redes de pequena e média escala: devido à limitação nas tabelas de roteamento da VPC, é recomendável que o número de nós em um cluster seja menor ou igual a 1000.

Gerenciamento de endereços IP de contêiner

A rede da VPC aloca endereços IP de contêiner de acordo com as seguintes regras:

  • O bloco CIDR de contêiner é alocado separadamente.
  • Os endereços IP são alocados por nó. Um bloco CIDR com um tamanho fixo (que é configurável) é alocado para cada nó em um cluster a partir do bloco CIDR do contêiner.
  • O bloco CIDR do contêiner aloca ciclicamente blocos CIDR para novos nós em sequência.
  • Os pods agendados para um nó são endereços IP alocados ciclicamente de blocos CIDR alocados para o nó.
Figura 2 Gerenciamento de endereços IP da rede da VPC

Número máximo de nós que podem ser criados no cluster usando a rede VPC = número de endereços IP no bloco CIDR do contêiner /número de endereços IP no bloco CIDR alocados ao nó pelo bloco CIDR do contêiner

Por exemplo, se o bloco CIDR do contêiner for 172.16.0.0/16, o número de endereços IP será 65536. A máscara do bloco CIDR de contêiner alocado para o nó é 25. Ou seja, o número de endereços IP de contêiner em cada nó é 128. Portanto, um máximo de 512 (65536/128) nós podem ser criados. Além disso, o número de nós que podem ser criados em um cluster também depende da rede do nó e da escala do cluster.

Recomendação para planejamento de blocos CIDR

Conforme descrito em Estrutura de rede do cluster, os endereços de rede em um cluster podem ser divididos em três partes: rede de nó, rede de contêineres e rede de serviço. Ao planejar endereços de rede, considere os seguintes aspectos:

  • Os três blocos CIDR não podem se sobrepor. Caso contrário, ocorre um conflito. Todas as sub-redes (incluindo aquelas criadas a partir do bloco CIDR secundário) na VPC em que o cluster reside não podem entrar em conflito com o contêiner e os blocos CIDR de serviço.
  • Certifique-se de que cada bloco CIDR tenha endereços IP suficientes.
    • Os endereços IP no bloco CIDR do nó devem corresponder à escala do cluster. Caso contrário, os nós não podem ser criados devido a endereços IP insuficientes.
    • Os endereços IP no bloco CIDR do contêiner devem corresponder à escala de serviço. Caso contrário, os pods não podem ser criados devido a endereços IP insuficientes. O número de pods que podem ser criados em cada nó também depende de outras configurações de parâmetros. Para mais detalhes, consulte Número máximo de pods que podem ser criados em um nó.

Suponha que um cluster contenha 200 nós e o modelo de rede seja a rede da VPC.

Nesse caso, o número de endereços IP disponíveis na sub-rede de nó selecionada deve ser maior que 200. Caso contrário, os nós não podem ser criados devido a endereços IP insuficientes.

O bloco CIDR do contêiner é 10.0.0.0/16 e o número de endereços IP disponíveis é 65536. Conforme descrito em Gerenciamento de endereços IP de contêiner, a rede da VPC é alocada um bloco CIDR com o tamanho fixo (usando a máscara para determinar o número máximo de endereços IP de contêiner alocados para cada nó). Por exemplo, se o limite superior for 128, o cluster suportará um máximo de 512 (65536/128) nós, incluindo os três nós principais.

Figura 3 Configurar o bloco CIDR do contêiner (ao criar o cluster)

Exemplo de acesso à rede da VPC

Crie um cluster usando o modelo de rede da VPC. O cluster contém um nó.

$ kubectl get node
NAME           STATUS   ROLES    AGE   VERSION
192.168.0.99   Ready    <none>   9d    v1.17.17-r0-CCE21.6.1.B004-17.37.5

Verifique a tabela de roteamento da VPC. O endereço de destino 172.16.0.0/25 é o bloco CIDR de contêiner alocado para o nó, e o próximo salto é o nó correspondente. Quando o endereço IP do contêiner é acessado, a rota da VPC encaminha a solicitação de acesso para o nó de próximo salto. Isso indica que o modelo de rede da VPC usa rotas da VPC.

Figura 4 Rotas

Crie uma Implementação no cluster.

kind: Deployment
apiVersion: apps/v1
metadata:
  name: example
  namespace: default
spec:
  replicas: 4
  selector:
    matchLabels:
      app: example
  template:
    metadata:
      labels:
        app: example
    spec:
      containers:
        - name: container-0
          image: 'nginx:perl'
      imagePullSecrets:
        - name: default-secret

Verifique o pod.

$ kubectl get pod -owide
NAME                       READY   STATUS    RESTARTS   AGE   IP           NODE           NOMINATED NODE   READINESS GATES
example-86b9779494-l8qrw   1/1     Running   0          14s   172.16.0.6   192.168.0.99   <none>           <none>
example-86b9779494-svs8t   1/1     Running   0          14s   172.16.0.7   192.168.0.99   <none>           <none>
example-86b9779494-x8kl5   1/1     Running   0          14s   172.16.0.5   192.168.0.99   <none>           <none>
example-86b9779494-zt627   1/1     Running   0          14s   172.16.0.8   192.168.0.99   <none>           <none>

Nesse caso, se você acessar o endereço IP do pod de um ECS (fora do cluster) na mesma VPC, o acesso será bem-sucedido. Esse é um recurso da rede da VPC. Os pods podem ser acessados diretamente de qualquer nó localizado fora do cluster e na mesma VPC dos pods usando os endereços IP dos pods.

Os pods podem ser acessados a partir de nós ou pods no mesmo cluster. No exemplo a seguir, você pode acessar diretamente os pods no contêiner.

$ kubectl exec -it example-86b9779494-l8qrw -- curl 172.16.0.7
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>