
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 -k
return 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:
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
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
Verifique as portas necessáriasestão abertos ou não.
Verifique se a regra de firewall no pod pode bloquear o tráfego.
O padrão dos pods de correspondência CIDR e Calico é 192.168.0.0/16, consultecomentário no githubpara mais detalhes.
Se o servidor HTTP depender de nomes DNS, certifique-seResolução DNSestá configurado corretamente no cluster.
Editar1
À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.
Verifique também se as redes de pods se sobrepõem às redes host. Referir-seInstalando um complemento de rede Podpara mais detalhes.
À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 update
e 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_forward
verificando 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 nat
se 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