2
respostas

NodePort não publica porta no linux

Segui os passos da aula, e não consegui da mesma forma publicar uma porta usando o NodePort. Meu cenário é:

  • Um k8s como master rodando em uma máquina, e um node worker rodando numa vm na minha máquina.
$ kubectl get nodes -o wide
NAME     STATUS   ROLES           AGE   VERSION   INTERNAL-IP      EXTERNAL-IP   OS-IMAGE                       KERNEL-VERSION    CONTAINER-RUNTIME
node01   Ready    worker1         12h   v1.24.0   192.168.200.10   <none>        Debian GNU/Linux 10 (buster)   4.19.0-20-amd64   containerd://1.6.4
seeds    Ready    control-plane   12h   v1.24.0   192.168.68.110   <none>        Debian GNU/Linux 10 (buster)   5.4.106-1-pve     containerd://1.6.4
 $ kubectl get all -A
NAMESPACE        NAME                                           READY   STATUS    RESTARTS      AGE
default          pod/pod-1                                      1/1     Running   0             4m24s
kube-system      pod/calico-kube-controllers-77484fbbb5-jkrqt   1/1     Running   1 (30m ago)   13h
kube-system      pod/calico-node-pc4dq                          1/1     Running   1 (30m ago)   13h
kube-system      pod/calico-node-vlsb8                          1/1     Running   1 (30m ago)   13h
kube-system      pod/coredns-6d4b75cb6d-6wv7g                   1/1     Running   1 (30m ago)   13h
kube-system      pod/coredns-6d4b75cb6d-trstd                   1/1     Running   1 (30m ago)   13h
kube-system      pod/etcd-seeds                                 1/1     Running   8 (30m ago)   13h
kube-system      pod/kube-apiserver-seeds                       1/1     Running   8 (30m ago)   13h
kube-system      pod/kube-controller-manager-seeds              1/1     Running   2 (30m ago)   13h
kube-system      pod/kube-proxy-2br77                           1/1     Running   1 (30m ago)   13h
kube-system      pod/kube-proxy-k2z67                           1/1     Running   1 (30m ago)   13h
kube-system      pod/kube-scheduler-seeds                       1/1     Running   8 (30m ago)   13h
metallb-system   pod/controller-7476b58756-9b8kg                1/1     Running   1 (30m ago)   13h
metallb-system   pod/speaker-pt8h5                              1/1     Running   1 (30m ago)   13h

NAMESPACE     NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP      PORT(S)                  AGE
default       service/kubernetes   ClusterIP   10.96.0.1       <none>           443/TCP                  13h
default       service/svc-pod-1    NodePort    10.108.204.80   192.168.200.10   80:30000/TCP             94s
kube-system   service/kube-dns     ClusterIP   10.96.0.10      <none>           53/UDP,53/TCP,9153/TCP   13h

NAMESPACE        NAME                         DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
kube-system      daemonset.apps/calico-node   2         2         2       2            2           kubernetes.io/os=linux   13h
kube-system      daemonset.apps/kube-proxy    2         2         2       2            2           kubernetes.io/os=linux   13h
metallb-system   daemonset.apps/speaker       1         1         1       1            1           kubernetes.io/os=linux   13h

NAMESPACE        NAME                                      READY   UP-TO-DATE   AVAILABLE   AGE
kube-system      deployment.apps/calico-kube-controllers   1/1     1            1           13h
kube-system      deployment.apps/coredns                   2/2     2            2           13h
metallb-system   deployment.apps/controller                1/1     1            1           13h

NAMESPACE        NAME                                                 DESIRED   CURRENT   READY   AGE
kube-system      replicaset.apps/calico-kube-controllers-77484fbbb5   1         1         1       13h
kube-system      replicaset.apps/coredns-6d4b75cb6d                   2         2         2       13h
metallb-system   replicaset.apps/controller-7476b58756                1         1         1       13h
2 respostas

Continuando:

---
apiVersion: v1
kind: Pod
metadata:
  name: pod-1
spec:
  containers:
    - name: container-pod-1
      image: nginx:latest
      ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: svc-pod-1
spec:
  type: NodePort
  ports:
    - port: 80
      nodePort: 30000
  externalIPs:
    - 192.168.200.10
  selector:
    name: pod-1
root@seeds:~# calicoctl node status
Calico process is running.

