• 카테고리

    질문 & 답변
  • 세부 분야

    데브옵스 · 인프라

  • 해결 여부

    미해결

NodePort와 LoadBalancer 의 get 명령 수행시 보여지는 Port(s)에 대해 문의합니다.

22.06.18 18:55 작성 조회수 326

2

노드포트와 로드밸런서 강의 중 아래  사항이 궁금합니다.

아래 k get service 의 출력을 보면 np-nginx에서는 80:3000:TCP, lb-nginx 는 80:30371/TCP로 나오는데, 노드포트에서는 3000을 노드포트로 설정했고 해당 포트로 접속을 시도해야 하는 것을 알겠습니다.

그런데 lb-nginx 는 LB로 설정했고 별도로 랜덤하게 30371이 node port 로 생긴거 같은데(노드 IP:30371로 접속하면 external IP:80 과 동일) 그렇다면 실제 flow는 어떻게(노드 IP:30371이 실제 사용되는지?) 흘러가는 건가요? 

 

 

[root@m-k8s ~]# k get service

NAME         TYPE           CLUSTER-IP       EXTERNAL-IP    PORT(S)        AGE

kubernetes   ClusterIP      10.96.0.1        <none>         443/TCP        43h

lb-chk-ip    LoadBalancer   10.105.221.232   192.168.1.12   80:30045/TCP   25s

lb-nginx     LoadBalancer   10.108.247.90    192.168.1.11   80:30371/TCP   29s

np-nginx     NodePort       10.107.9.103     <none>         80:30000/TCP   70m

 

답변 1

답변을 작성해보세요.

3

안녕하세요, sj님.

 

튜터 비모입니다.

 

문의주신 LoadBalancer 서비스 사용시 자동으로 생성되는 NodePort는 아래 문서에서 설명하는 내용과 같이,

할당된 External IP는 고정된 목적지로 직접 라우팅되는 것이 아니기 때문에 NodePort를 거쳐 트래픽이 목적지로 도달하기까지 라우팅을 하기 위해 사용됩니다.

 

- 서비스 퍼블리싱 (ServiceTypes)

https://kubernetes.io/ko/docs/concepts/services-networking/service/#publishing-services-service-types

LoadBalancer: 클라우드 공급자의 로드 밸런서를 사용하여 서비스를 외부에 노출시킨다. 

외부 로드 밸런서가 라우팅되는 NodePort와 ClusterIP 서비스가 자동으로 생성된다.

 

- 서비스 IP 주소

https://kubernetes.io/ko/docs/concepts/services-networking/service/#ips-and-vips

실제로 고정된 목적지로 라우팅되는 파드 IP 주소와 달리, 서비스 IP는 실제로 단일 호스트에서 응답하지 않는다. 

대신에, kube-proxy는 iptables (리눅스의 패킷 처리 로직)를 필요에 따라 명백하게 리다이렉션되는 가상 IP 주소를 정의하기 위해 사용한다.

클라이언트가 VIP에 연결하면, 트래픽이 자동으로 적절한 엔드포인트로 전송된다. 

 

- 외부 IP

https://kubernetes.io/ko/docs/concepts/services-networking/service/#%EC%99%B8%EB%B6%80-ip

하나 이상의 클러스터 노드로 라우팅되는 외부 IP가 있는 경우, 쿠버네티스 서비스는 이러한 externalIPs에 노출될 수 있다. 

서비스 포트에서 외부 IP (목적지 IP)를 사용하여 클러스터로 들어오는 트래픽은 서비스 엔드포인트 중 하나로 라우팅된다.

 

- 로드밸런서 NodePort 할당 비활성화

https://kubernetes.io/ko/docs/concepts/services-networking/service/#%EB%A1%9C%EB%93%9C%EB%B0%B8%EB%9F%B0%EC%84%9C-nodeport-%ED%95%A0%EB%8B%B9-%EB%B9%84%ED%99%9C%EC%84%B1%ED%99%94

type=LoadBalancer 서비스에 대한 노드 포트 할당을 선택적으로 비활성화할 수 있으며, 이는 spec.allocateLoadBalancerNodePorts 필드를 false로 설정하면 된다. 

노드 포트를 사용하지 않고 트래픽을 파드로 직접 라우팅하는 로드 밸런서 구현에만 사용해야 한다.

 

공식 문서는 아니지만 LoadBalancer 트래픽이 pod로 도달하기까지의 보다 자세한 내용이 알고싶으시다면

아래 문서를 참조해주시길 부탁 드립니다.

- Kubernetes: from load balancer to pod

https://medium.com/google-cloud/kubernetes-from-load-balancer-to-pod-3f2399637b0c

 

혹시 추가로 궁금하신 점이 있으면 남겨주세요

 

감사합니다 :)