• [Kubernetes Workloads] 파드 네트워크와 서비스(Service), 인그레스(ingress)
    아키텍처 공부/Cloud 2022. 10. 15. 02:43
    반응형

    쿠버네티스 네트워크

     쿠버네티스의 네트워킹 모델은 IP 주소에 크게 의존한다. 서비스, 파드, 컨테이너 및 노드는 IP 주소와 포트를 사용하여 통신한다. 각 파드에는 네트워크의 호스트와 마찬가지로 고유한 IP 주소가 있다. 노드에서 파드는 노드의 루트 네트워크 네임스페이스를 통해 서로 연결되므로, 파드가 서로를 찾고 연결할 수 있다. 클러스터에서 각 파드는 유니크한 IP 주소를 갖는다.

     

    서비스(Service)

     쿠버네티스의 애플리케이션은 특정 파드에 직접 연결하는 대신 쿠버네티스 오브젝트인 서비스(Service)에 의존하여 적절한 파드를 찾고 트래픽을 전달한다. 서비스가 레이블 셀렉터를 이용해 트래픽을 전달할 파드들을 선택한다.

     

     어떤 이유로든 파드가 다시 스케줄되면 파드에 새 IP 주소가 할당된다. 이러한 예기치 않은 IP 주소 변경으로 대규모 환경에서는 심각한 서비스 중단이 발생할 수 있다. 쿠버네티스는 kube-dns 서버의 IP를 사용하여 모든 파드의 DNS 이름을 확인하도록 구성된다. 기본적으로 클라이언트 파드의 DNS 검색 목록에는 파드의 자체 네임스페이스와 클러스터의 기본 도메인이 포함된다. 예를 들어, 이름이 lab이고, 네임스페이스가 demo인 서비스(Service)가 있다. 파드는 이 서비스가 파드와 동일한 네임스페이스에 있는 경우 lab이라는 짧은 이름을 사용하여 DNS를 찾아 서비스의 IP 주소를 확인할 수 있다. 다른 네임스페이스의 파드는 <서비스명>.<네임스페이스명>형식을 사용한 도메인 이름 lab.demo을 사용하여 서비스와 통신 할 수 있다.

     

    서비스 유형

     서비스에는 ClusterIP, NodePort 및 LoadBalancer의 세 가지 주요 유형이 있다. 이 유형들은 단계적으로 각 유형의 기반이 된다.

        ClusterIP

         ClusterIP 서비스는 고정 IP 주소를 가지며, 클러스터 내에서 로드밸런서로 작동한다. 그러나 ClusterIP 서비스는 클러스터 외부의 리소스에서 액세스할 수 없다. 다른 파드는 서비스와 통신할 때 이 ClusterIP를 대상 IP 주소로 사용한다. 

     

        NodePort

         ClusterIP 서비스 설정 외에도 모든 노드에 특정 포트가 노출된다. 이 포트는 NodePort라고도 하며 30,000~32,767 범위에서 자동으로 할당된다. NodePort를 이용하면 클러스터 외부의 리소스에서 액세스가 가능하다. NodePort는 ClusterIP 서비스를 기반으로 구축되므로, NodePort 서비스를 생성하면 이 과정에서 ClusterIP 서비스가 자동으로 생성된다.

     

        LoadBalancer

         개념적으로 LoadBalancer 서비스 유형은 ClusterIP 서비스를 기반으로 하며, 클러스터 외부의 리소스에 서비스를 노출하는 데 사용할 수 있다. GKE에서 LoadBalancer 서비스는 Google Cloud의 네트워크 로드밸런서를 사용하여 구현된다. 클라이언트 트래픽은 Google Cloud 네트워크 로드밸런서의 외부 IP 주소로 전달되고, 다음으로 이 서비스의 노드로 트래픽을 전달한다. 노드는 해당 트래픽을 내부 LoadBalancer 서비스로 전달하고 다음으로 요청을 파드 중 하나로 전달한다. LoadBalancer 서비스를 생성하면 이 과정에서 ClusterIP, NodePort 서비스가 자동으로 생성된다.

     

     

    용어 구분:

    • 서비스 타입: loadBalancer 서비스
    • 부하분산: 네트워크 로드밸런서

     

    인그레스(Ingress)

     클러스터로 트래픽을 전달하는 가장 강력한 도구 중 하나인 인그레스(Ingress)에 대해 알아보자. 인그레스는 서비스보다 한 계층 위에서 작동한다. 인그레스는 서비스 또는 서비스 유형이 아니고, 클래스터 내의 서비스 집합으로 외부 인바운드 연결을 안내는 규칙모음이다. GKE에서 쿠버네티스 인그레스 리소스는 Cloud Load Balancing을 사용하여 구현된다. 인그레스는 서비스 구성을 기반으로 NodePort, LoadBalancer 서비스에 트래픽을 전달할 수 있다. 인그레스를 사용해도 LoadBalancer 서비스는 여전히 이중 홉 문제(double-hop problem)를 겪을 수 있다. 서비스 매니페스트의 'Local' 외부 트래픽 정책을 사용하여 이 문제를 완화할 수 있다.

     

    참고:

    https://kubernetes.io/ko/docs/concepts/services-networking/dns-pod-service/#a-aaaa-%EB%A0%88%EC%BD%94%EB%93%9C

    https://kubernetes.io/ko/docs/concepts/services-networking/service/

    https://kubernetes.io/ko/docs/concepts/services-networking/ingress/

     

     

    반응형

    댓글

Designed by Tistory.