Kubernetes Dashboard のデプロイと外部ネットワーク公開手順

1. 公式マニフェストの取得とクラスタへの適用

マスターノードまたは kubeconfig が設定された端末から、対象バージョンに合わせたデプロイ用マニフェストを取得します。ここでは安定版マニフェストを使用して構成を定義します。

curl -LO https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
kubectl apply -f recommended.yaml

マニフェスト適用後、ポッドの起動状態を確認します。STATUS: Running となり、リスタート数が安定すればデプロイ成功です。

kubectl get pods -n kubernetes-dashboard -w

2. 外部公開用 Service の追加設定

初期状態では Service タイプが ClusterIP であり、クラスタ内部からの通信のみが許可されています。ブラウザからのアクセスを可能にするため、NodePort 型を指定した追加 Service を定義します。

cat > dashboard-external-svc.yaml << 'EOF'
apiVersion: v1
kind: Service
metadata:
  name: kubernetes-dashboard-external
  namespace: kubernetes-dashboard
  labels:
    app.kubernetes.io/name: kubernetes-dashboard
    app.kubernetes.io/component: ui
spec:
  type: NodePort
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30443
  selector:
    app.kubernetes.io/name: kubernetes-dashboard
EOF
kubectl apply -f dashboard-external-svc.yaml

設定が反映されたかを確認するには、以下のコマンドを実行します。

kubectl get svc -n kubernetes-dashboard | grep NodePort

3. 管理者用 ServiceAccount と RBAC 構成

Dashboard へのフルアクセス権限を付与するため、専用の ServiceAccount を作成し、cluster-admin クラスタロールをバインドします。セキュリティ分離を考慮し、既存の kube-system アカウントは流用せず新規に定義します。

cat > dashboard-admin-rbac.yaml << 'EOF'
apiVersion: v1
kind: ServiceAccount
metadata:
  name: dash-operator-sa
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: dash-operator-binding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: dash-operator-sa
    namespace: kubernetes-dashboard
EOF
kubectl apply -f dashboard-admin-rbac.yaml

4. 認証トークンの抽出とログイン

作成した ServiceAccount に紐づくシークレットから Bearer Token を抽出します。以下のコマンドで直接トークン文字列を出力できます。

TOKEN_SECRET=$(kubectl -n kubernetes-dashboard get sa dash-operator-sa -o jsonpath="{.secrets[0].name}")
kubectl -n kubernetes-dashboard get secret $TOKEN_SECRET -o jsonpath="{.data.token}" | base64 -d
echo ""

取得したトークン値をコピーし、ブラウザで以下の URL にアクセスします。

https://<CLUSTER_NODE_IP>:30443

認証ダイアログが表示されたら「Token」タブを選択し、コピーした値を貼り付けて認証を実行します。正常に接続されると、ワークロードやノード状態を可視化したコンソール画面に遷移します。

補足:レジストリアクセスが制限されている環境への対応

デフォルトのイメージレジストリに接続できないネットワークでは、マニフェスト内の image フィールドを国内ミラーやプライベートレジストリに書き換える必要があります。書き換え後は crictl pull または ctr -n k8s.io image pull コマンドを使用して事前にイメージをノード上にキャッシュし、その後 kubectl apply

タグ: Kubernetes kubernetes-dashboard kubectl nodeport rbac

7月21日 16:46 投稿