2 분 소요


이 글에서는 쿠버네티스의 Ingress 과 Ingress Controller 를 소개합니다.


목표

  • Ingress, IngressClass, Ingress Controller 이해하기




소개

IngressCluster의 Service에 대해 외부 접근(일반적으로 HTTP)을 관리하는 API 객체입니다.
Ingress 는 로드 밸런싱, SSL 종료, 호스트 이름 기반 가상 호스팅을 제공할 수 있습니다.


용어

  • Node: 쿠버네티스 워커 머신입니다.
  • Cluster: 쿠버네티스에서 관리하는 컨테이너화된 앱을 실행하는 노드 집합입니다.
  • Edge router: Cluster에 대한 방화벽 정책을 적용하는 라우터입니다.
    클라우드 제공업체에서 관리하는 게이트웨이 또는 물리적 하드웨어일 수 있습니다.
  • Cluster network: 쿠버네티스 네트워킹 모델 에 따라 Cluster 내에서 통신을 가능하게 하는 논리적 또는 물리적 링크 집합입니다
  • Service: Label Selector 를 사용하여 Pod 집합을 식별하는 쿠버네티스 서비스입니다.
    달리 언급되지 않는 한, ServiceCluster network 내에서만 라우팅 가능한 가상 IP를 갖는 것으로 가정합니다.


Ingress 와 관련된 리소스는 Ingress, Ingress Controller, IngressClass 가 있습니다.
각 리소스에 대해 간단히 소개하겠습니다.

Ingress

IngressCluster 외부에서 ClusterService 로의 HTTP 및 HTTPS 경로를 노출합니다.
Ingress 리소스에 정의된 규칙에 의해 트래픽 라우팅이 제어됩니다.

다음은 Ingress 가 모든 트래픽을 하나의 Service 로 전송하는 간단한 예입니다:


Ingress controller

Ingress 리소스가 작동하려면, ClusterIngress Controller 가 반드시 필요합니다.
Ingress Controller 는 쿠버네티스 트래픽 라우팅을 추상화하여 쿠버네티스 서비스와 외부 서비스 간의 가교 역할을 합니다.
즉, 쿠버네티스에서 Ingress 를 구현한 로드 밸런서입니다.

kube-controller-manager 바이너리의 일부로 실행되는 다른 유형의 controller 와 달리, Ingress ControllerCluster와 함께 자동으로 시작되지 않습니다.

쿠버네티스는 프로젝트로 AWS, GCEnginx Ingress controller 를 지원하고 유지 관리합니다.

3rd 파티 프로젝트들은 추가 Controller 페이지를 참고하세요.

Cluster에 여러 개의 Ingress controller 를 배포할 수 있습니다.
이 경우, Ingress class 리소스의 .metadata.nameIngress 객체의 ingressClassName 필드에 지정하면 됩니다.(IngressSpec v1 참조).

Ingress 에 대해 IngressClass 를 지정하지 않고 Cluster에 정확히 하나의 IngressClass 가 기본으로 표시되어 있는 경우, 쿠버네티스는 Cluster의 기본 IngressClassIngress 에 적용합니다.


Ingress class

Ingress 리소스는 IngressClass 객체를 사용하여 특정 Ingress Controller 인스턴스를 지정할 수 있습니다. 이는 동일한 클러스터에서 여러 Ingress Controller 들을 실행할 때 유용합니다.
이 작업은 IngressClassName 필드 또는 ingress.class annotation 을 사용하여 수행할 수 있습니다.

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: external-lb
spec:
  controller: example.com/ingress-controller
  parameters:
    apiGroup: k8s.example.com
    kind: IngressParameters
    name: external-lb

IngressClass.spec.parameters 필드를 사용하면 해당 IngressClass 와 관련된 구성을 제공하는 다른 리소스를 참조할 수 있습니다.

사용 가능한 파라미터의 상세한 타입은 IngressClass.spec.parameters 필드에 명시한 Ingress Controller의 종류에 따라 다릅니다.




결론

다음 그림은 Exposing Kubernetes Applications, Part 3: NGINX Ingress Controller에 나온 NGINX Ingress Controller 의 구현에 대한 아키텍쳐입니다:


Cluster 내부의 Service(주로 HTTP 및 HTTPS) 를 외부에 노출하기 위해,
Ingress 트래픽 라우팅을 제어하기 위한 규칙을 정의하고, Ingress controller 가 로드 밸런서 역할을 합니다.

Cluster 에 여러 Ingress controller 를 사용하는 경우,
Ingress class 로 각 Ingress controller 에 라우팅 룰이 정의된 Ingress 를 지정할 수 있습니다.


이 글에서는 쿠버네티스의 Ingress, IngressClass 그리고 Ingress Controller 를 소개했습니다. 😎




참고자료

쿠버네티스

Exposing Kubernetes Applications

댓글남기기