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

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

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

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

Kubernetes Dashboardは、デフォルトではクラスタにデプロイされません。ただし、Container Engine for Kubernetesで作成したクラスタには、次の方法でKubernetes Dashboardをデプロイできます:

  • 既存のクラスタにKubernetes Dashboardを手動でデプロイするには、Kubernetesのドキュメントを参照してください。指示に従ってKubernetes Dashboardを手動でデプロイすると、(kube-systemネームスペースではなく)kube-dashboardネームスペースにデプロイされます。手動でデプロイされたKubernetes Dashboardを表示するURLは、次のとおりです:

    http://localhost:8001/api/v1/namespaces/kube-dashboard/services/https:kubernetes-dashboard:/proxy/#!/login
  • Container Engine for Kubernetesでクラスタの作成時に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ダッシュボードを本番クラスタにインストールすることはお薦めしません。Kubernetes Dashboardをインストールする場合は、ロード・バランサまたはイングレス・コントローラを介して外部に公開するのではなく、クラスタ内でアクセスを制限することをお薦めします。Kubernetes Dashboardは、Kubernetesクラスタへのアクセスの取得に使用される一般的な攻撃ベクトルです。
  • コンソールを使用してクラスタを作成するときに、Kubernetesダッシュボードをインストールするように指定することはできません。Kubernetesダッシュボードをインストールする場合は、APIを使用してクラスタを作成し、isKubernetesDashboardEnabled属性をtrueに設定します。
  • Container Engine for Kubernetesを使用して、Kubernetes Dashboardを既存のクラスタにデプロイすることはできません。Kubernetes Dashboardを既存のクラスタに手動でデプロイする必要があります。
  • クラスタからKubernetes Dashboardを削除するために使用するコマンドは、クラスタで実行されているKubernetesのバージョンによって異なります。Kubernetes Dashboardの削除に関するノートを参照してください。
  • kubeconfigファイルのOracle Cloud Infrastructure CLIコマンドは、存続期間が短く、クラスタ・スコープが指定され、個々のユーザーに固有の認証トークンを生成します。そのため、Kubernetesクラスタにアクセスするユーザー間でkubeconfigファイルを共有することはできません。継続的統合や継続的配信(CI/CD)ツールなど、他のプロセスやツールがクラスタにアクセスする場合も、生成される認証トークンは適していません。この場合、Kubernetesサービス・アカウントを作成して、それに関連する認証トークンをkubeconfigファイルに追加することを検討します。詳細は、Kubeconfigファイルへのサービス・アカウント認証トークンの追加を参照してください。

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サービス・アカウントの認証トークンを取得します:

    kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep oke-admin | awk '{print $1}')

    前述のコマンドの出力には、次に示すように、認証トークン(長い英数字の文字列)がtoken:要素の値として含まれています:

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

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

  6. ターミナル・ウィンドウで、kubectl proxyと入力して、Kubernetes Dashboardを使用可能にします。
  7. ブラウザを開き、次のURLに移動して、クラスタの作成時にデプロイされたKubernetes Dashboardを表示します:
    http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login

    Kubernetesドキュメントの手順に従って既存のクラスタにKubernetes Dashboardを手動でデプロイした場合、kube-systemネームスペースではなくkube-dashboardネームスペースにデプロイされます。その結果、手動でデプロイされたKubernetes Dashboardを表示するURLは次のようになります:

    http://localhost:8001/api/v1/namespaces/kube-dashboard/services/https:kubernetes-dashboard:/proxy/#!/login.
  8. Kubernetes Dashboardで、「トークン」を選択し、以前にコピーしたtoken:要素の値を「トークン」フィールドに貼り付けます。

  9. Kubernetes Dashboardで、「サインイン」をクリックし、「概要」をクリックして、クラスタ上にデプロイされているアプリケーションを表示します。

Kubernetes Dashboardの削除に関するノート

クラスタからKubernetes Dashboardを削除する場合、使用するコマンドは、クラスタで実行されているKubernetesのバージョンによって異なります:

  • 1.16.8より前のバージョンのKubernetesを実行しているクラスタの場合、次のkubectlコマンドを実行して、Kubernetes Dashboardを削除します:
    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-key-holder
    kubectl delete cm -n kube-system kubernetes-dashboard-settings
    kubectl delete role -n kube-system kubernetes-dashboard-minimal
    kubectl delete rolebinding -n kube-system kubernetes-dashboard-minimal
    kubectl delete deploy -n kube-system kubernetes-dashboard
  • Kubernetesバージョン1.16.8(以降)を実行しているクラスタの場合、次のkubectlコマンドを実行して、Kubernetes Dashboardを削除します:
    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