쿠버네티스(15) : Error : Service 110 connection timed out

NOHHYEONGJUN·2024년 10월 11일

쿠버네티스

목록 보기
16/23

0. 문제 상황

OpenStack에서 구축한 클러스터에 React 및 Express로 구현한 웹 서비스를 배포했다.
NodePort로 접속 시, 접속이 되지 않고 무한 로딩이 걸렸다.
Nginx Log를 확인해보니, 110 connection timed out 오류 였다.

 

Nginx Log 확인

cat /var/log/nginx/error.log

 upstream timed out (110: Connection timed out) while reading response header from upstream ...
 

 

 


1. 원인

노드의 DNS 설정 문제였다.

노드의 /etc/resolv.conf 파일이 systemd-resolved를 사용하고 있었다.
하지만, 클러스터의 DNS (10.96.0.10)를 사용하지 않고 있었다.
이로 인해 클러스터 내부 도메인 처리가 되지 않았다.

 

dns-test

kubectl run -it --rm --restart=Never --image=busybox:1.28 dns-test -- nslookup kubernetes.default.svc.cluster.local

 

 


2. 해결

모든 노드에 직접 resolved.conf 설정에 클러스터 DNS를 추가해주어야 한다.

sudo vi /etc/systemd/resolved.conf

DNS=10.96.0.10
Domains=cluster.local
sudo systemctl restart systemd-resolved
resolvectl status
sudo systemctl restart kubelet
sudo reboot

 

 


3. 확인

ubuntu@control-plane:~$ kubectl run -it --rm --restart=Never --image=busybox:1.28 dns-test -- nslookup kubernetes.default.svc.cluster.local

If you don't see a command prompt, try pressing enter.

Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name:      kubernetes.default.svc.cluster.local
Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local
pod "dns-test" deleted

해결!


 

 


4. 또 다른 문제

 

0. 상황

Front로 접속하기 위한 파드가 8개 떠 있었다.
접속이 되다가 어느 순간 접속이 되지 않고 무한 로딩 문제가 생겼다.

 

1. 원인

OpenStack으로 가상화된 서버들 중 통신이 되지 않는 서버가 있던 것 같다.
모든 Pod의 IP로 curl을 통해 통신이 되지 않는 노드들을 찾아냈다.

 

2. 해결

통신이 되지 않는 노드에 파드를 뜨지 않도록 했다.

통신이 되지 않는 노드

kubectl label node <노드 이름> avoid=true

 

deploy 수정

      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: avoid
                operator: NotIn
                values:
                - "true"

spec.template.spec에 추가


profile
Cloud/DevOps & Network Virtualization에 관심 있는 Engineer입니다. 🐳⚓️👨‍✈️

0개의 댓글