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