설명
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가 직접 로드밸런서를 요청하지 않습니다.