개발자 블로그를 위한 다섯걸음
이제 metalLB가 설치되어 쿠버네티스의 어플리케이션들이 외부로 서비스 할 준비가 되었습니다. 이제 ingress를 설치하고 metalLB와 연결해 원하는 어플리케이션들이 외부에 서비스 할 수 있도록 한 발자국 더 나아가도록 하겠습니다. 먼저 ingress란 무엇인지 간략하게 설명하고 설치방법에 대해 다루겠습니다.
ingress란?
쿠버네티스 클러스터 외부에서 내부 서비스로의 HTTP 및 HTTPS 트래픽을 관리하고 라우팅 역할을 하는 쿠버네티스 리소스입니다. 그 중 대표적인건 nginx ingress controller가 있으며, haproxy, traefik 등 도 존재하며 aws 환경같이 클라우드 환경에서는 환경에 맞는 별도의 ingress controller가 존재합니다.
웹서비스를 목적으로 하는 외부 트래픽에 대한 라우팅 역할을 하는 리소스 라고 정의 할 수 있습니다.
load balancer .->ingress[Ingress]; ingress-->|routing rule|service[Service]; subgraph cluster ingress; service-->pod1[Pod]; service-->pod2[Pod]; end classDef plain fill:#ddd,stroke:#fff,stroke-width:4px,color:#000; classDef k8s fill:#326ce5,stroke:#fff,stroke-width:4px,color:#fff; classDef cluster fill:#fff,stroke:#bbb,stroke-width:2px,color:#326ce5; class ingress,service,pod1,pod2 k8s; class client plain; class cluster cluster;
nginx-ingress-controller 설치
- nginx-ingress-controller 설치
역시 helm을 통해 설치를 진행을 하고 이전 포스팅들에서 사용했던 bitnami 레포지토리의 nginx-ingress를 설치했기 때문에 레포 추가를 생략하고 진행합니다.
helm upgrade --install nginx-ingress-controller bitnami/nginx-ingress-controller -n nginx-ingress --create-namespace --set controller.replicaCount=1 --set service.type=LoadBalancer
replicaCount=1
설정을 바꾸는 이유는 chart 내의 설정이 기본으로 replica 갯수가 2개로 지정되어 있어, logs 상에 warning 페이지를 띄우기고 조회를 했을 때 READY가 1/2로 출력되어 항상 신경쓰이기 때문에 변경하였습니다. (클러스터 갯수를 늘리고 리소스를 더 분배한다면 추가할 수 있지만 아직까진 계획이 없습니다.)
또한 이전 포스팅에서 설치한 MetalLB를 통해 ingress를 외부와 연결시키기 위해 service.type=LoadBalancer
를 추가해서 설치를 진행합니다.
설치가 완료되면 nginx-ingress를 다음과 같은 확인해볼 수 있고, MetalLB가 정상적으로 작동했다면, extrenal-ip에 이전 포스팅에서 설정한 아이피들 중 하나가 할당이 되는 것을 확인할 수 있습니다.

- 포트포워딩
위의 스크린샷에서 controller의 PORT 도 확인을 해야하며, 80번 포트와 443번 포트는 공유기에서 확인 할 수 없는 192.168.0.251 이라는 아이피에 할당되어 있으며, (이전 포스팅에서 설정한 MetalLB와 공유기 설정으로 쿠버네티스 클러스터에서만 접근이 가능한 아이피입니다) 이를 현재 노드(192.168.0.100)의 31599포트 와 30585포트로 연결되어 있습니다.

이것을 공유기의 포트포워딩으로 연결해주면,
- 외부에서 80/443 포트로 접근
- 공유기의 포트포워딩으로 서버 (192.168.0.100)의 31599/30585 포트로 전달
- nginx-ingress 와 metalLB 를 통해 특정 pod의 서비스의 80/443 포트로 전달
하는 구조로 작동되게 됩니다.
이제 집에서 평범하게 사용하던 공유기와 구형 컴퓨터만으로 구성한 쿠버네티스를 구축하게 되었습니다. 이제 쿠버네티스에서 '웹'서비스를 자유롭게 운용할 수 있게 되었습니다.
