• 카테고리

    질문 & 답변
  • 세부 분야

    데브옵스 · 인프라

  • 해결 여부

    미해결

ingress에 대해

22.11.04 13:49 작성 조회수 166

1

안녕하세요 선생님 항상 감사합니다

dockerfile과 ingress 와 service에 대해 이해가 잘 가지 않아 질문 드립니다.


k8s를 운영하면서 web pod를 띄울때 전체적인 순서가

Dockerfile -> deployment -> service -> metalLB -> ingress controller -> ingress 라고 생각 하고 있습니다

 

1.web-server가 0.0.0.0:8000 이라고 한다면 dockerfile 에서 expose 할 때 8000 으로 맞춰 줘야 하나요?

2.image를 expose 8000 으로 띄웠으니 deployment의 containerports를 8000 번으로 열어주어야 하나요?

3.deployment pod port가 8000이니 service의 targetport는 pod 를 가리키는 8000을 줘야 하나요?

4.ingress를 80번 포트로 열어준다고 한다면 service의 port는 80이고 tagretport는 pod를 가리키는 8000 번이 맞나요?

5. ngress-nginx-controller - ingress - service - deployement 이런식으로 트래픽이 들어오는게 맞다면 HPA 오토스케일을 걸어주고 싶은 상황에서는
ngress-nginx-controller에 걸어 줘야하나요?
익스터널 ip가 있는 pod에 걸어주는거로 알고 있었는데 ngress-nginx-controller에 익스터널 ip가 있고 pod에는 없어서요

이정도가 궁금합니다!

답변 1

답변을 작성해보세요.

1

안녕하세요.

  1. 네 맞습니다.

  2. 네 그렇긴 하나 docker처럼 필수는 아닙니다. 정보성으로 이라고 보시면 됩니다. containerPort를 명시하지 않는다고 해서 8000 접근이 안되는 건 아닙니다.

  3. 네 꼭 줘야 합니다.

  4. 네 ingress 오브젝트 상의 port는 Service의 Port를 지칭합니다.

  5. hpa는 nginx에 걸어주지 않습니다. 실제 스케일링할 Deployment에만 걸어주면 됩니다. ExternalIP와 HPA와는 크게 관계는 없는데..??

 

외부에서 호출해야 되는 대상은 Nginx 하나 입니다. 그래서 ExternalIP건 NodePort, LoadBalancer, metalLB건 Nginx를 외부에서 호출할 수 있게 만들어야 되는게 첫번째고요.

이 부분이 세팅이 됐으면, 앞에 정해진 IP,Port 뒤에 URL들 (/aaa , /bbb 혹은 Domain 이름)에 따라 내부 Deployment App 들 한테 어떻게 분기 시켜줄껀지를 정하는게 두번째예요.

두번째 방법을 연결하기 위해 쿠버네티스 오브젝트인 Ingress, Service, Deployment 들과 Port 구성들이 위에 질문한 것 처럼 잘 되야 합니다.

ingress, service, deployment는 트래픽이 들어오는 순서는 아니고, 결국 쿠버네티스 상에서 트래픽 분기를 해주기 위한 개념들이고요.

실제 트래픽은 External IP -> Nginx -> Pod(web)로 흘러가게 됩니다.

HPA는 Pod(web)의 CPU나 Memory가 부족해서 자동으로 스케일링 하기 위해 사용하는거고, Nginx는 중간에 트래픽 전달의 목적이라 Pod가 실행시 로직을 수행하느라 부하가 크더라도 트래픽만 전달하는 입장의 Nginx에서는 크게 부하가 가진 않습니다.

하지면 별도로 Nginx가 많은 Pod들을 관리하고 전체 트래픽이 엄청 많은 경우 에도 필요하면 HPA를 별도로 걸어줄 수는 있습니다.

qwe7791님의 프로필

qwe7791

2022.11.07

정성스런 답변 정말 감사합니다 ㅜㅜ 사랑합니다 스승님