
특정 노드(mynode라고 함)의 Pod는 인터넷에 액세스할 수 없으며, 다른 노드에 예약된 나머지 Pod는 인터넷에 액세스할 수 있습니다.
mynode는 인터넷에 액세스할 수 있고, 여기에 SSH를 통해 접속할 수 있으며, 독립 실행형 Docker 컨테이너를 시작할 수도 있고 인터넷에 액세스할 수 있지만 노드에 예약된 포드는 그렇지 않습니다.
문제는 수신 및 송신에 영향을 미치며 kubelet은 포트 10250에서 실행 중이며
curl https://localhost:10250 -k
다음을 통해 연결할 수 있습니다 404 page not found
.
컨텍스트: 클러스터에 동일한 사양의 노드가 거의 없습니다. 어제 OS를 업그레이드하기로 결정했습니다(20.04에서 22.04로). 그래서 잘 작동하던 이전 K8S 클러스터를 제거하고 모든 노드에서 OS를 업그레이드하고 K8S를 다시 설치하고 클러스터를 다시 생성했습니다. , mynode를 제외한 모든 노드에서 모두 원활하게 작동하고 ReadyState에 있으며 그렇지 않은 것을 제외하면 괜찮아 보입니다.
내 CNI는 옥양목입니다. 노드의 Calico Pod(csi-node-driver 및 calico-node)가 실행 중 상태이고 다시 시작되지 않습니다.
k8s 웹사이트의 디버깅 페이지를 따랐는데 포드에 예약된 HTTP 서버에 연결할 수 없으므로 이 문제는 두 가지 모두에 영향을 미칩니다.입구와 출구.
답변1
OS 업그레이드 후에 문제가 발생한 것 같습니다. 따라서 포드의 CNI 플러그인, CRI 및 컨테이너 이미지가 최신이고 최신 OS 버전 22.04와 호환되는지 확인하세요.
다음과 같은 다양한 이유로 문제가 발생할 수 있습니다.네트워크 정책액세스 차단, 포드 네트워크 구성 및 Calico CNI 문제. 문제를 해결하는 데 도움이 될 수 있는 아래 단계를 따르세요.
문제를 이해하려면 coreDNS 로그 및 Pod 로그를 살펴보세요. 다음 명령을 실행하면 자세한 정보를 얻을 수 있습니다.
kubectl 로그 --namespace=kube-system -l k8s-app=kube-dns
kubectl 로그 포드 이름
Pod에 대한 트래픽을 차단하는 네트워크 정책을 확인하세요. 다음 명령을 실행하면 자세한 정보를 얻을 수 있습니다.
kubectl get networkpolicy
필요한 포트를 확인하세요열려있든 아니든.
포드 내의 방화벽 규칙이 트래픽을 차단할 수 있는지 확인하세요.
일치 포드 CIDR 및 Calico의 기본값은 192.168.0.0/16입니다. 참조github 댓글상세 사항은.
HTTP 서버가 DNS 이름에 의존하는 경우 다음을 확인하십시오.DNS 확인클러스터 내에서 올바르게 구성되었습니다.
편집1
때때로 CoreDNS에는 문제가 없지만 ClusterIP에 대한 트래픽이 Pod로 올바르게 전달되지 않는 k8s 네트워크 문제로 인해 발생합니다. Kube-proxy 때문일 수도 있습니다. k8s를 참고하세요디버그 서비스문제 해결 가이드용.
또한 포드 네트워크가 호스트 네트워크와 겹치는지 확인하세요. 인용하다포드 네트워크 부가기능 설치상세 사항은.
업그레이드 중에 네트워크 관련 기능이 로드되지 않는 경우가 있으며 이러한 포드에 들어가면 루트 사용자로 작업하게 됩니다. 그러니 하려고 노력
apt-get update
하고 나중에 할 수 있어요apt-get install curl.
답변2
해결책은 서버를 다시 시작하는 것이었습니다 ...
답변3
404
해당 URL이 존재하지 않기 때문에 Kubelet이 표시할 것으로 예상됩니다. 다음을 시도해 보세요:
curl -k https://localhost:10250/healthz
ip_forward
결함이 있는 노드를 확인하는 것부터 시작하겠습니다.
cat /proc/sys/net/ipv4/ip_forward
그렇지 않은 경우 Calico에서 시행하는 정책을 확인하겠습니다.
kubectl get networkpolicy -A
kubectl get gnp
kubectl get cnp -A
nat
다음으로 IPPool이 활성화되어 있는지 확인하겠습니다.
kubetl get ippool -o yaml
게이트웨이를 확인하세요.
참고: iptables를 플러시하면 연결이 일시적으로 끊어질 수 있으므로 콘솔 연결이 편리한지 확인하세요.
IPtables를 플러시하는 것도 나쁜 생각이 아닐 수도 있고, 환영을 너무 오래 유지하는 일종의 규칙일 수도 있습니다.
iptables -F