[쿠버네티스] - Ingress

chancehee·2023년 12월 31일
0

쿠버네티스

목록 보기
14/17
post-thumbnail

[ 개요 ]

쿠버네티스에서 Pod를 외부로 노출시키기 위해서 NodePort Service를 사용할 수 있다.
그런데, NodePort Service는 Port를 중복 사용할 수 없어서 1개의 NodePort에 1개의 Deployment만 적용이 된다.

그렇다면 여러 개의 Deployment가 있을 때 그 수만큼 NodePort Service를 구동해야 할까?

쿠버네티스는 이런 경우에 Ingress를 사용할 수 있다.

[ Ingress란? ]

  • 클러스터 내의 서비스에 대한 외부 접근을 관리하는 API 오브젝트
    (클러스터 외부에서 클러스터 내부 서비스로 HTTP, HTTPS 경로를 노출한다.)
  • 즉, Ingress 하나만 외부로 노출시키고 별도의 추가 서비스를 노출시키지 않고도 여러 애플리케이션으로 라우팅 시킬 수 있다.
  • 트래픽에 대한 L4/L7 로드밸런서보안 인증서를 처리하는 기능 제공

[ Ingress 구성 ]

  1. Ingress Controller
  2. Ingress Resource

Ingress Resource는 HOST나 Path 기반의 라우팅 룰을 정의하는 파일이고, Ingress Controller는 Ingress Resource에서 정의된 라우팅 룰을 반영하는 주체이다.

다양한 Ingress Controller가 있지만, 쿠버네티스에서 프로젝트로 지원하는 NGINX Ingress Controller를 대표적으로 살펴보겠다.

[ Ingress vs Service ]

둘다 Pod외부로 노출시키는 역할은 같다.

하지만 Ingress를 사용하는 것이 장점이 더 많다.
1. 하나의 로드밸런서만으로도 서빙 가능
2. Access Log를 하나의 Ingress에서 수집 가능

[ 실습 ]

필자는 Path 기반의 라우팅을 실습해봤다.

1. Ingress Controller 설치

아래 사이트에 접속 -> YAML 파일 다운로드 -> 쿠버네티스 클러스터 적용

https://github.com/kubernetes/ingress-nginx/blob/main/README.md#readme

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/baremetal/deploy.yaml

2. Ingress Controller 설치 확인

kubectl get pods -n ingress-nginx
다운받은 deploy.yaml을 살펴보면, namespace가 ingress-nginx로 설정되어 있다.

3. Ingress Resource 적용

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx-example
  rules:
    - host: [도메인 이름]
      http:
        paths:
          - path: /aa
            pathType: Prefix
            backend:
          	  service:
            	name: app1 // 쿠버네티스 DNS에 등록된 서비스 이름
                port: 
                  number: 8001
          - path: /bb
            pathType: Prefix
            backend:
              service:
                name: app2 // 쿠버네티스 DNS에 등록된 서비스 이름
                port:
                  number: 8002
  • Ingress 오브젝트의 이름은 유효한 DNS 서브도메인의 이름이어야 한다.
  • Ingress Resource는 HTTP(S) 트래픽을 지시하는 규칙만 지원한다.

4. Ingress 상세 정보 확인

kubectl describe ingresses.networking.k8s.io --namespace=ingress-nginx [Ingress 이름]

참고 자료

0개의 댓글