Kubernetesダッシュボードを使用したクラスタへのアクセス
Kubernetes Dashboardを起動して、Kubernetes Engine (OKE)を使用して作成したクラスタを表示する方法をご紹介します。
Kubernetes Dashboardは仮想ノード・プールでは使用できません。
Kubernetes Dashboardは、次のことを可能にするWebベースの管理インタフェースです:
- コンテナ化されたアプリケーションのデプロイおよび編集
- コンテナ化されたアプリケーションのステータスの評価
- コンテナ化されたアプリケーションのトラブルシューティング
Kubernetes Dashboardは、特にKubernetesの新規ユーザーに役立ちます。Kubernetes Dashboard (Web UIまたはダッシュボードUIとも呼ばれる)の詳細は、KubernetesドキュメントのWeb UI(ダッシュボード)のトピックを参照してください。
Kubernetes Dashboardは、デフォルトではクラスタにデプロイされません。ただし、Kubernetes Engineで作成したクラスタには、次の方法でKubernetes Dashboardをデプロイできます:
-
既存のクラスタにKubernetes Dashboardを手動でデプロイするには、Kubernetesのドキュメントを参照してください。指示に従ってKubernetes Dashboardを手動でデプロイすると、(
kube-system
ネームスペースではなく)kubernetes-dashboard
ネームスペースにデプロイされます。手動でデプロイされたKubernetes Dashboardを表示するURLは、次のとおりです:http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#!/login
- クラスタの拡張の作成時にKubernetes EngineでKubernetes Dashboardを自動的にデプロイするには、次のことができます:
- コンソールでカスタム作成ワークフローを使用して拡張クラスタを作成し、Kubernetes Dashboardクラスタ・アドオンを構成します。
- APIを使用してクラスタを作成し、isKubernetesDashboardEnabled属性をtrueに設定します。
Kubernetes EngineがKubernetes Dashboardを自動的にデプロイすると、
kube-system
ネームスペースにデプロイされます。自動的にデプロイされたKubernetes Dashboardを表示するURLは、次のとおりです:http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login
次の点に注意してください:
- クラウド・シェルでKubernetes Dashboardを実行することはできません。
- 拡張可能な認証サポートがないため、本番クラスタにKubernetes Dashboardをインストールすることはお薦めしません。Kubernetes Dashboardをインストールする場合は、ロード・バランサまたはイングレス・コントローラを介して外部に公開するのではなく、クラスタ内でアクセスを制限することをお薦めします。Kubernetes Dashboardは、Kubernetesクラスタへのアクセスの取得に使用される一般的な攻撃ベクトルです。
- クラスタからKubernetes Dashboardを削除するために使用するコマンドは、クラスタで実行されているKubernetesのバージョンによって異なります。Kubernetes Dashboardの削除に関するノートを参照してください。
- kubeconfigファイルのOracle Cloud Infrastructure CLIコマンドは、存続期間が短く、クラスタ・スコープが指定され、個々のユーザーに固有の認証トークンを生成します。そのため、Kubernetesクラスタにアクセスするユーザー間でkubeconfigファイルを共有することはできません。継続的統合や継続的配信(CI/CD)ツールなど、他のプロセスやツールがクラスタにアクセスする場合も、生成される認証トークンは適していません。この場合、Kubernetesサービス・アカウントを作成して、それに関連する認証トークンをkubeconfigファイルに追加することを検討します。詳細は、Kubeconfigファイルへのサービス・アカウント認証トークンの追加を参照してください。
- Kubernetes Dashboardは、管理対象ノード・プールで使用できますが、仮想ノード・プールでは使用できません。
Kubernetes Dashboardを使用したクラスタへのアクセス
Kubernetes Dashboardを使用してクラスタにアクセスするには:
-
まだ実行していない場合は、ステップに従って、クラスタのkubeconfig構成ファイルを設定し、(必要に応じて)そのファイルを指すようにKUBECONFIG環境変数を設定します。自分のkubeconfigファイルを設定する必要があります。別のユーザーが設定したkubeconfigファイルを使用してクラスタにアクセスすることはできません。クラスタ・アクセスの設定を参照してください。
-
テキスト・エディタで、次の内容のファイルを(たとえば、oke-admin-service-account.yamlという名前で)作成します:
apiVersion: v1 kind: ServiceAccount metadata: name: oke-admin namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: oke-admin roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: oke-admin namespace: kube-system
このファイルにより、管理者サービス・アカウントとclusterrolebindingが、どちらもoke-adminという名前で定義されます。
-
次のように入力して、クラスタにサービス・アカウントとclusterrolebindingを作成します:
kubectl apply -f <filename>
<filename>
は、以前に作成したファイルの名前です。例:kubectl apply -f oke-admin-service-account.yaml
前述のコマンドの出力により、サービス・アカウントとclusterrolebindingの作成が確認されます:
serviceaccount "oke-admin" created clusterrolebinding.rbac.authorization.k8s.io "oke-admin" created
これで、oke-adminサービス・アカウントを使用して、クラスタの表示および制御とKubernetes Dashboardへの接続が行えるようになりました。
- oke-adminサービス・アカウントの認証トークンを次のように取得します:
- テキスト・エディタでファイル(たとえば、oke-admin-sa-token.yaml)を作成し、次の内容のシークレット(たとえば、oke-admin-sa-tokenという名前)を作成します。
apiVersion: v1 kind: Secret metadata: name: oke-admin-sa-token namespace: kube-system annotations: kubernetes.io/service-account.name: oke-admin type: kubernetes.io/service-account-token
-
次のように入力して、サービス・アカウント・トークンを作成します。
kubectl apply -f <filename>
<filename>
は、以前に作成したファイルの名前です。例:kubectl apply -f oke-admin-sa-token.yaml
-
次のように入力して、シークレットの詳細を表示します:
kubectl describe secrets oke-admin-sa-token -n kube-system
前述のコマンドの出力には、次に示すように、認証トークン(長い英数字の文字列)が
token:
要素の値として含まれています:Name: oke-admin-sa-token Namespace: kube-system Labels: <none> Annotations: kubernetes.io/service-account.name: oke-admin kubernetes.io/service-account.uid: 3a7fcd8e-e123-11e9-81ca-0a580aed8570 Type: kubernetes.io/service-account-token Data ==== ca.crt: 1289 bytes namespace: 11 bytes token: eyJh______px1Q
前述の例では、
eyJh______px1Q
(読みやすさのために省略)が認証トークンです。 -
出力から
token:
要素の値をコピーします。このトークンは、ダッシュボードへの接続に使用します。
- テキスト・エディタでファイル(たとえば、oke-admin-sa-token.yaml)を作成し、次の内容のシークレット(たとえば、oke-admin-sa-tokenという名前)を作成します。
- ターミナル・ウィンドウで、
kubectl proxy
と入力して、Kubernetes Dashboardを使用可能にします。 - ブラウザを開き、次のURLに移動して、クラスタの作成時にデプロイされたKubernetes Dashboardを表示します:
http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login
Kubernetesドキュメントの手順に従って既存のクラスタにKubernetes Dashboardを手動でデプロイした場合、
kube-system
ネームスペースではなくkubernetes-dashboard
ネームスペースにデプロイされます。その結果、手動でデプロイされたKubernetes Dashboardを表示するURLは次のようになります:http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#!/login.
-
Kubernetes Dashboardで、「トークン」を選択し、以前にコピーした
token:
要素の値を「トークン」フィールドに貼り付けます。 - Kubernetes Dashboardで、「サインイン」をクリックし、「概要」をクリックして、クラスタ上にデプロイされているアプリケーションを表示します。
Kubernetes Dashboardの削除に関するノート
Kubernetes Dashboardをクラスタから手動で削除する場合は、次のkubectlコマンドを実行します:
kubectl delete deployment kubernetes-dashboard -n kube-system
kubectl delete sa -n kube-system kubernetes-dashboard
kubectl delete svc -n kube-system kubernetes-dashboard
kubectl delete secret -n kube-system kubernetes-dashboard-certs
kubectl delete secret -n kube-system kubernetes-dashboard-csrf
kubectl delete secret -n kube-system kubernetes-dashboard-key-holder
kubectl delete cm -n kube-system kubernetes-dashboard-settings
kubectl delete role -n kube-system kubernetes-dashboard
kubectl delete rolebinding -n kube-system kubernetes-dashboard
kubectl delete clusterrole -n kube-system kubernetes-dashboard
kubectl delete clusterrolebinding -n kube-system kubernetes-dashboard
kubectl delete deploy -n kube-system kubernetes-dashboard