web-dev-qa-db-ja.com

Kubernetesダッシュボードにサインインするにはどうすればいいですか?

私はkubeadmとkubeletをv1.8.0にアップグレードしました。そして公式の document に従ってダッシュボードをインストールしてください。

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

その後、実行してダッシュボードを起動しました

$ kubectl proxy --address="192.168.0.101" -p 8001 --accept-hosts='^*$'

それから幸いにも、私は http://192.168.0.101:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/ を通してダッシュボードにアクセスすることができました。

私はこれまでに会ったことがないこのようなログインページにリダイレクトされました。 enter image description here 認証には2つの方法があるようです。

私はkubeconfigとして/etc/kubernetes/admin.confをアップロードしようとしましたが失敗しました。それから私はkubeadm token listから得たトークンを使ってサインインしようとしましたが、再び失敗しました。

問題は、ダッシュボードにサインインする方法です。以前よりも多くのセキュリティメカニズムが追加されたようです。ありがとう。

61
ichbinblau

バージョン1.7以降、Dashboardはより安全な設定を使用します。つまり、デフォルトでは最小限の特権しかなく、HTTPS経由でのみアクセスできます。それ以上のステップを実行する前に Access Control guideを読むことをお勧めします。

リリース1.7以降、Dashboardは以下に基づくユーザー認証をサポートします。

--- Githubのダッシュボード

トークン

ここでTokenは、 Kubernetes Authenticating _からのStatic TokenService Account TokenOpenID Connect Tokenになりますが、kubeadmのBootstrap Tokenにはできません。

Kubectlを使うと、デフォルトでkubernetesに作成されたサービスアカウント(例えばデプロイメントコントローラ)を取得できます。

$ kubectl -n kube-system get secret
# All secrets with type 'kubernetes.io/service-account-token' will allow to log in.
# Note that they have different privileges.
NAME                                     TYPE                                  DATA      AGE
deployment-controller-token-frsqj        kubernetes.io/service-account-token   3         22h

$ kubectl -n kube-system describe secret deployment-controller-token-frsqj
Name:         deployment-controller-token-frsqj
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name=deployment-controller
              kubernetes.io/service-account.uid=64735958-ae9f-11e7-90d5-02420ac00002

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  11 bytes
token:      eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkZXBsb3ltZW50LWNvbnRyb2xsZXItdG9rZW4tZnJzcWoiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVwbG95bWVudC1jb250cm9sbGVyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiNjQ3MzU5NTgtYWU5Zi0xMWU3LTkwZDUtMDI0MjBhYzAwMDAyIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRlcGxveW1lbnQtY29udHJvbGxlciJ9.OqFc4CE1Kh6T3BTCR4XxDZR8gaF1MvH4M3ZHZeCGfO-sw-D0gp826vGPHr_0M66SkGaOmlsVHmP7zmTi-SJ3NCdVO5viHaVUwPJ62hx88_JPmSfD0KJJh6G5QokKfiO0WlGN7L1GgiZj18zgXVYaJShlBSz5qGRuGf0s1jy9KOBt9slAN5xQ9_b88amym2GIXoFyBsqymt5H-iMQaGP35tbRpewKKtly9LzIdrO23bDiZ1voc5QZeAZIWrizzjPY5HPM1qOqacaY9DcGc7akh98eBJG_4vZqH2gKy76fMf0yInFTeNKr45_6fWt8gRM77DQmPwb3hbrjWXe1VvXX_g

Kubeconfig

Kubeconfigファイルのユーザーにはusername & passwordまたはtokenが必要ですが、admin.confにはclient-certificateしかありません。

$ kubectl config set-credentials cluster-admin --token=bearer_token

代替案(プロダクションにはお勧めできません)

これは認証を回避する2つの方法ですが、注意が必要です。

HTTPでダッシュボードをデプロイする

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/alternative/kubernetes-dashboard.yaml

ダッシュボードは http:// localhost:8001/uikubectl proxyを付けてロードできます。

Dashboardのサービスアカウントに管理者権限を付与する

$ cat <<EOF | kubectl create -f -
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard
  labels:
    k8s-app: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: kubernetes-dashboard
  namespace: kube-system
EOF

その後、ログインページでSkipオプションを使用してDashboardにアクセスできます。

ダッシュボードバージョンv1.10.1以降を使用している場合は、展開のコマンドライン引数に--enable-skip-loginも追加する必要があります。 kubectl edit deployment/kubernetes-dashboard --namespace=kube-systemargsにそれを追加することによってそれをすることができます。

