ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CKAD - Use Ingress rules to expose applications
    Tools for IT/- Kubernetes 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

    반응형

    댓글

Designed by Tistory.