Kubernetes ダッシュボード用のサービスアカウントとクラスターロールバインディングの作成方法

KubernetesBeginner
オンラインで実践に進む

はじめに

Kubernetes のサービスアカウント (Service Account) は、Kubernetes クラスタ内で実行されるアプリケーションの ID とアクセス制御を管理する上で重要なコンポーネントです。このチュートリアルでは、Kubernetes のサービスアカウント (Service Account) の理解、サービスアカウントを使用した Kubernetes ダッシュボードの設定、およびダッシュボードに必要なアクセス許可を付与する方法を説明します。

Kubernetes のサービスアカウント (Service Account) の理解

Kubernetes のサービスアカウント (Service Account) は、Kubernetes クラスタ内で実行されるアプリケーションの ID とアクセス制御を管理する上で重要なコンポーネントです。これらは、ポッドが Kubernetes API サーバーとのやり取りを認証および承認する方法を提供し、安全な通信とリソースへのアクセスを可能にします。

Kubernetes のサービスアカウント (Service Account) とは何か?

Kubernetes のサービスアカウント (Service Account) はポッドに関連付けられ、それらのポッド内で実行されるプロセスに ID を提供します。これらは、ポッドと Kubernetes API サーバーとのやり取りを認証および承認するために使用されます。Kubernetes クラスタ内の各ネームスペースにはデフォルトのサービスアカウントがあり、特定のアプリケーション要件を満たすためにカスタムのサービスアカウントを作成することもできます。

なぜ Kubernetes のサービスアカウント (Service Account) を使用するのか?

Kubernetes のサービスアカウント (Service Account) はいくつかの重要な目的を果たします。

  1. API アクセス: サービスアカウント (Service Account) は、ポッドに Kubernetes API にアクセスするために必要なアクセス許可を付与し、リソースの読み取り、作成、または変更などのさまざまな操作を実行できるようにします。
  2. 安全な通信: サービスアカウント (Service Account) はポッドを認証するために使用され、承認されたポッドのみが Kubernetes API サーバーとやり取りできることを保証します。
  3. リソースの分離: 異なるアプリケーションまたはコンポーネントに異なるサービスアカウント (Service Account) を使用することで、Kubernetes クラスタ内でリソースの分離と細かいアクセス制御を実現できます。

Kubernetes のサービスアカウント (Service Account) の設定

Kubernetes のサービスアカウント (Service Account) を設定するには、次の手順に従うことができます。

  1. サービスアカウント (Service Account) の作成: kubectl create serviceaccount コマンドを使用して新しいサービスアカウントを作成できます。たとえば、"default" ネームスペースに "my-app-sa" という名前のサービスアカウントを作成するには、次のコマンドを実行します。
kubectl create serviceaccount my-app-sa -n default
  1. ポッドにサービスアカウント (Service Account) を割り当てる: ポッドを作成するときに、ポッドが使用するサービスアカウントを指定できます。これは、ポッドの YAML 構成ファイルの spec.serviceAccountName フィールドで行います。
apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  serviceAccountName: my-app-sa
  containers:
    - name: my-app
      image: my-app:v1
  1. サービスアカウント (Service Account) にアクセス許可を付与する: デフォルトでは、サービスアカウントには制限されたアクセス許可しかありません。サービスアカウントに必要なアクセス許可を付与するには、Role または ClusterRole を作成し、RoleBinding または ClusterRoleBinding を使用してサービスアカウントにバインドすることができます。

必要な具体的なアクセス許可は、アプリケーションが Kubernetes クラスタ内で実行する必要があるアクションによって異なります。

サービスアカウント (Service Account) を使用した Kubernetes ダッシュボードの設定

Kubernetes ダッシュボードは、Kubernetes クラスタを管理できる強力なウェブベースの UI です。ダッシュボードをセキュアにし、それへのアクセスを制御するには、Kubernetes のサービスアカウント (Service Account) を使用するように設定できます。

Kubernetes ダッシュボード用のサービスアカウント (Service Account) の作成

  1. Kubernetes ダッシュボード用の新しいサービスアカウントを作成します。
kubectl create serviceaccount dashboard-sa -n kubernetes-dashboard
  1. サービスアカウントの作成を確認します。