例:

      containers:
      - args:
        - --auto-generate-certificates
        - --enable-skip-login            # <-- add this line
        image: k8s.gcr.io/kubernetes-dashboard-AMD64:v1.10.1
98
silverfox

TL、DR

単一のonelinerでトークンを取得するには

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | awk '/^deployment-controller-token-/{print $1}') | awk '$1=="token:"{print $2}'

これはあなたの〜/ .kube/configが存在し有効であると仮定しています。また、kubectl config get-contextsは、ログインしているダッシュボードに正しいコンテキスト(クラスタとネームスペース)を使用していることを示しています。

説明

私は@ silverfoxの答えから学んだことからこの答えを導き出しました。それは非常に有益な記事です。残念ながら、実際に情報を実際に使用する方法を説明するには不十分です。 DevOpsを長くやりすぎたのかもしれませんが、私はShellで考えています。私が英語で勉強したり教えたりするのはずっと難しいです。

改行を含むonelinerと読みやすさのためのインデントは次のとおりです。

kubectl -n kube-system describe secret $(
  kubectl -n kube-system get secret | \
  awk '/^deployment-controller-token-/{print $1}'
) | \
awk '$1=="token:"{print $2}'

4つの異なるコマンドがあり、それらはこの順序で呼び出されます。

  • 2行目 - これは@ silverfoxの Token セクションの最初のコマンドです。
  • 3行目 - deployment-controller-token-で始まる行の最初の フィールド のみを印刷します(これはポッド名です)。
  • 1行目 - これは@ silverfoxの Token セクションの2番目のコマンドです。
  • 5行目 - 最初の field が "token:"である行の2番目の field だけを印刷します。
51
Bruno Bronosky

ダッシュボードサービスアカウントに管理者権限を付与したくない場合は、クラスタ管理者サービスアカウントを作成できます。

$ kubectl create serviceaccount cluster-admin-dashboard-sa
$ kubectl create clusterrolebinding cluster-admin-dashboard-sa \
  --clusterrole=cluster-admin \
  --serviceaccount=default:cluster-admin-dashboard-sa

そして、作成したばかりのクラスタ管理サービスアカウントのトークンを使用できます。

$ kubectl get secret | grep cluster-admin-dashboard-sa
cluster-admin-dashboard-sa-token-6xm8l   kubernetes.io/service-account-token   3         18m
$ kubectl describe secret cluster-admin-dashboard-sa-token-6xm8l

私はgiantswarmガイドからそれを引用しました - https://docs.giantswarm.io/guides/install-kubernetes-dashboard/ /

32
SunghoMoon

2つの答えを組み合わせる: 49992698 および 47761914

# Create service account
kubectl create serviceaccount cluster-admin-dashboard-sa

# Bind ClusterAdmin role to the service account
kubectl create clusterrolebinding cluster-admin-dashboard-sa \
  --clusterrole=cluster-admin \
  --serviceaccount=default:cluster-admin-dashboard-sa

# Parse the token
TOKEN=$(kubectl describe secret $(kubectl -n kube-system get secret | awk '/^cluster-admin-dashboard-sa-token-/{print $1}') | awk '$1=="token:"{print $2}')
13
Abdennour TOUMI

これまでの答えはすべて私にとって良いことです。しかし私の側での直接的な答えは https://github.com/kubernetes/dashboard/wiki/Creating-sample-user#bearer-token から来るでしょう。 kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')を使うだけです。いくつかのキーには多くの値があります(NameNamespaceLabels、...、token)。最も重要なのはあなたの名前に対応するtokenです。そのトークンをコピーして、トークンボックスに貼り付けます。お役に立てれば。

5
Julien Nyambal

Kubernetesダッシュボードログインのトークンを抽出するための、説明のつかないシンプルなワンライナー。

kubectl describe secret -n kube-system | grep deployment -A 12

トークンをコピーして、トークンサインインオプションの下のkubernetesダッシュボードに貼り付けます。これで、kubernetesダッシュボードを使用できます

1
Rewanth Cool

セキュリティ上の問題から、スキップログインはデフォルトで無効になっています。 https://github.com/kubernetes/dashboard/issues/2672

ダッシュボードにyamlこのargを追加

- --enable-skip-login

元に戻す

1
Ravi

ダウンロード https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/alternative/kubernetes-dashboard.yaml

追加する

type: NodePort for the Service

そして、このコマンドを実行します。

kubectl apply -f kubernetes-dashboard.yaml

次のコマンドで公開ポートを見つけます。

kubectl get services -n kube-system

認証なしで http:// hostname:exposedport/ にダッシュボードを取得できるはずです。

0
Rajesh Guptan