Cloud Console からクラスタにログインする

このページでは、anthos.googleapis.com API が有効になっている Anthos のお客様の Google Cloud Console から、登録済み Kubernetes クラスタにログインする方法について説明します。

概要

署名なしトークンを使用して、Google Cloud Console から登録済みクラスタにログインできます。Kubernetes 認証で指定された、さまざまな種類の署名なしトークンがサポートされています。最も簡単な方法は、クラスタ内に Kubernetes サービス アカウント(KSA)を作成し、その署名なしトークンを使用してログインすることです。

クラスタにログインするすべてのアカウントは、クラスタ内に少なくとも次の Kubernetes RBAC ロールを保持する必要があります。

始める前に

クラスタごとに一度、次の手順を完了しておく必要があります。

クラスタを登録する

Cloud Console を使用してログインできるようにするには、Google Cloud にクラスタを登録する必要があります。クラスタを登録すると、Connect Agent がデプロイされます。これは、クラスタと Google Cloud 間の長期接続を確立する Kubernetes Deployment リソースです。Connect Agent によってクラスタにログインできるようになります。

cloud-console-reader のロールベースのアクセス制御(RBAC)のロールを作成して適用する

コンソールでクラスタ リソースを表示するには、そのための適切な権限が必要です。この一連の権限を定義するには、クラスタに ClusterRole RBAC リソース(cloud-console-reader)を作成します。cloud-console-reader は、クラスタのノード、永続ボリューム、ストレージ クラスに対する getlistwatch の権限をユーザーに付与し、それによってユーザーはこれらのリソースに関する詳細情報を表示できます。その後、次のセクションの説明のとおり、この ClusterRole をユーザーのサービス アカウントにバインドできます。

  1. cloud-console-reader ClusterRole を作成し、次のコマンドを使用して適用します。

    cat <<EOF > cloud-console-reader.yaml
    kind: ClusterRole
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: cloud-console-reader
    rules:
    - apiGroups: [""]
      resources: ["nodes", "persistentvolumes"]
      verbs: ["get", "list", "watch"]
    - apiGroups: ["storage.k8s.io"]
      resources: ["storageclasses"]
      verbs: ["get", "list", "watch"]
    EOF
    kubectl apply -f cloud-console-reader.yaml
    

設定

ユーザーまたはクラスタ管理者は、クラスタにログインするユーザーごとにサービス アカウントを作成する必要があります。署名なしトークンを使用する場合は、パスワードを使用するのと同様に各ユーザーにパスワードが必要になります。KSA の署名なしトークンを使用してログインすると、すべてのオペレーションが KSA として実行され、KSA が保持する RBAC ロールによって制限されます。

KSA は、クラスタ内に少なくとも次の RBAC ロールを保持する必要があります。

KSA の作成と承認

KSA を作成して権限をバインドするには、次の手順に沿って操作します。

  1. KSA および ClusterRoleBinding リソースを作成して view および cloud-console-reader Kubernetes RBAC ClusterRoles を KSA にバインドします。

    KSA_NAME=[KSA_NAME]
    kubectl create serviceaccount ${KSA_NAME}
    kubectl create clusterrolebinding [VIEW_BINDING_NAME] \
    --clusterrole view --serviceaccount default:${KSA_NAME}
    kubectl create clusterrolebinding [CLOUD_CONSOLE_READER_BINDING_NAME] \
    --clusterrole cloud-console-reader --serviceaccount default:${KSA_NAME}
    
    

    ここで

    • [KSA_NAME] は KSA に選択した名前です。
    • [VIEW_BINDING_NAME] は、view ClusterRoleBinding リソースに付ける名前です。任意の名前を付けることができますが、KSA にちなんだ名前を付けるのが最も簡単です。
    • [CLOUD_CONSOLE_READER_BINDING_NAME] は、cloud-console-reader ClusterRoleBinding リソースに付ける名前です。任意の名前を付けることもできます。
  2. サービス アカウントに必要な権限に応じて、追加のロールを KSA にバインドします。一部のオプションについては、Kubernetes のデフォルトのロールをご覧ください。

    たとえば、Cloud Marketplace から Kubernetes アプリケーションをデプロイする場合は、cluster-admin ロールを KSA にバインドする必要があります。

    kubectl create clusterrolebinding [BINDING_NAME] \
    --clusterrole cluster-admin --serviceaccount default:[KSA_NAME]
    
    

    [BINDING_NAME] は、サービス アカウントにバインドされているクラスタロールの名前です。

他のアカウントの承認

クラスタにアクセスするすべてのユーザーまたはサービス アカウントに ClusterRoleBinding リソースを作成して、view のロールと cloud-console-reader のロールをアカウントにバインドする必要があります。

  1. viewcloud-console-reader の ClusterRole をバインドするには:

    ACCOUNT_NAME=[ACCOUNT_NAME]
    kubectl create clusterrolebinding [VIEW_BINDING_NAME] \
    --clusterrole view --serviceaccount default:${ACCOUNT_NAME}
    kubectl create clusterrolebinding [CLOUD_CONSOLE_READER_BINDING_NAME] \
    --clusterrole cloud-console-reader --serviceaccount default:${ACCOUNT_NAME}
    
    

    ここで

    • [VIEW_BINDING_NAME] は、view ClusterRoleBinding リソースに付ける名前です。任意の名前を付けることができますが、ユーザーまたはサービス アカウントにちなんだ名前を付けるのが最も簡単です。
    • [CLOUD_CONSOLE_READER_BINDING_NAME] は、view ClusterRoleBinding リソースに付ける名前です。任意の名前を付けることもできます。
    • [ACCOUNT_NAME] は Kubernetes サービス アカウントです。
  2. アカウントに付与するアクセス権に応じて、追加のロールをバインドします。一部のオプションについては、Kubernetes のデフォルトのロールをご覧ください。

    たとえば、cluster-admin ロールをバインドするには、次のようにします。

    kubectl create clusterrolebinding [BINDING_NAME] \
    --clusterrole cluster-admin --serviceaccount default:[ACCOUNT_NAME]
    
    

    [BINDING_NAME] は、サービス アカウントにバインドされているクラスタロールの名前です。

KSA の署名なしトークンの取得

KSA の署名なしトークンを取得するには、次のコマンドを実行します。

SECRET_NAME=$(kubectl get serviceaccount [KSA_NAME] -o jsonpath='{$.secrets[0].name}')
kubectl get secret ${SECRET_NAME} -o jsonpath='{$.data.token}' | base64 --decode

ここで、[KSA_NAME] は KSA に付ける名前です。

このコマンドの出力のトークンをコピーし、次のセクションで使用できるよう保存します。

クラスタへのログイン

クラスタにログインするには、次の手順に沿って操作します。

  1. Cloud Console の GKE メニューに移動します。

    GKE メニューに移動

  2. クラスタのリストで、登録済みクラスタの横にある [ログイン] ボタンをクリックします。

  3. ログインの方法を選択します。

    1. KSA トークンを使用してログインするには、[トークン] を選択して、[トークン] フィールドに KSA の署名なしトークンを入力し、[ログイン] をクリックします。
    2. 基本認証を使用している場合は、[基本認証] を選択して、[ユーザー名] フィールドと [パスワード] フィールドに入力し、[ログイン] をクリックします。
    3. OpenID Connect(OIDC)を使用している場合は、[OpenID Connect] を選択して、[ログイン] をクリックします。

認証に成功すると、クラスタを検査して、ノードの詳細を取得できます。

次のステップ