Kubernetes: Criando um serviço e expondo-o ao mundo externo com o NodePort via Linha de Comando

From Wiki

Vamos criar um serviço e expor ele ao mundo externo com o NodePort via Linha de Comando

Este exemplo continua o que foi realizado em Kubernetes: Deploy de uma aplicação via Linha de comando


Via linha de comando (CLI)

Executar os comandos:

kubectl expose web-service --port=80 --type=NodePort


Via arquivo

Arquivo de deployment webserver-svc.yaml

1) Crie o arquivo webserver-svc.yaml e adicione o conteúdo:

apiVersion:   v1
kind:         Service
metadata:
  name:       web-service
  labels:
    run:      web-service
spec:
  type:       NodePort
  ports:
  - port:     80
    protocol: TCP
  selector:
    app:      nginx 
 

Salve e feche o arquivo.

2) Execute o comando kubectl para fazer o deploy das informações no arquivo

kubectl create -f webserver-svc.yaml

service "web-service" created

Verificando o que foi criado

  • Services
kubectl get services

NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes    ClusterIP   10.96.0.1       <none>        443/TCP        6d20h
web-service   NodePort    10.100.253.18   <none>        80:31240/TCP   14s

O webservice foi criado no IP 10.100.253.18, e ao receber requisições na porta 31240 encaminha para a porta 80. O Pod a ser utilizado é realizado da instrução select.

Para o K8s é indiferente a ordem para criar o deployment ou o serviço.

Vamos pegar mais detalhes:

kubectl describe svc web-service

Name:                     web-service
Namespace:                default
Labels:                   run=web-service
Annotations:              <none>
Selector:                 app=nginx
Type:                     NodePort
IP:                       10.100.253.18
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  31240/TCP
Endpoints:                172.17.0.3:80,172.17.0.5:80,172.17.0.6:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

O valor em Endpoints informa os ips dos Pods.

Abrindo o serviço no navegador

No Minikube

Neste exemplo estamos utilizando o minikube, vamos pegar o ip

minikube ip

192.168.99.100

Abra o navegador e acesse o endereço

http://192.168.99.100:31240/

Você poderá ver a "Nginx welcome page".


Outra maneira para acessar o serviço é executar o comando:

minikube service web-service


Na IBM Cloud

Pegando o nome dos clusters

ibmcloud ks clusters

ID                     Estado   Criado       Trabalhadores   Local   Versão        Nome do Grupo de Recursos   Provedor
ebasso-k8s-cluster   brl8ua4f0d7u1d9g9lt0   normal   6 days ago   1               mil01   1.18.3_1514   default                     classic 


ibmcloud ks workers --cluster ebasso-k8s-cluster

ID                                                       IP Público        IP Particular    Tipo   Estado   Status   Zona    Versão
kube-brl8ua4f0d7u1d9g9lt0-ebassok8scl-default-00000015   159.122.179.120   10.144.185.225   free   normal   Ready    mil01   1.18.4_1517

Abra o navegador e acesse o endereço:

http://159.122.179.120:31240

Ver também