Sou novo no Kubernetes e tenho algumas dúvidas. Eu configurei um cluster Kubernetes que consiste em um mestre/nó e um nó. Eu implantei um aplicativo baseado em NodeJS muito simples, usando Deployment
kind com 2 réplicas. Em seguida, expus como um serviço de kubectl expose deployment my-app --port=80
.
Agora, meus serviços se parecem com:
root@sw-kubernetes01:~# kubectl get services
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-app 192.168.100.167 <none> 80/TCP 10m
kubernetes 192.168.100.1 <none> 443/TCP 1h
Suponho que devo acessar meu aplicativo navegando para http://192.168.100.167:
? Estou recebendo um erro de tempo limite. Caso contrário, como posso obter o IP externo para acessar o serviço externamente?
Eu sei que se eu declarar o serviço como type: NodePort
, posso acessar meu aplicativo usando nós IP, não existe uma maneira de balancear automaticamente a carga entre os pods?
Se você estiver executando no GCE, EC2 ou OpenStack, geralmente leva um ou dois minutos para que um balanceador de carga seja criado e o
EXTERNAL_IP
campo seja preenchido. O IP desse campo é o que você deve usar para acessar seu serviço.Se você não estiver executando no GCE, EC2 ou OpenStack, o recurso de balanceador de carga externo não funcionará para você, pois o Kubernetes não saberá como criar um em seu ambiente.
Se você estiver trabalhando no cluster local, poderá usar o
--type=NodePort
kubectl expose deployment my-app --port=80 --type=NodePort
e, em seguida, grep para a porta
kubectl get svc my-service -o yaml | grep nodePort
e você pode navegar usando o ip do cluster e a porta que é gerada a partir do resultado do grep anterior.
Conforme já sugerido na pergunta, você pode acessar o serviço NodePort usando a porta fornecida por
e qualquer um dos IPs de nó público. Essas solicitações, no entanto, não precisam terminar no nó com o IP usado para a solicitação. Na verdade, essas solicitações são roteadas dentro do cluster para qualquer um dos pods associados ao serviço. Portanto, há algum balanceamento de carga presente aqui.