• 카테고리

    질문 & 답변
  • 세부 분야

    데브옵스 · 인프라

  • 해결 여부

    미해결

Ingress를 통한 LoadBalancing과 Service를 통한 LoadBalancing의 차이에 대해 질문드립니다.

20.03.27 02:02 작성 조회수 543

1

안녕하세요 태민님. 덕분에 요즘 손쉽게 쿠버네티스를 배워가고 있습니다.

이번 질문은 강의와는 다소 거리가 먼 내용도 있긴합니다...ㅎ

1.

Ingress의 개념을 얘기할 때에는 Ingress라는 오브젝트와 IngressController라는 기능을 주로 다루는 것 같은데요. 제가 이해한 바는 아래와 같습니다.

Ingress라는 "개념"은 클러스터로 들어오는 요청을 로드밸런싱한다는 개념이고, Ingress라는 "오브젝트" 자체는 어떤 방식으로 라우팅과 로드밸런싱을 할 지에 대한 설정. ingress controller 역할을 하는 "파드"는 그 설정을 바탕으로 로드밸런싱을 진행한다.

제가 이해한 위의 내용이 맞는것인지요..?

되게 사소한 내용같긴하지만, 강의 및 기타 다른 블로그들에서도 "Ingress가 요청을 분산시켜준다." 는 식으로 설명이 되어있는 부분이 있어서 저는 처음에 Ingress로 접속을 하는 건 줄 알고 시도를 했는데, Ingress Controller로 접속하고, Ingress Controller가 요청을 분산시켜주는 게 맞지 않을까 싶어서 여쭤봅니다.

2. 

다음은 약간 네트워크 계층과 관련된 내용입니다. 서비스(특히 LoadBalancer)와 Ingress Controller가 어떻게 다른가인데요.

서비스는 L4 계층의 LB이고, Ingress Controller는 L7 계층의 LB이다. 라는 내용을 보았습니다.(https://stackoverflow.com/questions/50966300/whats-the-difference-between-exposing-nginx-as-load-balancer-vs-ingress-control)

네트워크 계층이 쿠버네티스의 주 내용이 아니라 빠져있는 게 당연하겠지만, 제가 네트워크쪽이 좀 약해서요..ㅜㅜ 좀 깁니다. 제가 이해한 내용에 따라 서비스와 인그레스, 네트워크 계층의 작동방식을 예시로 들어보겠습니다. 틀린 부분이 있다면 짚어주실 수 있을까요?

---

예시

Nginx IngressController Pod의 IP가 10.10.10.5, 10.10.10.6

Nginx IngressController Pods를 LoadBalancer type으로 노출시킨 service의 IP가 10.10.10.10

요청을 넘겨받을 Application Pod의 IP가 10.10.20.5,10.10.20.6

요청을 넘겨받을 Application Pods를 ClusterIP type으로 노출시킨 service의 IP가 10.10.20.10 이라고해보자.

정상적으로 client가 외부에서 직접 요청을 보내게되는 IP는 10.10.10.10이다.

그럼 이 LoadBalancer type 서비스는 URL이 어디든, Method가 뭐든 상관없는 L4 계층의 로드밸런싱을 이용해 Nginx IngressController Pod 중 하나로 요청을 넘겨준다.

요청을 넘겨받은 IngressController Pod는 URL과 Method, IP를 통한 L7 계층의 로드밸런싱을 이용해 적절한 app service로 요청을 넘겨준다.

요청을 넘겨받은 app service는 L4계층의 로드밸런싱을 이용해 적절한 app pod에 요청을 넘겨준다.

요청을 넘겨받은 app pod는 드디어 요청에 따른 작업을 수행하고 반응을 보낸다.

---

이번 내용은 상당히 길고, 간단히 답해주시기 힘들 수도 있는 점 죄송합니당. 강의 열심히 들을게요!

답변 4

·

답변을 작성해보세요.

1

아 그렇군요. 

2번째 질문 답변드릴께요.

위에 예시 내용에 잘못된점이 없는지 아래 그림처럼 그려가며 정리해봤고,

잘 이해하셔서 제가 더 커맨트 해드릴 말은 없네요^^;

1

Umi님의 프로필

Umi

질문자

2020.03.27

아니에용 강의에 꽤 잘 설명되어있었고, 특히 그림으로 설명해주신 부분이 구조를 이해하는 데에 도움이 되었습니다.

다만 헷갈렸던 부분은 태민님의 강의와 다른 블로그들에서도 "인그레스를 통해 접속한다"는 표현이 많이들 등장하는데, 이 때의 인그레스가 Ingress라는 Object를 의미하는 건가 Ingress Controller라는 Object를 의미하는 건가 싶어서 여쭤보게되었습니다.

감사합니다. ㅎㅎ

1

안녕하세요. 이번에도 좋은 질문 감사합니다.

먼저 1번부터 답변드릴께요. 정확히 이해하신 거고요.

Ingress를 간단한 컨셉으로 설명하는 내용으로 Ingress -> Server1, Server2 이렇게 연결을 해서 설명된 내용도 많기 때문에 

실제 Ingress를 자세히 아는데 혼돈이 올 수 있습니다.

그래서 저도 최대한 지금 Umi님이 이해한 내용을 강의에 담아서 설명을 했던건데, 

혹시 제강의를 듣고도 딱 이해가 어려웠나요? 

2번은 오후에 다시 답변드릴께요. 좋은 하루 되세요.

0

Umi님의 프로필

Umi

질문자

2020.03.27

우와웅.. 감사합니다. 태민님 덕분에 잘 이해했던것같아요.

그림까지...정성에 감동받구갑니다.ㅎㅎ