kubectl get serviceaccounts -n kubernetes-dashboard

ダッシュボードのサービスアカウント (Service Account) にアクセス許可を付与する

  1. ダッシュボードのサービスアカウントに必要なアクセス許可を付与するための ClusterRoleBinding を作成します。
kubectl create clusterrolebinding dashboard-sa-cluster-admin-binding --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-sa

これにより、kubernetes-dashboard ネームスペース内の dashboard-sa サービスアカウントに cluster-admin という ClusterRole がバインドされ、クラスタに対する完全な管理アクセス権が付与されます。

Kubernetes ダッシュボードをサービスアカウント (Service Account) を使用するように設定する

  1. Kubernetes ダッシュボードのデプロイメントを編集して、dashboard-sa サービスアカウントを使用するようにします。
kubectl edit deployment kubernetes-dashboard -n kubernetes-dashboard

spec.template.spec.serviceAccountName フィールドを dashboard-sa に更新します。

  1. 変更を有効にするために、Kubernetes ダッシュボードのポッドを再起動します。
kubectl delete pod -n kubernetes-dashboard -l app.kubernetes.io/name=kubernetes-dashboard

これで、Kubernetes ダッシュボードは dashboard-sa サービスアカウントを使用して Kubernetes API サーバーとやり取りし、クラスタのリソースへの安全なアクセスが提供されます。

Kubernetes ダッシュボードにアクセス許可を付与する

Kubernetes ダッシュボードに必要なアクセス許可を付与するには、Kubernetes のロールベースアクセス制御 (Role-Based Access Control, RBAC) を使用して、適切なロールとアクセス許可を定義して割り当てることができます。

Kubernetes RBAC の理解

Kubernetes RBAC は、Kubernetes リソースへのアクセスを制御する強力なメカニズムです。特定のアクセス許可を持つロールを定義し、それらのロールをユーザー、グループ、またはサービスアカウントに割り当てることができます。

主な RBAC コンポーネントは次のとおりです。

  • ロール (Roles): 主体に付与できる一連のアクセス許可を定義します。
  • クラスターロール (ClusterRoles): ロール (Roles) と似ていますが、クラスタ全体に適用されます。
  • ロールバインディング (RoleBindings): ロール (Roles) を主体 (ユーザー、グループ、またはサービスアカウント) にバインドします。
  • クラスターロールバインディング (ClusterRoleBindings): クラスターロール (ClusterRoles) を主体にバインドします。

Kubernetes ダッシュボードにアクセス許可を付与する

Kubernetes ダッシュボードに必要なアクセス許可を付与するには、クラスターロール (ClusterRole) とクラスターロールバインディング (ClusterRoleBinding) を作成することができます。

  1. 必要なアクセス許可を付与するクラスターロール (ClusterRole) を作成します。
kubectl create clusterrole dashboard-cluster-role --resource=deployments,pods,services,secrets,configmaps,jobs,cronjobs --verb=get,list,watch,create,update,delete

このクラスターロール (ClusterRole) は、指定された Kubernetes リソースに対する読み取り、書き込み、および削除のアクセス許可を付与します。

  1. クラスターロール (ClusterRole) を Kubernetes ダッシュボードのサービスアカウントにバインドするクラスターロールバインディング (ClusterRoleBinding) を作成します。
kubectl create clusterrolebinding dashboard-cluster-role-binding --clusterrole=dashboard-cluster-role --serviceaccount=kubernetes-dashboard:dashboard-sa

これにより、kubernetes-dashboard ネームスペース内の dashboard-sa サービスアカウントに dashboard-cluster-role クラスターロール (ClusterRole) がバインドされます。

これで、Kubernetes ダッシュボードは Kubernetes クラスタ内のリソースにアクセスして管理するために必要なアクセス許可を持つようになります。

まとめ

このチュートリアルでは、Kubernetes のサービスアカウント (Service Account) とその重要性、および設定方法について学びました。また、サービスアカウント (Service Account) を使用して Kubernetes ダッシュボードを設定し、ダッシュボードに必要なアクセス許可を付与する方法も学びました。Kubernetes のサービスアカウント (Service Account) を理解し、適切に設定することで、Kubernetes クラスタ内で安全な通信と細かいアクセス制御を確保することができます。