AWS interno?
Olá a todos, esse projeto é ecossistema onde você poderá subir recursos parecidos da AWS em seu próprio datacenter, oque eu quero com isso é poder estudar mais sobre redes e DevOps, é algo que estou há anos estudando principalmente Mikrotik, Cisco e Fortigate, então eu resolvi desenvolver uma AWS(coisa bem simples kkkkk).
Para que e por quê?
O que eu quero aprender sobre esse projeto é como funciona a AWS por baixo dos panos, a questão de multi-region, VPCs, contêineres auto escalados e tudo mais. Quero desenvolver meu próprio Kubernetes para realizar o autoscaling de contêineres e de VMs
Nesse projeto, quero utilizar Docker (para os contêineres) e KVM(como hypervisor para subir as VMs), já iniciei o projeto hoje e já consegui um feito EXCEPCIONAL.
Eu consegui conectar dois contêineres em L2 em "datacenters" diferentes (obviamente foram em VMs diferentes), e como eu fiz isso, usando OVS e VXLAN.
Oque é um OVS?
OVS é uma sigla para Open Virtual Switch, ele cria uma espécie de switch virtual dentro do seu Linux, com isso você pode adicionar placas de redes lógicas e físicas dentro desse bridge, podendo fazer um canal de broadcast entre essas duas interfaces.
Docker e KVM.
Bom, para os contêineres, eu estou usando o Docker, já é queridinho dos devs para literalmente qualquer coisa. Com ele vou poder criar os serviços de contêineres gerenciáveis e algo parecido com o Lambda para criar funções serverless (bicho, isso vai dar um trabalho absurdo).
Já o KVM é um recurso do Linux de hypervisor, onde você pode virtualizar máquinas. O KVM é uma sigla para Kernel-based Virtual Machine, com ele pode compartilhar recursos da máquina host com a virtualizada (redes, discos, CPUs, memórias e muito mais).
VXLAN.
Agora, como eu consegui pingar dois contêineres diferentes em máquinas diferentes em redes diferentes, aí que entra o feitiço mais bizarro que descobri esses tempos estudando Mikrotik que é o VXLAN.
Explicando o que é esse protocolo, ele basicamente encapsula L2 em L3, tá? Se você for dev e não tem contato com redes, você deve estar moscando aí agora.
Recapitulando como funcionam redes.
Em redes você tem as camadas, que são basicamente regras onde protocolos, equipamentos e entre outros, deve seguir para que a rede funciona do jeito que é.
Então, você tem camadas de responsabilidade onde os equipamentos e protocolos atuam para que a rede seja transportada do lado A para o B, seguindo a tabela OSI, são elas:
- Camada 7 - Aplicação: Onde ficam obviamente os softwares, e eles são que geralmente iniciam a comunicação entre as pontas.
- Camada 6 - Apresentação: Nessa camada fica tudo relacionado ao handshake TLS de certificados de criptografia e compressão de dados.
- Camada 5 - Sessão: Aqui ele gerencia a comunicação dos dispositivos A com o B, como, por exemplo, quando iniciar, fechar e, o mais importante, ela verifica se tudo está em certo com ambos os lados para ver se não tem falha ou algo assim.
- Camada 4 - Transporte: Aqui, onde estão os protocolos de redes, como TCP, UDP, ICMP e por aí vai, ele gerencia quais portas usar para a comunicação na rede, exemplo HTTP = TCP/80 ou HTTPS = TCP/443.
- Camada 3 - Rede: Aqui é onde a tomada de decisão de roteamento acontece, aqui fica tudo relacionado ao roteador, exemplo: IPs, PBR, protocolos de roteamento(OSPF, BGP), NAT, e também é responsável por conectar duas redes diferentes como, por exemplo: sua casa e a internet.
- Camada 2 - Enlace: Aqui são a camada dos switches, por exemplo, onde ele cuida para "converter" oque vem da camada 3 para a camada 1, em empacotando as informações (que se é chamado de frame, pacotes são L3[Camada 3]), e aqui é onde é tomado a decisão de onde e qual porta enviar com base no MAC de destino e origem, os switches tem um MACTABLE que são onde ele associa MAC com porta exemplo: PORTA1:75-B8-07-5C-BB-96 e PORTA2:6A-94-7D-67-F6-2F, com base nisso ele sabe para qual porta sair o frame.
- Camada 1 - Física: E por último, mas não menos importante, a física, ela é basicamente os cabos kkkkk apenas isso mesmo.
Voltando...
Voltando sobre o VXLAN, como eu expliquei antes ele usa a camada 3 para enviar camada 2 para outro device, como?
Ele faz isso adicionando um cabeçalho VXLAN marcando o VNI(um ID único), fazendo assim tudo que trafegar naquela VXLAN em camada 2 chegue na outra ponta por meio de roteamento, podendo fazer isso até pela internet.
Vantagem disso.
Bom, já é autoexplicativo, né? Você pode literalmente conectar um cabo virtual em duas pontas remotas e para meu projeto isso faz todo o sentido já que, dependendo do projeto, você precisa que os dois contêineres ou VMs precisem estar na mesma rede "fisicamente".
Conclusão
Bom o AWS local é um projeto que está longe de acabar, então vou atualizando todos por aqui.
Desculpe se teve erro de português e também o post longo, é meu primeiro post e eu quis explicar tudo para que todos entendam o projeto.
Caso queira perguntar mais sobre esse, é meu LinkedIn: https://www.linkedin.com/in/jo%C3%A3o-pedro-de-oliveira-marcos-69202919b/
Até 👋