Pesquisa de site

Como implantar Nginx em um cluster Kubernetes


Em nosso último artigo, discutimos como configurar e executar um cluster Kubernetes, vamos discutir como podemos implantar o serviço NGINX em nosso cluster.

Executarei esta implantação em uma máquina virtual hospedada por um provedor de nuvem pública. Tal como acontece com muitos serviços de nuvem pública, muitos geralmente mantêm um esquema de IP público e privado para suas máquinas virtuais.

Ambiente de teste

Master Node - Public IP: 104.197.170.99 and Private IP: 10.128.15.195
Worker Node 1 - Public IP: 34.67.149.37 and Private IP: 10.128.15.196
Worker Node 2 - Public IP: 35.232.161.178 and Private IP: 10.128.15.197

Implantando NGINX em um cluster Kubernetes

Executaremos esta implantação a partir do nó mestre.

Vamos começar verificando o status do cluster. Todos os seus nós devem estar no estado PRONTO.

kubectl get nodes

Criamos uma implantação do NGINX usando a imagem NGINX.

kubectl create deployment nginx --image=nginx

Agora você pode ver o estado da sua implantação.

kubectl get deployments

Se quiser ver mais detalhes sobre sua implantação, você pode executar o comando describe. Por exemplo, é possível determinar quantas réplicas da implantação estão em execução. No nosso caso, esperamos ver uma réplica de 1 em execução (ou seja, 1/1 réplicas).

kubectl describe deployment nginx

Agora que sua implantação do Nginx está ativa, você pode querer expor o serviço NGINX a um IP público acessível na Internet.

Expondo seu serviço Nginx à rede pública

O Kubernetes oferece várias opções ao expor seu serviço com base em um recurso chamado Kubernetes Service-types e são elas:

  1. ClusterIP – Este tipo de serviço geralmente expõe o serviço em um IP interno, acessível apenas dentro do cluster e possivelmente apenas dentro dos nós do cluster.
  2. NodePort – Esta é a opção mais básica de expor seu serviço para ser acessível fora do cluster, em uma porta específica (chamada NodePort) em cada nó do cluster. Ilustraremos esta opção em breve.
  3. LoadBalancer – Esta opção aproveita serviços externos de balanceamento de carga oferecidos por vários provedores para permitir acesso ao seu serviço. Esta é uma opção mais confiável quando se pensa em alta disponibilidade para o seu serviço e possui mais recursos além do acesso padrão.
  4. ExternalName – Este serviço redireciona o tráfego para serviços fora do cluster. Como tal, o serviço é mapeado para um nome DNS que pode ser hospedado fora do seu cluster. É importante observar que isso não usa proxy.

O tipo de serviço padrão é ClusterIP.

Em nosso cenário, queremos usar o tipo de serviço NodePort porque temos um endereço IP público e privado e não precisamos de um balanceador de carga externo por enquanto. Com este tipo de serviço, o Kubernetes atribuirá este serviço em portas na faixa 30000+.

kubectl create service nodeport nginx --tcp=80:80

Execute o comando get svc para ver um resumo do serviço e das portas expostas.

kubectl get svc

Agora você pode verificar se a página Nginx pode ser acessada em todos os nós usando o comando curl.

curl master-node:30386
curl node-1:30386
curl node-2:30386

Como você pode ver, a página “BEM-VINDO AO NGINX!” pode ser acessada.

Alcançando endereços IP PÚBLICOS efêmeros

Como você deve ter notado, o Kubernetes informa que não tenho nenhum IP público ativo registrado, ou melhor, nenhum IP EXTERNO registrado.

kubectl get svc

Vamos verificar se é realmente verdade que não tenho nenhum IP EXTERNO anexado às minhas interfaces usando o comando IP.

ip a

Nenhum IP público como você pode ver.

Conforme mencionado anteriormente, estou executando esta implantação em uma máquina virtual oferecida por um provedor de nuvem pública. Portanto, embora não haja uma interface específica atribuída a um IP público, o provedor de VM emitiu um endereço IP externo efêmero.

Um endereço IP externo efêmero é um endereço IP temporário que permanece anexado à VM até que a instância virtual seja interrompida. Quando a instância virtual é reiniciada, um novo IP externo é atribuído. Basicamente, é uma maneira simples para os provedores de serviços aproveitarem IPs públicos ociosos.

O desafio aqui, além do fato de seu IP público não ser estático, é que o IP Público Efêmero é simplesmente uma extensão (ou proxy) do IP Privado e, por esse motivo, o serviço irá só será acessado na porta 30386. Isso significa que o serviço será acessado na URL , que é 104.197.170.99:30386, que se você marcar seu navegador, você poderá ver a página de boas-vindas.

Com isso, implantamos com sucesso o NGINX em nosso cluster Kubernetes de 3 nós.