IPv4 BGP status
+----------------+-------------------+-------+----------+-------------+
|  PEER ADDRESS  |     PEER TYPE     | STATE |  SINCE   |    INFO     |
+----------------+-------------------+-------+----------+-------------+
| 192.168.200.10 | node-to-node mesh | up    | 10:03:01 | Established |
+----------------+-------------------+-------+----------+-------------+

IPv6 BGP status
No IPv6 peers found.
root@node01:~# ss -ntpl
State       Recv-Q      Send-Q            Local Address:Port              Peer Address:Port                                                  
LISTEN      0           128                   127.0.0.1:10248                  0.0.0.0:*          users:(("kubelet",pid=386,fd=30))          
LISTEN      0           128                   127.0.0.1:10249                  0.0.0.0:*          users:(("kube-proxy",pid=1034,fd=12))      
LISTEN      0           128              192.168.200.10:7946                   0.0.0.0:*          users:(("speaker",pid=924,fd=8))           
LISTEN      0           128                   127.0.0.1:9099                   0.0.0.0:*          users:(("calico-node",pid=1372,fd=8))      
LISTEN      0           128              192.168.200.10:7472                   0.0.0.0:*          users:(("speaker",pid=924,fd=16))          
LISTEN      0           8                       0.0.0.0:179                    0.0.0.0:*          users:(("bird",pid=1471,fd=7))             
LISTEN      0           128                   127.0.0.1:43923                  0.0.0.0:*          users:(("containerd",pid=397,fd=15))       
LISTEN      0           128                     0.0.0.0:22                     0.0.0.0:*          users:(("sshd",pid=404,fd=3))              
LISTEN      0           128                           *:10250                        *:*          users:(("kubelet",pid=386,fd=26))          
LISTEN      0           128                           *:10256                        *:*          users:(("kube-proxy",pid=1034,fd=22))      
LISTEN      0           128                        [::]:22                        [::]:*          users:(("sshd",pid=404,fd=4))     

Oi Icaro, tudo bem?

Desculpe a demora em retornar.

Analisando as informações que você forneceu, parece que o problema pode estar na definição do Service ou em alguma configuração de rede. Vou guiar você através de algumas etapas para verificar e resolver essa situação.

Primeiro, vamos analisar o YAML do seu Service, onde você define a porta do NodePort:

apiVersion: v1
kind: Service
metadata:
  name: svc-pod-1
spec:
  type: NodePort
  ports:
    - port: 80
      nodePort: 30000
  externalIPs:
    - 192.168.200.10
  selector:
    name: pod-1

O trecho acima parece correto em relação à definição do NodePort. Certifique-se de que o campo selector está configurado corretamente para apontar para o seu Pod. Neste caso, o Pod foi definido com o nome pod-1, então a correspondência do selector parece estar correta.

No entanto, observe que você definiu o campo externalIPs no Service. Isso não é necessário para um serviço NodePort. O IP do Node não precisa ser especificado nesse campo. Você pode remover a linha externalIPs.

Vamos agora verificar algumas possíveis causas de problemas:

  1. Firewall ou Regras de Rede: Certifique-se de que as portas necessárias estejam abertas no firewall ou nas regras de rede da máquina do Node (192.168.200.10). Verifique se as portas 30000 estão permitidas.

  2. Verificação de Portas: Você pode usar o comando ss -ntpl para verificar as portas que estão em escuta. Confirme se a porta 30000 está listada como em escuta na saída desse comando. Se não estiver, pode ser um problema de configuração ou firewall.

  3. Verificação de Logs: Verifique os logs do Kubernetes, em especial nos componentes do Node (kube-proxy e calico-node). Esses logs podem fornecer pistas sobre problemas de conectividade ou configuração.

  4. Configuração da Rede: Certifique-se de que as máquinas no cluster Kubernetes têm conectividade entre si. Os nós do cluster precisam ser capazes de se comunicar por meio dos IPs internos e externos.

  5. Versões de Software: Verifique se as versões do Kubernetes, Calico e outros componentes estão em conformidade e compatíveis.

  6. Reinicie Componentes: Às vezes, reiniciar os componentes do Kubernetes pode ajudar a resolver problemas de conectividade ou configuração. Use kubectl delete pod <nome-do-pod> para reiniciar os pods relevantes.

Lembre-se de que a configuração do ambiente de rede pode variar e pode haver outros fatores específicos do seu ambiente que estejam contribuindo para esse problema. Certifique-se de verificar os pontos acima e ajustar conforme necessário.

Espero que essas sugestões possam te ajudar a resolver o problema.

Um abraço e bons estudos.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software