Os pods em um nó específico não têm acesso à Internet

Os pods em um nó específico não têm acesso à Internet

Os pods em um nó específico (vamos chamá-lo de mynode) não têm acesso à Internet, os pods restantes programados em outros nós têm acesso à Internet.

mynode tem acesso à Internet, posso fazer ssh nele, também posso iniciar contêineres docker independentes e eles têm acesso à Internet, mas os pods agendados no nó não.

O problema afeta a entrada e a saída, o kubelet está sendo executado na porta 10250 e acessível via: curl https://localhost:10250 -kreturn 404 page not found.

Contexto: Meu cluster tem poucos nós com a mesma especificação, ontem decidi atualizar o sistema operacional (20.04 para 22.04) e então removi o cluster K8S anterior que estava funcionando bem, atualizei o sistema operacional em todos os nós, reinstalei o K8S, recriei o cluster , tudo funciona perfeitamente em todos os nós, exceto mynode, está no ReadyState, parece bom, exceto que não está.

Meu CNI é chita. Os pods Calico (csi-node-driver e calico-node) no nó estão no estado Em execução, sem reinicializações.

Segui a página de depuração no site do k8s, o servidor HTTP agendado no pod não pode ser acessado, então esse problema afeta ambosEntrada e saída.

Responder1

Parece que o problema ocorreu após a atualização do sistema operacional, portanto, verifique se o plug-in CNI, os CRIs e as imagens de contêiner dos pods estão atualizados e são compatíveis com a versão mais recente do sistema operacional 22.04.

O problema pode acontecer por vários motivos, comopolíticas de redebloqueio de acesso, configuração de rede de pod e problemas de Calico CNI. Siga as etapas abaixo que podem ajudar a resolver seu problema:

  1. Percorra os logs do coreDNS e os logs do pod para entender o problema. Você obterá mais informações executando os comandos:

    logs kubectl --namespace=kube-system -l k8s-app=kube-dns

    nome do pod de registros do kubectl

  2. Verifique todas as políticas de rede que bloqueiam o tráfego para o pod. Você obterá mais informações executando o comando:kubectl get networkpolicy

  3. Verifique as portas necessáriasestão abertos ou não.

  4. Verifique se a regra de firewall no pod pode bloquear o tráfego.

  5. O padrão dos pods de correspondência CIDR e Calico é 192.168.0.0/16, consultecomentário no githubpara mais detalhes.

  6. Se o servidor HTTP depender de nomes DNS, certifique-seResolução DNSestá configurado corretamente no cluster.

Editar1

  1. Às vezes, não há problemas com o CoreDNS, mas devido a problemas de rede k8s, onde o tráfego para ClusterIPs não é direcionado corretamente para os pods. Pode ser por causa do proxy Kube. Consulte k8sServiços de depuraçãopara obter guia de solução de problemas.

  2. Verifique também se as redes de pods se sobrepõem às redes host. Referir-seInstalando um complemento de rede Podpara mais detalhes.

  3. Às vezes, os recursos relacionados à rede não são carregados durante a atualização e, quando você entra nesses pods, você está trabalhando como usuário root. Então tente fazer apt-get updatee depois você poderá fazerapt-get install curl.

Responder2

A solução foi reiniciar o servidor...

Responder3

Kubelet mostrando você 404é esperado, já que esse URL não existe. tente o seguinte:

curl -k https://localhost:10250/healthz

Eu começaria ip_forwardverificando o nó com defeito

cat /proc/sys/net/ipv4/ip_forward

Se não for esse o caso, verificarei as políticas que estão sendo aplicadas pela Calico

kubectl get networkpolicy -A
kubectl get gnp
kubectl get cnp -A

Em seguida, eu verificaria natse está habilitado para o IPPool

kubetl get ippool -o yaml

Verifique o portal.

Nota: A liberação do iptables pode interromper temporariamente sua conexão, certifique-se de ter uma conexão de console em mãos.

Liberar IPtables também pode não ser uma má ideia, pode ser algum tipo de regra que ultrapassou as boas-vindas.

iptables -F

informação relacionada