클러스터의 서비스(일반적으로 HTTP)에 대한 외부 액세스를 관리하는 API 개체입니다.
Ingress는 로드 밸런싱, SSL 종료 및 이름 기반 가상 호스팅을 제공할 수 있습니다.

Ingress

  • 하나의 IP나 도메인으로 다수의 서비스 제공

예시

  • Ingress –> www.abs.com –> A pod: 도메인기반의 로드 밸런싱
  • Ingress –> sun.abs.com –> B pod: 도메인기반의 로드 밸런싱
  • Ingress –> abs.com/admin –> C pod: URI기반의 로드 밸런싱
  • API GateWay의 기능과 유사함

NGINX Ingress

  • 클러스터에 nginx-ingress 이름의 네임스페이스가 생성
  • nginx-ingress 네임스페이스에 nginx pod가 배포된다.
  • nginx pod에서 다른 pod로 로드 밸런싱을 수행(rule 적용)
  • CSP에서 제공하는 관리형 쿠버네티스의 경우 CSP에서 제공하는 로드밸런서와 연결을 한다.
# ingress controller 배포
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml

# 방화벽 구성
# 1) ingress-nginx 설치에 사용되는 포트를 확인
$ kubectl -n ingress-nginx get pod -o yaml
# - 노드가 실행 중인 모든 호스트 간에 8443 포트가 열려 있다.
# - 80,443 포트는 APP의 DNS가 가리키는 쿠버네티스 노드에서 공개적으로 열린다.

# 2) 점검하기
# - 조회하는 네임스페이스에 포드가 실행하고 있어야 한다.
$ kubectl get pods --namespace=ingress-nginx

# - 모두 실행할 때까지 기다린다.
$ kubectl wait --namespace ingress-nginx \
  --for=condition=ready pod \
  --selector=app.kubernetes.io/component=controller \
  --timeout=120s

# 3) 테스트 하기
# - 테스트 웹 서비스 생성
$ kubectl create deployment demo --image=httpd --port=80
$ kubectl expose deployment demo

# - 수신 리소스 생성
$ kubectl create ingress demo-localhost --class=nginx \
  --rule="demo.localdev.me/*=demo:80"

# - 로컬 포트를 수신 컨트롤로 전달
$ kubectl port-forward --namespace=ingress-nginx service/ingress-nginx-controller 8080:80

# - curl를 활용한 테스트
curl --resolve demo.localdev.me:8080:127.0.0.1 http://demo.localdev.me:8080
# - 정상이면 텍스트가 포함된 html응답이 표시

이제 설치는 완료되었고 서비스 운영에 필요한 정책을 추가하려면 Basic usage - host based routing을 참고한다.

참고