inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

그림으로 배우는 쿠버네티스(v1.35)

4.4.로드밸런서(LoadBalancer)

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

569

sj

작성한 질문수 3

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

 

kubernetes docker

답변 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

 

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

 

감사합니다 :)

섹션2. 1.5쿠버네티스_컨트롤플레인_노드와_워커_노드_그리고 kubeadm으로 쿠버네티스 직접 구성하기-v1.30 오류

0

40

2

[해결] 2.4. tabby config.yaml 파일 복사 실패 시

1

94

0

9.3 Error 발생 유도 테스트 확인 부탁드립니다.

0

96

2

livenessProbe 어플리케이션 재시작 의미

0

67

2

K8S 노들에 접근이 안됩니다.

0

168

6

arm virtualBox의 vagrant up 에러

0

115

2

추후 강의계획 질문

0

149

1

MAC 에서 사용할 수 있는 ova 파일은 없나요?

0

220

2

7.8. w3-affinity-leader 적용 에러 문제 질문드립니다.

0

211

5

커리큘럼 순서 문의

0

206

2

apply 실행 후 pod상태가 ContainerCreating 에서 변경이 안됩니다.

0

371

2

livenessProbe에 대한 설명이 조금 부족한거 같네요

0

218

3

controlplane_node.sh 실행 오류 문의

0

242

2

예제폴더의 경로와 영상의 경로가 너무나도 다릅니다

0

219

2

9.6강의 소스 수정 요청 및 에러 문의

0

165

2

8.6 강의 중 sysnet4admin/chk-info 이미지 bash 이슈

0

161

3

드디어 맥에서도 virtualbox가 지원 됩니다.

0

282

2

8.3강의 set-ctx-pod-admin.sh 수정 요청

0

120

3

7.5 강의 tardy-nginx 이미지 문제

0

3312

3

ch1. controlplan_node.sh 실행 시 에러가 뜹니다

0

306

3

Kubenetes 클러스터에 추가적으로 신뢰하는 CA를 넣을 수 있나요?

0

183

1

clusterrolebinding의 --namespace 옵션의 역할

0

165

2

A.0003 파일 vagrant file 수정 (자문자답)

0

167

2

nfs-client-provisioner 관련 생성 오류 질문

0

191

1