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 は削除されないため、古いサーバーと関連権限を別途整理してください。

参考資料