Amazon EKS
ユーザーガイド

Amazon EKS での Helm の使用

Kubernetes 用の helm パッケージマネージャーを使用すると、Kubernetes クラスターにアプリケーションをインストールし、管理できます。詳細については、Helm のドキュメントを参照してください。このトピックは、helm バイナリと tiller バイナリをローカルにインストールして実行する際に役立ちます。これにより、ローカルシステムで helm CLI を使用してチャートをインストールおよび管理することができます。

サーバー側の tiller コンポーネントをクラスター内で実行することはできますが (多くの一般的な Helm のインストール記事でこのオプションのみが提供されています)、このトピックの説明に従って以下の方法で tiller を名前空間でローカルに実行すると、クラスターの悪用のリスクが軽減されます。

  • クラスター上で tiller サーバーを実行すると、それ自体の Kubernetes ID および関連付けられているアクセス許可セット (多くの場合、完全な Kubernetes 管理者権限が付与されている) を取得できます。これにより、特権エスカレーションの可能性が開かれ、tiller サーバーへのネットワークアクセス許可を持つ非特権 Kubernetes ユーザーが、チャートをインストールすることによって追加の Kubernetes 権限を取得することができます。

  • ローカルマシンで tiller サーバーを実行すると、ユーザーはクラスターの tiller サーバーのアクセス許可 (完全な管理者アクセス権限など) を継承せず、代わりに tiller がエンドユーザーの Kubernetes アクセス許可を継承します。

  • 独自の名前空間で tiller を実行すると、その名前空間へのアクセスをコントロールすることで、tiller サーバーが保存する Kubernetes シークレットへのアクセスをコントロールできます。

重要

Amazon EKS クラスターに Helm チャートをインストールするには、あらかじめ Amazon EKS で動作するように kubectl を設定しておく必要があります。この設定をまだ行っていない場合は、続行する前に aws-iam-authenticator のインストールおよび kubeconfig を Amazon EKS 用に作成します。を参照してください。次のコマンドがクラスターに対して成功した場合は、正しく設定されています。

kubectl get svc

ローカルシステムに helm バイナリと tiller バイナリをインストールするには

    • macOS で Homebrew を使用している場合は、次のコマンドを使用してバイナリをインストールします。

      brew install kubernetes-helm
    • Windows で Chocolatey を使用している場合は、次のコマンドを使用してバイナリをインストールします。

      choco install kubernetes-helm
    • それ以外の場合は、Helm のドキュメントの Installing the Helm Client (Helm クライアントのインストール) を参照してください。

      重要

      Helm のドキュメントに従って tiller サーバー側のコンポーネントをインストールしないでください (Installing Tiller (Tiller のインストール) 手順に進む前に操作を停止してください)。このトピックでは、tiller を独自の名前空間でローカルに実行する方法について説明します。これにより、クラスターが悪用されるリスクが軽減されます。

  1. PATH で新しいバイナリを取得するため、現在のターミナルウィンドウを閉じて新しいターミナルウィンドウを開きます。

helmtiller をローカルで実行するには

  1. 次のコマンドで tiller という名前空間を作成します。

    kubectl create namespace tiller

    注記

    デフォルトでは、tiller はシークレットを kube-system 名前空間に保存します。tiller 用の名前空間を作成し、実行時にその名前空間を指定すると、tiller がクラスターに保存する Helm チャートのシークレットを表示する権限を付与されたユーザーに対して、より特定的なアクセスコントロールが与えられます。

  2. tiller サーバー用の新しいターミナルウィンドウを開きます。以下の手順では、tiller サーバー用のターミナルウィンドウと、helm クライアント用の別のウィンドウが必要です。

    重要

    tiller サーバーに使用するシステムの唯一のアクティブユーザーである (ローカルノート PC やデスクトップにログインしているのが自分だけである) ことを確認する必要があります。そうでない場合は、システム上のあらゆるユーザーが同じ Kubernetes アクセス許可を使用して tiller サーバーにリクエストを送信することができます。Linux および macOS システムの場合は、次のコマンドで現在のユーザーを確認できます。

    users

    出力:

    ericn

    上記の例では、システム上に ericn という名前のユーザーしかいないため、安全に続行できます。複数のユーザーがシステムにログインしている場合は、自分が唯一のアクティブユーザーになるように、別のシステムを使用するか、この手順で Amazon EC2 インスタンスを起動することを検討する必要があります。

  3. tiller サーバーターミナルで、TILLER_NAMESPACE 環境変数を tiller に設定してから、tiller サーバーを起動します。

    1. TILLER_NAMESPACE 環境変数を tiller に設定します。

      • macOS および Linux の場合:

        export TILLER_NAMESPACE=tiller
      • Windows (PowerShell) の場合:

        $env:TILLER_NAMESPACE = 'tiller'
    2. tiller サーバーを起動します。

      • macOS および Linux の場合:

        tiller -listen=localhost:44134 -storage=secret -logtostderr
      • Windows (PowerShell) の場合:

        tiller -listen=localhost:44134 -storage=secret

      注記

      デフォルトでは、tiller はリリース情報を ConfigMaps に保存します。ただし、最新の Helm のドキュメントでは、-storage=secret フラグを使用してこの情報を Kubernetes シークレットに保存することが推奨されています。詳細については、「Securing your Helm Installation (Helm インストールの保護)」の「Tiller's Release Information (Tiller のリリース情報)」を参照してください。-listen=localhost:44134 フラグは、tiller サーバーがローカルマシンからのリクエストのみを受け付けるように設定します (これにより、未許可のネットワークユーザーがローカル tiller プロセスにアクセスするのを防ぎます)。

  4. helm クライアントターミナルウィンドウで、HELM_HOST 環境変数を :44134 に設定します。

    • macOS および Linux の場合:

      export HELM_HOST=:44134
    • Windows (PowerShell) の場合:

      $env:HELM_HOST = ':44134'
  5. helm クライアントターミナルウィンドウで、helm クライアントを初期化します。

    helm init --client-only
  6. helm クライアントターミナルウィンドウで、helmtiller サーバーと正しく通信していることを確認します。

    helm repo update

    出力:

    Hang tight while we grab the latest from your chart repositories... ...Skip local chart repository ...Successfully got an update from the "stable" chart repository Update Complete. ⎈ Happy Helming!⎈
  7. この時点で、helm クライアントターミナルウィンドウ (helm install chart_name など) で任意の helm コマンドを実行して、クラスター内の Helm チャートをインストール、変更、削除、またはクエリすることができます。helm コマンドを実行すると、サーバーのターミナルウィンドウでそれらのコマンドの tiller ログを追跡できます。詳細については、Helm のドキュメントの Helm Commands (Helm コマンド)Charts (チャート) を参照してください。

    helm を試用しているだけで、特定のチャートをインストールしない場合は、Helm の Quickstart Guide (クイックスタートガイド)Install an Example Chart (サンプルチャートのインストール) を参照してください。

  8. 終了したら、helm クライアントと tiller サーバーのターミナルウィンドウを閉じます。クラスターで helm を使用するには、この手順を繰り返します。