Como o Kubernetes resolveu os problemas do meu time

Rogério Marques

08 abril 2019 - 09:00 | Atualizado em 29 março 2023 - 17:30

Pessoa digitando no computador macbook

Alguns meses atrás, meu time teve um problema. Nós precisávamos fazer nosso ambiente adaptativo a mudanças porque paramos de usar mais IP fixos e não nos agradava limitar um serviço a um node específico do cluster. Então começamos a usar o Kubernetes para atingir esse objetivo. E foram esses recursos que nos ajudaram:

Kube DNS: Kubernetes possibilita um serviço a acessar o outro apenas pelo nome, tirando a necessidade de controle de porta ou IP onde o outro serviço está. Além de ter um Load Balancing Interno que tira a necessidade de controlar em qual porta o serviço vai subir.

Load Balancing Interno: O Load Balancing Interno permite aos seus serviços escalar sem a necessidade de configurar um load balance ou controlar a porta em que cada serviço sobe e ter conexões não coesas.

Ingress: Kubernetes Ingress é o recurso que permite expor seu serviço para a rede externa. É  possível usar porta, hostname ou path para rotear seu serviço. Existem várias maneiras de se configurar um recurso de Ingress e vários provedores desse recurso. Nós usamos NGINX como  Daemon Set para ter o serviço de Ingress disponível nas portas 80 e 443. Então, qualquer conexão em qualquer node do cluster será então redirecionado para o serviço apropriado.

Self Healing: Self healing é o recurso que permite ao Kubernetes checar o estado de um serviço e ao detectar algum problema reiniciar o mesmo. Usamos esse recurso para resolver um problema onde alguns serviços não conseguiam se recuperar após perderem a conexão com o banco de dados. Expomos um recurso em nosso serviço que checa a conexão e ao não conseguir conectar retorna erro e o Kubernetes automaticamente reinicia e restaura o serviço.

Secrets: Secrets é o modo seguro de configurar e trafegar suas credenciais entre os serviços que compõem o cluster. Não vou ir fundo nesse tópico mas se você quiser uma solução mais robusta procure o Vault.

Como configuramos o Ingress de um serviço

Quando queremos expor um serviço no kubernetes, configuramos um ingress para ele. Exemplo:

Vamos dizer que temos os seguintes dois domínios:

kubernetes1.cedrotech.com.br

kubernetes2.cedrotech.com.br

Na versão anterior, cada um desses domínios era apontado para um node diferente do cluster e haviam regras que garantiam que o serviço iria subir naquele determinado node. Para manter o padrão, vamos configurar o ingress para rotear pelo hostname e encaminhar a requisição para o serviço adequado. A configuração será assim:

apiVersion:extensions/v1beta1

kind:Ingress

metadata:

 name:name-virtual-host-ingress

spec:

 rules:

 host:kubernetes1.cedrotech.com.br

   http:

     paths:

     backend:

         serviceName:service1

         servicePort:80

 host:kubernetes2.cedrotech.com.br

   http:

     paths:

     backend:

         serviceName:service2

         servicePort:80

E o fluxo ficará assim:

Como o Kubernetes resolveu os problemas do meu time

E foi desta maneira que tornamos nosso ambiente resiliente usando Kubernetes. Claro que havia outras formas porém o Kubernetes oferece recursos que torna isso muito mais fácil e simples o que nos ajudou muito e nos permitiu criar essa arquitetura robusta.

Recomendados para você

Pessoa utilizando computador
Fique por dentro de como criar aplicativos pelo Xamarin! ...
Pessoa utilizando computador em sala de escritório
Você já ouviu falar em Computação Quântica? ...
Ilustração de várias pessoas apontadas para uma engrenagem
Data-driven marketing: uma solução em tempos de crise ...