Kubernetesダッシュボードを使用したクラスタへのアクセス

Kubernetes Dashboardを起動して、Container Engine for Kubernetes (OKE)を使用して作成したクラスタを表示する方法をご紹介します。

ノート

Kubernetes Dashboardは仮想ノード・プールでは使用できません。

Kubernetes Dashboardは、次のことを可能にするWebベースの管理インタフェースです:

  • コンテナ化されたアプリケーションのデプロイおよび編集
  • コンテナ化されたアプリケーションのステータスの評価
  • コンテナ化されたアプリケーションのトラブルシューティング

Kubernetes Dashboardは、特にKubernetesの新規ユーザーに役立ちます。Kubernetes Dashboard (Web UIまたはダッシュボードUIとも呼ばれる)の詳細は、KubernetesドキュメントのWeb UI(ダッシュボード)のトピックを参照してください。

Kubernetes Dashboardは、デフォルトではクラスタにデプロイされません。ただし、Container Engine for Kubernetesで作成したクラスタには、次の方法で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
  • クラスタの拡張作成中にContainer Engine for KubernetesでKubernetes Dashboardを自動的にデプロイするには、次のことができます:
    • コンソールでカスタム作成ワークフローを使用して拡張クラスタを作成し、Kubernetes Dashboardクラスタ・アドオンを構成します。
    • APIを使用してクラスタを作成し、isKubernetesDashboardEnabled属性をtrueに設定します。

    Container Engine for Kubernetesが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を使用してクラスタにアクセスするには:

  1. まだ実行していない場合は、ステップに従って、クラスタのkubeconfig構成ファイルを設定し、(必要に応じて)そのファイルを指すようにKUBECONFIG環境変数を設定します。自分のkubeconfigファイルを設定する必要があります。別のユーザーが設定したkubeconfigファイルを使用してクラスタにアクセスすることはできません。クラスタ・アクセスの設定を参照してください。
  2. テキスト・エディタで、次の内容のファイルを(たとえば、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という名前で定義されます。

  3. 次のように入力して、クラスタにサービス・アカウントと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への接続が行えるようになりました。

  4. oke-adminサービス・アカウントの認証トークンを次のように取得します:
    1. テキスト・エディタでファイル(たとえば、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
    2. 次のように入力して、サービス・アカウント・トークンを作成します。

      kubectl apply -f <filename>

      <filename>は、以前に作成したファイルの名前です。例:

      kubectl apply -f oke-admin-sa-token.yaml
    3. 次のように入力して、シークレットの詳細を表示します:

      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 (読みやすさのために省略)が認証トークンです。

    4. 出力からtoken:要素の値をコピーします。このトークンは、ダッシュボードへの接続に使用します。

  5. ターミナル・ウィンドウで、kubectl proxyと入力して、Kubernetes Dashboardを使用可能にします。
  6. ブラウザを開き、次の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.
  7. Kubernetes Dashboardで、「トークン」を選択し、以前にコピーしたtoken:要素の値を「トークン」フィールドに貼り付けます。

  8. 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