Opa

Depois de muito tempo, to de volta com um post novo de uma artimanha que eu acabei bolando.

Pra quem não sabe (até porque eu não contei pra ninguém até o momento) eu to fazendo um sideproject para executar aplicações kubernetes e acessar pela minha rede Zerotier. Eu queria aprender kubernetes e queria selfhostear coisas. É um negócio complicado mas fascinante, muito poucas soluções estão minimamente preparadas para o contexto que o kubernetes brilha.

Kubernetes

Kubernetes é um paranauê pra gerenciar servidores, você diz o que e como quer rodar e o negócio se vira pra desenrolar. É um pouco difícil de explicar para o kubernetes o que você quer, principalmente no começo, mas é um negócio bem poderoso.

Eu ainda não tenho um contexto onde o kubernetes realmente brilha mas, mesmo assim, já tá se mostrando algo prático. Você lança um conjunto de estruturas em YAML declarativamente e o Kubernetes faz basicamente o resto. Muita primitiva pronta e útil.

O começo da saga

Bom, comecei primeiramente com o DNS. O problema é que eu queria poder expor arquivos estilo o /etc/hosts como um servidor DNS, e usar este servidor DNS. Nisso descobri o DNSMASQ e ajeitei ela com módulos NixOS. Eu quis botar tudo em um único TLD, o lucao.net. Por que? Porque eu quis!

Expor o DNS para os nós do zerotier usar é trivial, atualmente. Só não dá para fazer pelo terraform ainda.

Hoje em dia eu tenho dois nodes dedicados, o riverwood (meu notebook) e o whiterun (meu PC). Montei cluster só com o Whiterun. O recomendado é ter 3 nodes, mas eu não tenho 3 nodes então vida que segue.

Cada node tem seu subdomínio em wildcard apontando para o IP zerotier dele. *.whiterun.lucao.net para 192.168.69.1 e *.riverwood.lucao.net para 192.168.69.2. Porque 192.168.69.0/24? Nice!

Tendo o domínio na mão, configurei um nginx pra poder expor coisas pelo HTTP. HTTP porque o domínio não é acessível externamente e o Zerotier encripta tudo igual então ficaria redundante, e eu também to com preguiça de mexer com cacert.

Eu queria expor direto pelo kubernetes, mas o NodePort só funciona para as portas entre 30000 e 32000 e uns quebrado. Procedi subindo um nginx no host que faz proxy pass pro kubernetes se nada der match. Gambiarra? Definitivamente!

Tentei subir uns webserver usando o nginx ingress e, depois de muita luta, deu certo. ADOREI A DINAMICA DISSO. Esse negócio de label selector é um negócio muito bem bolado.

Kubernetes dashboard

Como boss final, entre as aplicações stateless, tentei deployar o Kubernetes Dashboard. Meu que baile, o negócio é chato pra rodar por HTTP, e com razão. Só eu que tenho essa usecase diferenciada e tive que me virar com gambiarra.

O negócio não me deixa logar por HTTP, é capado no lado do servidor, sem jeito.

O que eu fiz foi liberar o botão para pular o login e fazer o kubernetes dashboard subir logado passando a credencial para a aplicação.

Funcionou 100% e agora até consigo acessar pelo celular. Tem que sempre ativar o modo desktop mas isso é completamente justificável AEHUAHEAUHEU.

Kubernetes dashboard rodando sob HTTP em um celular

Segurança

Alguém provavelmente vai ficar preocupado sobre questões de segurança, então ai vai como eu to lidando:

  • E se alguém da rede local acessar?

Não vai

  • E se alguém acessar tua rede zerotier?

Primeiro vai ter que invadir a minha conta no dashboard para conseguir ser aceito na rede.

  • HTTP não é criptografado, né?

Sim, não é, mas a transmissão do Zerotier é.