Rede de túneis de contêineres
Modelo de rede de túnel de contêiner
Comunicação pod a pod
- No mesmo nó: os pacotes são encaminhados diretamente através da ponte OVS no nó.
- Entre os nós: os pacotes são encapsulados na ponte OVS e encaminhados para o nó de par.
Vantagens e desvantagens
Vantagens
- A rede de contêineres é desacoplada da rede de nó e não é limitada pelas cotas de VPC e pela velocidade de resposta (como o número de rotas da VPC, o número de ENIs elásticos e a velocidade de criação).
- O isolamento de rede é suportado. Para mais detalhes, consulte Políticas de rede.
- Limites de largura de banda são suportados.
- Redes em grande escala são suportadas.
Desvantagens
- Alta sobrecarga de encapsulamento, rede complexa e baixo desempenho
- Os pods não podem usar diretamente funcionalidades como EIPs e grupos de segurança.
- As redes externas não podem ser conectadas diretamente aos endereços IP do contêiner.
Cenários aplicáveis
- Baixos requisitos de desempenho: como a rede de túnel de contêiner requer encapsulamento de túnel VXLAN adicional, ela tem cerca de 5% a 15% de perda de desempenho quando comparada com os outros dois modelos de rede de contêiner. Portanto, a rede de túnel de contêiner aplica-se aos cenários que não têm requisitos de alto desempenho, como aplicações da Web e serviços de middle-end e back-end com um pequeno número de solicitações de acesso.
- Rede em grande escala: diferentemente da rede da VPC que é limitada pela cota de rota da VPC, a rede de túnel de contêiner não tem nenhuma restrição na infraestrutura. Além disso, a rede de túnel de contêiner controla o domínio de transmissão até o nível do nó. A rede de túnel de contêiner suporta um máximo de 2000 nós.
Gerenciamento de endereços IP de contêiner
A rede de túnel de contêiner aloca endereços IP de contêiner de acordo com as seguintes regras:
- O bloco CIDR do contêiner é alocado separadamente, o que é irrelevante para o bloco CIDR do nó.
- Os endereços IP são alocados por nó. Um ou mais blocos CIDR com um tamanho fixo (16 por padrão) são alocados para cada nó em um cluster a partir do bloco CIDR do contêiner.
- Quando os endereços IP em um nó são usados, você pode solicitar um novo bloco CIDR.
- O bloco CIDR do contêiner aloca ciclicamente blocos CIDR para novos nós ou nós existentes em sequência.
- Os pods agendados para um nó são endereços IP alocados ciclicamente de um ou mais blocos CIDR alocados para o nó.
Número máximo de nós que podem ser criados no cluster usando a rede de túnel de contêiner = número de endereços IP no bloco CIDR do contêiner / tamanho do bloco CIDR de IP alocado ao nó pelo bloco CIDR do contêiner por vez (16 por padrão)
Por exemplo, se o bloco CIDR do contêiner for 172.16.0.0/16, o número de endereços IP será 65536. Se 16 endereços IP são atribuídos a um nó de cada vez, um máximo de 4096 (65536/16) nós podem ser criados no cluster. Este é um caso extremo. Se 4096 nós forem criados, um máximo de 16 pods podem ser criados para cada nó, pois apenas 16 blocos CIDR IP são alocados para cada nó. 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ó.
Exemplo de acesso à rede de túnel de contêiner
Crie um cluster que use o modelo de rede de túnel de contêiner. 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' resources: limits: cpu: 250m memory: 512Mi requests: cpu: 250m memory: 512Mi imagePullSecrets: - name: default-secret
Visualize o pod criado.
$ kubectl get pod -owide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES example-5bdc5699b7-5rvq4 1/1 Running 0 3m28s 10.0.0.20 192.168.0.42 <none> <none> example-5bdc5699b7-984j9 1/1 Running 0 3m28s 10.0.0.21 192.168.0.42 <none> <none> example-5bdc5699b7-lfxkm 1/1 Running 0 3m28s 10.0.0.22 192.168.0.42 <none> <none> example-5bdc5699b7-wjcmg 1/1 Running 0 3m28s 10.0.0.52 192.168.0.64 <none> <none>
Nesse caso, o endereço IP do pod não pode ser acessado diretamente fora do cluster na mesma VPC. Essa é uma característica da rede de túnel de contêineres.
No entanto, o pod pode ser acessado a partir de um nó no cluster ou no pod. Como mostrado na figura a seguir, o pod pode ser acessado diretamente do contêiner.
$ kubectl exec -it example-5bdc5699b7-5rvq4 -- curl 10.0.0.21 <!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>