인그레스
인그레스는 클러스터 내의 서비스에 대한 외부 접근을 관리하는 API 게이트웨이이다.
일반적으로 HTTP를 관리하며 로드 밸런서, SSL Termination (클러스터 내에서는 HTTP로만 통신하게 하는 전환 과정), 가상 호스팅을 제공한다.
인그레스 실습
- 먼저 기존 서비스 타입을 LoadBalancer로 ClusterIP로 바꾸고 적용합니다.
- ClusterIP는 클러스터 내에서만 접근 가능합니다. 더 이상 EXTERNAL-IP는 사용할 수 없다.
- 인그레스 리소스를 다음과 같이 만들고 적용합니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx
namespace: default
spec:
rules:
- host: localhost
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx
port:
number: 80
$ kubectl apply -f ingerss.yaml
ingress.networking.k8s.io/nginx created
$ kubectl get all,ingresses
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress.networking.k8s.io/nginx <none> localhost 80 46s
kubectl get all, ingresses 명령어로 조회를 해줍니다.
인그레스는 인그레스 리소스(정책 그 자체)외에도 인그레스 컨트롤러(정책을 실행시키는 도구)가 반드시 필요하다
minikube를 사용하는 경우, 인그레스 컨트롤러 애드온으로 별도의 설치가 필요하다.
https://kubernetes.io/ko/docs/tasks/access-application-cluster/ingress-minikube/
NGINX 인그레스(Ingress) 컨트롤러로 Minikube에서 인그레스 설정하기
인그레스는 클러스터의 서비스에 대한 외부 액세스를 허용하는 규칙을 정의하는 API 객체이다. 인그레스 컨트롤러는 인그레스에 설정된 규칙을 이행한다. 이 페이지에서는 HTTP URI에 따라 요청을
kubernetes.io
위의 공식문서를 참고해서 nginx 인그레스 컨트롤러를 활성화시켜주자.
인그레스 컨트롤러 활성화
minikube addons enable ingress
nginx 인스레스 컨트롤러를 활성화하기 위해 다음 명령어를 실행한다.
kubectl get pods -n ingress-nginx
nginx 인그레스 컨트롤러가 실행 중인지 확인한다.
터널을 열고
http://localhost 에서 확인해주자.
왜.. 503이 뜨는 것인가?
인그레스의 필요성
애플리케이션을 외부에 노출시키는 방법으로 서비스를 배웠었다. 외부 IP주소를 할당해주는 서비스와 로드 밸런서를 생성하고 컨테이너로 트래픅을 보내는 방법을 이용합니다. 이렇게 파드를 노출시킬 수 있는데, 왜 인그레스를 별도로 사용해야 할까요?
인그레스 리소스는 로드 밸런싱과 더불어 호스트 기반 라우팅을 지원하기 때문입니다.
앞서 만든 서비스는 LoadBalancer에서 ClusterIP로 바꿨기 때문에 인그러스가 로드 밸런서의 역할을 수행해야 한다.
아주 단순한 애플리케이션도 서비스는 두 개 이상의 HTTP요청을 가지는 것이 보통이고, 보통 각각 웹서버와 WAS로 대표로 됩니다.
이러한 서비스의 접근을 별도의 포트로 구분하여 접속하게 할 수도 있지만 하나의 호스트 상에서 라우팅으로 구분하면 유연한 서비스를 만들 수 있다.
예를 들어, 웹서버는 /로, WAS는 /api로 라우팅 할 수 있습니다.
YAML파일에서 spec.rules.host 에 별도의 호스트를 지정하여 Web Server는 www.mydomain.clikck,
WAS는 api.mydomain.click으로 설정하는 것도 가능하다.
인그레스 컨트롤러란?
인그레스 컨트롤러라고 해서 뭔가 특별한 프로그램은 아니다.
인그레스 컨트롤러는 쿠버네티스 클러스터 내에서 동작하는 네트워크 프록시이다. 인그레스 컨트롤러는 클러스터 외부에서 액세스 가능한 서비스에 대한 라우팅 및 로드밸런싱을 제공한다.
우리가 흔히 잘 알고 있는 nginx와 같은 애플리케이션이 바로 인그레스 컨트롤러이다. (nginx가 하는 일이 결국 호스트 기반 라우팅과 로드 밸런싱이라는 점을 기억)
즉 인그레스 컨트롤러는 규칙을 이행하는 실질적인 애플리케이션 컨테이너이다.
*프록시(Proxy)
- 클라이언트와 서버 간에 중계 역할을 하는 컴퓨터 시스템 또는 응용 프로그램을 말한다.
- 일반적으로 인터넷에서 프록시는 클라이언트가 서버에 직접 연결하는 것이 아니라, 프록시 서버를 경유하여 연결을 수행한다.
- 클라이언트는 프록시 서버에 요청을 보내고, 프록시 서버는 클라이언트 대신 서버에 요청을 보내고, 서버로부터의 응답을 클라이언트에게 전달한다. 이렇게 함으로써 클라이언트와 서버 사이에 위치한 프록시가 중개 역할을 수행하게 된다.
'study > devops' 카테고리의 다른 글
helm 차트 구성 (0) | 2023.02.16 |
---|---|
helm 패키지 매니저 (0) | 2023.02.16 |
쿠버네티스 (Kubernetes, k8s) 스테이트풀셋 (0) | 2023.02.15 |
쿠버네티스 (Kubernetes, k8s) 서비스 (2) | 2023.02.14 |
쿠버네티스 : 대화형 튜토리얼 - 앱 배포하기 (0) | 2023.02.13 |