GKEなどRBACが有効なKubernetes環境でHelmを利用するには、アクセス権限の設定が必要です。本記事ではRBACが有効なKubenetes環境でHelmを利用する方法を紹介します。
はじめに
KubernetesのRBACとは、Role-based access controlのことです。ユーザに与えられたロールをもとに、アクセスできるリソースやネットワークを規定します。GKEなどではデフォルトでRBACが有効になっています。このため、権限のないユーザでHelmサーバ(Tiller)をインストールした場合、Chartのインストールでの権限が不足し、以下のようなエラーが発生します。
1 2 |
$ helm install --name nginx easydoggie/nginx Error: release nginx failed: namespaces "default" is forbidden: User "system:serviceaccount:kube-system:default" cannot get resource "namespaces" in API group "" in the namespace "default" |
RBACに基づいた権限を設定するために、ServiceAccountとClusterRoleBindingを利用した設定を紹介します。
RBACの認証設定
確認環境
本記事では以下のKubernetesのバージョンで動作確認を行っています。サーバは記事執筆時点のGKEのデフォルトバージョンです。
1 2 3 |
$ kubectl version --short Client Version: v1.14.1 Server Version: v1.12.8-gke.6 |
マニフェストファイルを作る
ServiceAccountとClusterRoleBindingのマニフェストファイルを作成します。ClusterRoleとしてデフォルトで用意されている'cluster-admin'の権限を与えています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#file: serviceaccount/helm-account.yaml apiVersion: v1 kind: ServiceAccount metadata: name: helm namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: helm roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: helm namespace: kube-system |
マニフェストファイルはGitHubでも公開してるので、参照をしてください。
https://github.com/easydoggie/EasyDoggie/tree/master/serviceaccount
マニフェストファイルを適用する
作成したマニフェストファイルをkubectl apply
コマンドでKubernetes上に適用します。はじめに現在のコンテキストがHelmインストール先であるか、確認をしておきましょう。
1 2 |
$ kubectl config current-context <your_current_context> |
現在のコンテキストが正しければ、マニフェストファイルを適用します。
1 2 3 |
$ kubectl apply -f helm-account.yaml serviceaccount/helm created clusterrolebinding.rbac.authorization.k8s.io/helm created |
Kubernetes上に反映されたか、確認をしてみましょう。
1 2 3 4 5 6 |
$ kubectl get sa,clusterrolebindings -n kube-system helm NAME SECRETS AGE serviceaccount/helm 1 17s NAME AGE clusterrolebinding.rbac.authorization.k8s.io/helm 17s |
反映されたようです。これでHelm用のRBAC設定ができました。Helmサーバ(Tiller)のインストールに進みます。
Helmサーバ(Tiller)をインストールする
Helmクライアントのインストールは事前に完了させておいてください。Helmクライアントのインストール方法は別の記事で紹介をしているので、参考にしてください。
Helmサーバ(Tiller)のインストールにはhelm init
コマンドを利用します。オプションなしでもTillerのインストールはできますが、helm install
などのコマンドを実行したときに、権限不足でエラーが発生します。Helmに必要な権限を有効にするために、helm init
でTillerをインストールするときに—service-account
オプションで事前に作成したRBAC用のHelmアカウントを指定します。
1 2 3 4 5 6 7 8 9 |
$ helm init --service-account helm $HELM_HOME has been configured at /home/maint/.helm. Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster. Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy. To prevent this, run `helm init` with the --tiller-tls-verify flag. For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation Happy Helming! |
helm version
コマンドでサーバにアクセスできるか確認をしておきましょう。
1 2 3 |
$ helm version --short Client: v2.13.1+g618447c Server: v2.13.1+g618447c |
ここまで問題がなければ、helm install
コマンドでHelmチャートのインストールも問題なく実行できます。
おわりに
本記事ではRBACが有効な環境でHelmを使う方法を紹介しました。どのシステムでもアクセス権や認証は必要な項目です。しかし設計や設定があいまいだと、本番と開発環境のアクセス権限の違いで、障害を引き起こしてしまう場合もあります。普段からシステムやユーザの権限を意識し、環境間の差異はなくしていきたいものです。コンテナは環境間の差異をなくす一つの手段でもありますので、積極的に活用していきたいですね。
投稿者プロフィール
最新の投稿
- AWS2021年12月2日AWS Graviton3 プロセッサを搭載した EC2 C7g インスタンスが発表されました。
- セキュリティ2021年7月14日ゼロデイ攻撃とは
- セキュリティ2021年7月14日マルウェアとは
- WAF2021年7月13日クロスサイトスクリプティングとは?