Tiller (Helm v2)가 배포된 Kubernetes 환경

지원이 종료된 Helm v2의 Tiller를 제거하고 지원되는 배포 방식으로 이전하세요.

설명

Tiller는 Helm v2의 서버 측 구성요소로, 자신에게 부여된 Kubernetes 권한으로 리소스를 관리합니다. 넓은 권한을 가진 Tiller가 침해되거나 무단으로 사용되면 여러 워크로드에 영향을 줄 수 있습니다.

Helm v2는 지원이 종료되었습니다. Tiller를 사용하지 않는 지원 버전의 Helm으로 이전하고 실제로 남아 있는 서버와 권한을 정리하세요.

잠재적 영향

  • Tiller의 권한 범위에서 워크로드와 클러스터 리소스가 변경될 수 있습니다.
  • 지원이 종료된 구성요소에 대한 보안 수정과 운영 지원을 받을 수 없습니다.

해결 방법

  • 릴리스 정보와 복구 계획을 준비하고 지원되는 Helm 버전으로 배포 관리를 이전하세요.
  • 전환을 확인한 뒤 Tiller Deployment, Service와 전용 계정·RBAC 권한을 제거하세요.
  • 이름이나 라벨만 바꾸지 말고 실제 Tiller 프로세스와 접근 경로가 없어졌는지 확인하세요.

예시

Tiller 배포를 나타내는 기존 예시와 일반 애플리케이션 배포를 비교합니다. tiller-image는 설명용 이미지 이름이며 nginx 버전도 과거 값입니다. 실제 이전 절차나 현재 배포용 이미지 추천은 아닙니다.

변경 전

hcl
resource "kubernetes_deployment" "helm_server" {
  metadata {
    name = "tiller-deploy"
    labels = {
      app = "helm"
    }
  }

  spec {
    replicas = 1

    selector {
      match_labels = {
        app = "helm"
      }
    }

    template {
      metadata {
        labels = {
          app = "helm"
        }
      }

      spec {
        container {
          name  = "helm-server"
          image = "tiller-image"
        }
      }
    }
  }
}

Tiller 서버를 나타내는 구성입니다. 실제 접근 범위는 이미지의 동작과 계정·RBAC 설정 등에 달려 있습니다.

변경 후

hcl
resource "kubernetes_deployment" "app" {
  metadata {
    name = "service-deploy"
    labels = {
      app = "web"
    }
  }

  spec {
    replicas = 1

    selector {
      match_labels = {
        app = "web"
      }
    }

    template {
      metadata {
        labels = {
          app = "web"
        }
      }

      spec {
        container {
          name  = "web"
          image = "nginx:1.7.8"
        }
      }
    }
  }
}

일반 애플리케이션 예시입니다. 이 리소스를 추가하거나 이름을 바꾸는 것만으로 기존 Tiller가 제거되지는 않으므로 기존 서버와 관련 권한을 별도로 정리하세요.

참조