• 카테고리

    질문 & 답변
  • 세부 분야

    데브옵스 · 인프라

  • 해결 여부

    미해결

각 노드에서는 왜 서비스를 이용할 수 없을까요?

22.08.17 18:46 작성 조회수 178

1

안녕하세요 강사님

좋은 강의 감사드립니다. 덕분에 많이 배우고 있습니다.

 

문의 드릴 것이 있어 글을 적습니다.

서비스를 이용해서 curl을 보낼 때, 노드의 터미널에서는 동작하지 않는 반면 파드에서는 동작하지 않는 것을 확인했습니다. 왜 이렇게 동작하는지 궁금합니다.

마스터 노드에서 svc를 확인해보면, externalName Type으로 되어있고 외부 도메인명은 naver.com으로 되어있습니다.

 

마스터 노드에서 curl externalname1을 하게 되면 연결이 되지 않는 것을 볼 수 있습니다. 

반면 동일한 명령어를 Pod에 접속해서 할 경우, 정상적으로 externalName을 찾아서 가는 것으로 보입니다.

 

노드에서의 동작과 파드에서의 동작이 왜 이렇게 다른지 궁금합니다! 

 

 

 

답변 2

·

답변을 작성해보세요.

0

네, 그건 VM의 Iptable에서 Cailco가 해주는 역할입니다.

아키텍쳐편에서 Networking 강의를 보시면 좀 더 이해가 될꺼고요.

최초 질문인 도메인 호출의 경우랑 다릅니다.

아래 그림을 보시면 192.168.0.30에서 externalname1이라는 dns이름을 호출할 경우 External Network영역의 DNS를 호출하기 때문에 해당 도메인 이름이 없다고 나옵니다.

Cluster 내에서는 Cluster 내에 DNS 서버를 호출하고 externalname1 이름이 해당 DNS서버에 ip와 매칭 정보가 있기 때문에 해당 ip로 curl이 날라가고, naver.com이라는 cluster에 없는 도메인명을 호출하게 되면 upstream DNS서버은 Internal / External 영역을 검색해봅니다.

근데 master VM에서의 DNS서버는 Internal/External Network영역의 DNS서버를 보기 때문에 해당 externalname1에 해당 하는 IP를 찾을 수가 없는거죠.

IP를 찾지 못하는거지 IP를 호출할 수가 없는 건 아닙니다. 두번째 질문해서 해보셨듯이 IP호출시에 Calico Plugin이 Iptable의 패킷을 보고 Cluster 내부의 Service/Pod를 찾아줍니다.

image

강사님 답변 너무 감사드립니다.

그런데 한 가지 문제가 있어서 다시 한번 질문드립니다.

서비스(ClusterIP) / 파드가 정상적으로 생성되었을 때...

  1. 각 노드에서 서비스 / 파드 호출 시 정상 응답

  2. 각 노드에서 서비스 / 파드 호출 시 커넥션 거부

위 두 가지 경우가 번갈아가면서 발생하기도 합니다

예를 들어서, 오늘 하면 1번 상태가 되는데.. 내일하면 2번 상태가 되기도 합니다. (동일한 yaml 파일)

기본적으로는 1번이 맞다고 이해를 해도 될까요?

뭔가 iptables에 라우팅 규칙이 업데이트가 안되는 것인지... 될 때가 있고 안될 때가 있어서 너무 헷갈리네요...

일단 좀 특이한 현상이라 뭐라 답변 드리기가 좀 그렇네요..

근데 워커노드에서 Service/Pod IP호출 자체가 일반적인 호출은 아닙니다.

워커노드에서 호출할 경우 Service NodePort를 생성해서 호출하고.

일반적으로는 LB생성을 통해서 클러스터로 트래픽을 호출하거든요.

0

안녕하세요. 

master 워커노드 상에서 쿠버네티스 리소스의 Service 호출 자체가 잘못된 명령입니다.

쿠버네티스 리소스의 Service는 클러스터 IP 내부의 Network 대역이고 클러스터 내부의 명령이고요

마스터 워커노드는 단지 리눅스의 VM이지 쿠버네티스 클러스터 자체가 아닌점을 파악하시면

당연한 동작이라고 이해하실 꺼예요

 

 

답변 감사합니다. 이해가 되지 않는 부분이 있어서 추가적으로 글을 작성하게 되었습니다.

Ingress 강의 부분을 보면, Cluster IP로 서비스를 만들고 마스터 노드에서 해당 Cluster IP로 curl을 보내면 정상적으로 응답합니다.

이 경우에는 Cluster IP이니 k8s 클러스터 내부에서만 쓰이는 IP일텐데, 왜 마스터 노드에서 Cluster IP로 Curl을 보낼 경우 정상적으로 동작을 하게 되는 것일까요?

 

 

 

이걸 보시면, svc-customer가 ClusterIP 형태로 (10.97.23.26) 되어있는데,

m-k8s(마스터 노드)에서 curl을 날리면, 정상적으로 응답이 오는 것을 확인할 수 있습니다. (아직 ingress는 배포하지 않았습니다.)