% minikube addons enable ingress // nginx 인그레스 컨트롤러 활성화 응답 % kubectl get pods -n ingress-nginx // 인그레스 컨트롤러 실행 확인 (minikube v1.19 or later)
응답 NAME READY STATUS RESTARTS AGE ingress-nginx-admission-create-ltwzz 0/1 Completed 0 9m ingress-nginx-admission-patch-t9hct 0/1 Completed 1 9m ingress-nginx-controller-77669ff58-zfsfk 1/1 Running 0
localhost 접속
인그레스 필요성
- 어플리케이션을 외부에 노출 시킬때의 서비스를 실습해보았고, 외부 IP주소를 할당해주는 서비스와 로드밸런서를 생성해보았다.
근데 왜 인그레스를 별도로 사용해야 할까?
=> 인그레스 리소스는 로드밸런싱과 더불어 호스트 기반 라우팅을 지원하기 때문이다.
(웹 서버에서 요청된 호스트 이름을 기반으로 요청을 적절한 백엔드 서버로 라우팅하는 방식)
앞서 만든 서비스는 LoadBalancer에서 ClusterIP로 바꿨기 때문에 인그레스가 로드 밸런서의 역할을 수행해야 합니다. 아주 단순한 애플리케이션도 서비스는 두 개 이상의 HTTP 요청을 가지는 것이 보통입니다. 보통 각각 Web Server와 WAS로 대표됩니다. 이러한 서비스의 접근을 별도의 포트로 구분하여 접속하게 할 수도 있지만, 하나의 호스트 상에서 라우팅으로 구분하면 보다 유연한 서비스를 만들 수 있습니다. 예를 들어, Web Server는 /로, WAS는 /api로 라우팅 할 수 있습니다.YAML 파일에서 spec.rules.host 에 별도의 호스트를 지정하여 Web Server는 www.mydomain.click, WAS는 api.mydomain.click으로 설정하는 것도 가능합니다. 그렇다면 인그레스 컨트롤러는 무엇일까요? 인그레스 컨트롤러라고 해서 뭔가 특별한 프로그램은 아닙니다. 우리가 흔히 잘 알고 있는 nginx와 같은 애플리케이션이 바로 인그레스 컨트롤러입니다. (nginx가 하는 일이 결국 호스트 기반 라우팅과 로드 밸런싱이라는 점을 기억하세요) 즉 인그레스 컨트롤러는 규칙을 이행하는 실질적인 애플리케이션 컨테이너입니다.