반응형
250x250
Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

DevOps Tasks

Kubernetes Service Type 과 Ingress Controllers 본문

Kubernetes

Kubernetes Service Type 과 Ingress Controllers

데밥스 2024. 8. 4. 20:16
728x90
반응형

ClusterIP

  • ClusterIP는 클러스터 안에 있는 다른 Pod들이 접근할 수 있도록 IP를 할당한다.
  • 내부 IP만을 할당하기 때문에 클러스터 외부에서는 접근이 불가능하다.

NodePort

  • NodePort는 고정 포트로 Pod이 배포된 노드들의 IP에 서비스를 노출시킨다.
  • NodePort 서비스는 ClusterIP 서비스를 자동으로 생성한다.
  • NodePort는 노드가 사라졌을 때 자동으로 다른 노드를 통해 접근이 불가능하다.
    • Target Group 이 없다.

LoadBalancer

  • LoadBalancer는 서비스를 외부에 노출시키는 표준 방법이다.
  • LoadBalancer는 따로 물리 장비가 필요한데, 클라우드 컴퓨팅 환경에서는 벤더사가 제공하는 LoadBalancer ( ALB )를 사용하면 된다.

Ingress

  • Ingress는 쿠버네티스의 서비스 종류 중 하나가 아닌, 서비스들을 묶는 하나의 스마트 라우터 역할을 수행한다.
  • 즉 하나의 LoadBalancer 에서 여러 서비스를 노출할 수 없는 한계를 해결하는 것이 Ingress 이다.

 

Ingress 란?

일반적으로 네트워크 트래픽은 Ingress , Egress 로 나뉜다.

Ingress 란 외부에서 내부로 들어오는 트래픽을 의미하고 Egress 는 반대로 내부에서 외부로 나가는 트래픽을 의미한다.

클러스터 내의 서비스에 대해서 외부 접근을 관리하는 API 오브젝트이고 일반적으로 HTTP를 관리한다.

URL을 통해서 https, http 접근 경로를 만들어서 외부 트래픽이 내부의 어디에 도달해야 하는지에 대해서 정의된 규칙의 모음이다.

 

 

Ingress-managed load balancer는 CNCF 3rd Party 프로젝트들과 관련이 있으며 kubernetes는AWS, GCE, NGINX Ingress Controller를 지원하고 유지한다.

 

 

Service의 Type 은 ClusterIP , NodePort , LoadBalancer , ExternalName ExternalName으로 나뉘어 있다.

 


 

Prerequisites

  • Ingress 리소스만 생성한다면 효과가 없고 Ingress Controller까지 있어야 충족할 수 있다.
  • 모든  Ingress Controller는 각기 다른 방식으로 동작하고 애플리케이션에 맞는 사양 컨트롤러를 선택하여 배포해야 한다.

 

IngressClass

  • Ingress는 서로 다른 컨트롤러에 의해서 구현될 수 있어 종종 다른 구성으로 구현될 수 있다.
  •  Ingress에서는 클래스를 구현해야 하는 컨트롤러 이름을 포함하여 추가 구성이 포함된 IngressClass 리소스에 대한 참조 클래스를 지정해야 한다.

 

IngressClass scope

  • Ingress Controller의 종류에 따라서 클러스터 범위로 설정한 파라미터의 사용이 가능할 수 있고, 또는 한 네임스페이스에서만 사용 가능할 수 있다.

 

IngressClassParams

  • IngressClassParams는 IngressClass의 매개변수 필드와 함께 사용할 수 있는 AWS Load Balancer Controller 전용 CRD (Custom Resource Definitions)이다.

 

Ingress Rules

  • Ingress 규칙은 크게 Path Type과 Host Name 형식으로 나뉠 수 있다.

 

Path Type

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-resource-backend
spec:
  defaultBackend:
    resource:
      apiGroup: k8s.example.com
      kind: StorageBucket
      name: static-assets
  rules:
    - http:
        paths:
          - path: /icons	          
            pathType: ImplementationSpecific # ImplementationSpecific, Exact, Prefix
            backend:
              resource:
                apiGroup: k8s.example.com
                kind: StorageBucket
                name: icon-assets

Ingress의 각 Path 에는 각 pathType이 있어야 한다.  pathType 은 필수값이며 포함하지 않는다면 유효성 검사에 실패하게 된다. 지원하고 있는 pathType 은 총 3 가지이다.

 

ImplementationSpecific

  • 해당 경로 유형의 일치 여부는 IngressClass 에 따라 달라진다. 이를 구현할 때 별도의 pathType 으로 처리하거나, Prefix 또는 Exact 경로 유형과 같이 동일하게 처리할 수 있다.

Exact

  • URL 경로의 대소문자를 엄격하게 일치시킨다.

Prefix

  • URL 경로의 접두사를 / 를 기준으로 분리한 값과 일치시킨다.
  • 일치는 대소문자를 구분하고, 요소별로 경로 요소에 대해 수행한다.

 


 

Host Name

호스트는 정확한 일치 (foo.bar.com) 나 와일드카드 (*. foo.com) 일 수 있다. 정확한 일치를 위해서는 HTTP host헤더가 host 필드와 일치해야 한다. 와일드카드 일치를 위해서는 HTTP host 헤더가 와일드카드 규칙의 접미사와 동일해야 한다.

 

호스트 호스트 헤더 일치 여부
*.foo.com bar.foo.com 공유 접미사를 기반으로 일치함
*.foo.com baz.bar.foo.com 일치하지 않음, 와일드카드는 단일 DNS 레이블만 포함함
*.foo.com foo.com 일치하지 않음, 와일드카드는 단일 DNS 레이블만 포함함
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-wildcard-host
spec:
  rules:
  - host: "foo.bar.com"
    http:
      paths:
      - pathType: Prefix
        path: "/bar"
        backend:
          service:
            name: service1
            port:
              number: 80
  - host: "*.foo.com"
    http:
      paths:
      - pathType: Prefix
        path: "/foo"
        backend:
          service:
            name: service2
            port:
              number: 80

 

728x90
반응형