ClusterIP: serviços são alcançáveis por pods / serviços no cluster
Se eu criar um serviço chamado myservice no espaço de nome padrão do tipo: ClusterIP, será criado o seguinte endereço DNS estático previsível para o serviço:
myservice.default.svc.cluster.local (ou apenas myservice.default, ou por pods no espaço de nomes padrão, apenas "myservice" funcionará)
E esse nome DNS só pode ser resolvido por pods e serviços dentro do cluster.
NodePort: os serviços são alcançáveis por clientes na mesma LAN / clientes que podem executar ping nos nós de host do K8s (e pods / serviços no cluster) (Observação para segurança, os nós de host do K8s devem estar em uma sub-rede privada, portanto, os clientes na Internet ganham não é possível acessar esse serviço)
Se eu criar um serviço chamado mynodeportservice no espaço de nome mynamespace do tipo: NodePort em um cluster de Kubernetes de 3 nós. Em seguida, um Serviço do tipo: ClusterIP será criado e poderá ser alcançado pelos clientes dentro do cluster no seguinte endereço DNS estático previsível:
mynodeportservice.mynamespace.svc.cluster.local (ou apenas mynodeportservice.mynamespace)
Para cada porta que mynodeportservice ouve em uma nodeport no intervalo de 30000 - 32767, será escolhida aleatoriamente. Para que clientes externos que estão fora do cluster possam acessar o serviço ClusterIP que existe dentro do cluster. Digamos que nossos três nós de host K8s tenham IPs 10.10.10.1, 10.10.10.2, 10.10.10.3, o serviço Kubernetes está escutando na porta 80 e o Nodeport escolhido aleatoriamente foi 31852.
Um cliente que existe fora do cluster pode visitar 10.10.10.1:31852, 10.10.10.2:31852 ou 10.10.10.3:31852 (como o NodePort é escutado por todos os nós de host do Kubernetes) O Kubeproxy encaminhará a solicitação para a porta 80 do mynodeportservice.
LoadBalancer: os serviços são acessíveis a todos os que estão conectados à Internet * (a arquitetura comum é L4 LB é acessível ao público na Internet, colocando-a em uma DMZ ou fornecendo-lhe um IP público e privado e os nós do host k8s e IP públicos e privados em uma sub-rede privada)
( Nota: Esse é o único tipo de serviço que não funciona em 100% das implementações do Kubernetes, como o Kubernetes bare metal, funciona quando o Kubernetes tem integrações de provedor de nuvem.)
Se você criar mylbservice, uma VM L4 LB será gerada (um serviço IP de cluster e um Serviço NodePort também será implicitamente gerado). Desta vez, nosso NodePort é 30222. a idéia é que o L4 LB tenha um IP público 1.2.3.4 e carregue o saldo e encaminhará o tráfego para os 3 nós do K8s que possuem endereços IP privados. (10.10.10.1:30222, 10.10.10.2:30222, 10.10.10.3:30222) e, em seguida, o Kube Proxy o encaminhará para o serviço do tipo ClusterIP que existe dentro do cluster.
Você também perguntou: O tipo de serviço NodePort ainda usa o ClusterIP? Sim *
Ou o NodeIP é realmente o IP encontrado quando você executa o kubectl get nodes? Também sim *
Vamos desenhar um paralelo entre os Fundamentos:
um contêiner está dentro de um pod. um pod está dentro de um replicaset. um replicaset está dentro de uma implantação.
Bem da mesma forma:
um serviço ClusterIP faz parte de um serviço NodePort. Um serviço NodePort faz parte de um serviço do balanceador de carga.
Nesse diagrama que você mostrou, o cliente seria um pod dentro do cluster.
externalIPs
muda a equação aqui? Especificamente, é possível atribuir umaexternalIPs
matriz a umClusterIP
serviço do tipo e, em seguida, o serviço também se torna acessível no IP externo? Quando você escolheria isso em um NodePort?