인그레스
> 클러스터 내의 서비스에 대한 외부 접근을 관리하는 API 게이트웨이
> 일반적으로 HTTP를 관리하며 로드 밸런서, SSL Termination (클러스터 내에서는 HTTP로만 통신하게 하는 전환 과정), 가상 호스팅을 제공
실습으로 인그레스를 만들고, 적용해 봅시다.
- 먼저 기존 서비스 타입을 LoadBalancer로 ClusterIP로 바꾸고 적용합니다. ClusterIP는 클러스터 내에서만 접근 가능합니다. 더 이상 EXTERNAL-IP는 사용할 수 없음
- 인그레스 리소스를 다음과 같이 만들고 적용
kubectl get all,ingresses
3. 인그레스는 인그레스 리소스(정책 그 자체) 외에도 인그레스 컨트롤러(정책을 실행시키는 도구)가 반드시 필요. minikube를 사용하는 경우, 인그레스 컨트롤러는 애드온으로 별도의 설치가 필요.
https://kubernetes.io/ko/docs/tasks/access-application-cluster/ingress-minikube/를 참고해서 nginx 인그레스 컨트롤러를 활성화
인그레스 컨트롤러 활성화
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 |