Tools for IT/- Kubernetes

CKAD - Use Ingress rules to expose applications

자굿 2024. 4. 10. 23:51

Ingress

  • Ingress는 클러스터 외부에서 클러스터 내부 Service로 HTTP와 HTTPS 경로를 열어준다.
  • Ingress resource에 규칙을 정하여 트래픽을 컨트롤할 수 있다(Load Balance).
  • Ingress는 외부에서 서비스로 접속이 가능한 URL, 로드 밸런스 트래픽, SSL/TLS 종료, 이름 기반의 가상 호스팅 기능을 구성할 수 있다.
  • Ingress Controller는 일반적으로 로드 밸런서(ex. Nginx)를 사용해서 Ingress를 수행할 책임이 있으며, 트래픽을 처리하는데 도움이 되도록 에지 라우터 또는 추가 프런트 엔드를 구성할 수도 있다.
  • Ingress는 임의의 포트 또는 프로토콜을 노출시키지 않는다.
    • HTTP와 HTTPS 이외의 서비스를 인터넷에 노출하려면 보통 Service.Type=NodePort 또는 Service.Type=LoadBalancer 유형의 서비스를 사용한다.

Ingress 작동 방식

  • 외부 요청이 들어오면 Ingress 컨트롤러가 Ingress 규칙에 따라 해당 트래픽을 적절한 서비스로 라우팅하고 서비스는 트래픽을 받아서 클러스터 내의 Pod로 전달

전제조건

  • Ingress Controller가 실행되고 있어야 한다.
    • 예를 들어 Ingress-Nginx Controller가 배포 상태여야 한다.

Ingress resource

  • 클러스터 내에서 트래픽을 어떻게 라우팅할지 정의
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: minimal-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx-example
  rules:
  - http:
      paths:
      - path: /testpath
        pathType: Prefix
        backend:
          service:
            name: test
            port:
              number: 80
  • Ingress object는 유효한 DNS 서브도메인 이름이여야 한다.
    • DNS 서브도메인 이름 규칙
      • 253자를 넘지 말아야 한다.
      • 소문자와 영숫자 - 또는 . 만 포함한다.
      • 영숫자로 시작한다.
      • 영숫자로 끝난다.
  • Ingress object는 위 예시에서 minimal-ingress를 가르킨다.

Ingress Controller

  • Ingress resource에 정의된 규칙을 실제로 구현하는 소프트웨어
    • 여러 ingress controller들이 있지만 ingress-nginx ingress controller가 가장 많이 사용됨.

Ingress rules

  • Ingress 규칙은 외부에서 클러스터 내의 서비스로 트래픽을 어떻게 라우팅할지 정의한다.
  • 이 규칙들은 Ingress 리소스 내의 spec 섹션에 지정되며, 주로 HTTP와 HTTPS 트래픽을 대상으로 한다.
  • Ingress 규칙을 사용하면 단일 IP 주소를 여러 서비스에 매핑하고, URL 경로, 호스트 이름, 또는 둘 모두를 기반으로 트래픽을 라우팅할 수 있다.

Ingress 규칙 구성 요소

  • Host
    • 클라이언트가 지정한 HTTP 헤더의 호스트 부분.
    • 특정 호스트에 대한 요청을 특정 서비스로 라우팅하는 데 사용됨
    • 호스트를 지정하지 않으면 Ingress 컨트롤러는 모든 호스트에 대한 트래픽을 처리
  • Path
    • URL의 Path(ex. /service1)를 사용하여 트래픽을 특정 서비스로 라우팅할 수 있다.
  • Backend
    • 경로와 호스트 규칙이 일치하는 요청을 처리할 서비스.
    • 백엔드는 서비스 이름과 서비스 내의 포트를 지정.

Ingress 규칙 예시

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
spec:
  rules:
  - host: myapp.example.com
    http:
      paths:
      - path: /service1
        pathType: Prefix
        backend:
          service:
            name: service1
            port:
              number: 80
      - path: /service2
        pathType: Prefix
        backend:
          service:
            name: service2
            port:
              number: 80

경로 유형

  • Exact: 경로가 정확히 일치해야 한다.
  • Prefix: 지정된 경로로 시작하는 모든 요청이 일치함.
  • ImplementationSpecific: Ingress 컨트롤러에 따라 경로 매칭 방식이 결정.

추가 설정과 어노테이션

  • Ingress 리소스에 어노테이션을 추가함으로써, Ingress 컨트롤러의 특정 동작을 세부적으로 제어할 수 있다.
  • 예를 들어, URL 재작성, SSL/TLS 종료, CORS 정책 설정 등이 가능함.

Troubleshoot

  • kubectl describe ingress <ingress-name> 명령어를 사용하여 ingress 설정을 확인

Reference

반응형