Hospedando Sua Própria AI — Parte 02

Claudio Lazaro
5 min readApr 13, 2024

--

Continuação…

Aqui continuaremos com a nossa jornada !
Para quem precisar buscar alguma referência na primeira parte 01 é só clicar.

Checando se o nosso cluster esta em execução

kubectl get po -A
Saída esperada.

Instalando o Helm

O Helm é uma aplicação que vai auxiliar você a instalar aplicações no seu cluster de Kubernetes de forma simplificada, pensa nele como um “gestor de pacotes”.

Instalando openssl:

sudo dnf install openssl -y

Instalando helm:

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
Saída esperada.

Check se foi instalado:

helm version

Ótimo, agora vamos acionar os repositório necessário:

Primeiro vamos instalar o repo do nginx e depois no ngrok.

Adicionando repositório nginx:

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx && helm repo update

Adicionando repositório ngrok:

helm repo add ngrok https://ngrok.github.io/kubernetes-ingress-controller && helm repo update

Instalando Ingress

Vou tentar resumir de forma simples qual é a função do ingress em um cluster de Kubernetes. Basicamente é o responsável por permitir que suas aplicações sejam acessíveis de fora do cluster, tudo isso com um conceito de proxy reverso, mais para frente algumas coisa ficarão mais elucidada.

Configurando o nginx:

helm install --create-namespace --namespace ingress-controller ingress-nginx ingress-nginx/ingress-nginx
Saída esperada.

Check se tudo está “OK”:

kubectl get pod -A
Saída esperada.

Configurando o ngrok:

O que é o ngrok? essa é a primeira pergunta que vem na nossa cabeça :)

O ngrok é um solução de ingresso ou ingress, ele combina diversas alternativas como proxy-reverso, firewall, API Gateway, LoadBalancer etc.
Acho que vale muito entra no site e entender um pouco. Para você que é desenvolvedor e ou até mesmo entusiasta, e quer expor algum serviço de forma fácil ele vai atender super bem.

Após ter criado sua conta, você vai cair em um interface como essa:

A primeira coisa a ser feira é criar um “Domain”:

Click em “Create Domain”

Feche o frame “start tunnel”:

Feche esse frame.

Vamos criar um API Key:

Faça a cópia do token !!!

Volta para o inicio da página:

Click em Kubernetes

A tela acima vai mostrar como fazer o deploy no Kubernetes.

Faça como vou colocar no exemplo, apenas preencha as variáveis com o seu authtoken e sua apikey que você criou:

export NGROK_AUTHTOKEN=EXEMPLOEXEMPLOEXEMPLOEXEMPLO
export NGROK_API_KEY=EXEMPLOEXEMPLOEXEMPLOEXEMPLO
helm install --create-namespace --namespace ingress-controller ngrok-ingress-controller ngrok/kubernetes-ingress-controller \
--set credentials.apiKey=$NGROK_API_KEY \
--set credentials.authtoken=$NGROK_AUTHTOKEN
Saída esperada.

Check

kubectl get po -A
Agora você tem 2 ingress-controller/ingressClass :)

Configurando o Dnsmasq para o nosso uso :)

Na primeira parte desse artigo fizemos um configuração básica do dnsmasq, agora vamos usa-lo para apontar todas as chamadas de um determinado domínio para um endereço ip, ou seja, imagina o seguinte cenário:

Você criou um domínio local : “mediumlab.com.br
Aí você publicou sua primeira aplicação no cluster com um sub-domínio do seu domínio: “meuapp.medium.lab.com.br”.

Essa publicação meuapp.medium.lab.com.br, vai acontecer no ingress do seu cluster, e aí que acontece a mágica do proxy-reverso, ele identifica para qual serviço ele precisa encaminhar essa chamada, e assim o faz, por outro lado o dnsmaq só vai encaminhar “mediumlab.com.br” para o ip do loadbalancer no seu cluster.

A grande sacada aqui é que você não vai ficar precisando editar seu hosts toda hora a cada aplicação que você fizer deploy, porque vamos apontar o wildcard do domínio “mediumlab.com.br ou seja *.mediumlab.com.br para o “LB”.

Pegue o ip do seu loadBalancer:

sudo docker network inspect k3d-mediumlab
Copie o ip do container que represena o seu LoadBalancer (lb)

Configurando:

Defina um nome para o seu domínio, pode ser qualquer um, no meu caso vou usar mediumlab.com.br

Edite o arquivo 00-dnsmasq.conf:

sudo nano /etc/dnsmasq.d/00-dnsmasq.conf
listen-address=127.0.0.1
bind-interfaces
no-resolv

# External Dns Search
server=1.1.1.1
server=8.8.8.8

# Custon Local Dns
address=/.mediumlab.com.br/172.18.0.5

Salve o arquivo ( ctrl + o ) para sair (ctrl + x ).

Faça o restart do serviço dnsmaq:

sudo systemctl restart dnsmasq.service

Check 01:

nslookup mediumlab.com.br
Nessa saída você consegue verificar que o dnsmasq esta encaminhado para o ip do seu LB

Check 02

nslookup xxxxx.mediumlab.com.br
Percebeu que não criamos um dominio xxxx.mediumlab.com.br, mais ainda assim ele esta funcionando :)

Se tudo funcionou até aqui é você esta de parabéns !!

Faça um teste simples para ver se tudo esta ok, nesse teste vamos ter a certeza que o cluster, ingress, dnsmasq estão funcionando como deveriam.

Abra o seu navegado e digite qualquercoisa.mediumlab.com.br

Saída esperada.

Se você obter o resultado acima, significa que tudo esta OK, e na prática você já poderia fazer o deploy de qualquer aplicação no seu cluster que irá funcionar. Sei que ainda não chegamos no ponto de criar um manifesto de um deploy com ingress, mas nada o impede de buscar algo na internet e fazer.

Vamos finalizar essa parte 02 por enquanto, até aqui tivemos grandes evoluções e vamos seguir com a parte 03 .

--

--