Kubernetes LoadBalancer 서비스 공개 범위 점검

로드밸런서의 실제 공개 범위가 서비스 요구사항에 맞는지 확인하세요.

설명

Service의 type을 LoadBalancer로 설정하면 지원되는 환경에서 로드밸런서를 통해 서비스를 노출할 수 있습니다. 인터넷 공개 여부는 공급자·컨트롤러와 내부 로드밸런서 설정에 따라 달라집니다. 외부 접근이 필요하지 않은 서비스를 공용 엔드포인트로 제공하면 원치 않는 접속 시도가 늘어날 수 있습니다.

잠재적 영향

  • 인증이나 애플리케이션에 취약점이 있으면 외부 접속을 통해 데이터가 노출될 수 있습니다.
  • 불필요한 외부 엔드포인트가 공격 표면과 운영 비용을 늘릴 수 있습니다.

해결 방법

  • 클러스터 내부에서만 필요한 서비스는 ClusterIP를 사용하고, 사설 네트워크의 로드밸런서가 필요하면 해당 공급자의 내부 구성을 적용하세요.
  • 공개가 필요한 서비스는 출발지 범위와 인증·TLS를 제한·구성하고 실제 할당된 엔드포인트를 확인하세요. Ingress 등 다른 공개 경로도 함께 검토하세요.

예시

Service 유형만 비교하는 기존 예제입니다. selector와 일치하는 워크로드는 별도이며, ClusterIP로 변경해도 다른 Ingress나 프록시가 해당 서비스를 공개할 수 있습니다.

변경 전

hcl
resource "kubernetes_service" "example" {
  metadata {
    name = "terraform-example"
  }

  spec {
    selector = {
      app = "my-app"
    }

    port {
      port        = 80
      target_port = 8080
    }

    type = "LoadBalancer"
  }
}

변경 후

hcl
resource "kubernetes_service" "example" {
  metadata {
    name = "terraform-example"
  }

  spec {
    selector = {
      app = "my-app"
    }

    port {
      port        = 80
      target_port = 8080
    }

    type = "ClusterIP"
  }
}

설명:

  • 변경 전: LoadBalancer 유형을 사용합니다. 실제 공용·내부 엔드포인트는 환경 설정에 따라 달라집니다.
  • 변경 후: ClusterIP 유형으로 바꿉니다. 이 Service가 직접 로드밸런서를 요청하지 않습니다.

참조