DevOps BootCamp/쿠버네티스

인그레스

cloudmaster 2023. 5. 22. 13:23
인그레스
 > 클러스터 내의 서비스에 대한 외부 접근을 관리하는 API 게이트웨이
 > 일반적으로 HTTP를 관리하며 로드 밸런서, SSL Termination (클러스터 내에서는 HTTP로만 통신하게 하는 전환 과정), 가상 호스팅을 제공

 

실습으로 인그레스를 만들고, 적용해 봅시다.

  1. 먼저 기존 서비스 타입을 LoadBalancer로 ClusterIP로 바꾸고 적용합니다. ClusterIP는 클러스터 내에서만 접근 가능합니다. 더 이상 EXTERNAL-IP는 사용할 수 없음
  2. 인그레스 리소스를 다음과 같이 만들고 적용

 

kubectl get all,ingresses

 

3. 인그레스는 인그레스 리소스(정책 그 자체) 외에도 인그레스 컨트롤러(정책을 실행시키는 도구)가 반드시 필요. minikube를 사용하는 경우, 인그레스 컨트롤러는 애드온으로 별도의 설치가 필요.

 https://kubernetes.io/ko/docs/tasks/access-application-cluster/ingress-minikube/를 참고해서 nginx 인그레스 컨트롤러를 활성화

 

NGINX 인그레스(Ingress) 컨트롤러로 Minikube에서 인그레스 설정하기

인그레스는 클러스터의 서비스에 대한 외부 액세스를 허용하는 규칙을 정의하는 API 객체이다. 인그레스 컨트롤러는 인그레스에 설정된 규칙을 이행한다. 이 페이지에서는 HTTP URI에 따라 요청을

kubernetes.io

 

 

인그레스 컨트롤러 활성화

 

 1. minikube addons enable ingress

 

 2. kubectl get pods -n ingress-nginx

-> 제대로 활성화 됐는지 확인

 

 

4. 터널을 열고, http://localhost 접속

 

 

인그레스의 필요성

애플리케이션을 외부에 노출시키는 방법 ->  service

 : 외부 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와 같은 애플리케이션이 바로 인그레스 컨트롤러

 -> 즉 인그레스 컨트롤러는 규칙을 이행하는 실질적인 애플리케이션 컨테이너

 

 

인그레스 컨트롤러 완전 삭제

kubectl delete namespace ingress-nginx

kubectl delete serviceaccount ingress-nginx

kubectl delete configmap ingress-nginx-controller

kubectl delete clusterrole ingress-nginx

kubectl delete clusterrolebinding ingress-nginx

kubectl delete role ingress-nginx

kubectl delete rolebinding ingress-nginx

kubectl delete service ingress-nginx-controller-admission

kebectl delete service ingress-nginx-controller

kubectl delete deployment ingress-nginx-controller

kubectl delete validatingwebhookconfiguration ingress-nginx-admission

kubectl delete serviceaccount ingress-nginx-admission

kubectl delete clusterrole ingress-nginx-admission

kubectl delete clusterrolebinding ingress-nginx-admission

kubectl delete role ingress-nginx-admission

kubectl delete rolebinding ingress-nginx-admission

kubectl delete job ingress-nginx-admission-create

kubectl delete job ingress-nginx-admission-patch

'DevOps BootCamp > 쿠버네티스' 카테고리의 다른 글

젠킨스 CI  (0) 2023.07.06
helm으로 패키징하기  (0) 2023.05.23
HealthCheck  (0) 2023.05.22
볼륨과 스테이트풀셋  (0) 2023.05.22
새 버전이 망가졌어요! 3.0에서 2.0으로 롤백하기  (1) 2023.05.20