Kubernetesダッシュボードにサインインする方法は?


127

kubeadmとkubeletをv1.8.0にアップグレードしました。そして、公式ドキュメントに従ってダッシュボードをインストールします

$ 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 /からダッシュボードにアクセスできました

私はこれまでに会ったことがないこのようなログインページにリダイレクトされました。 ここに画像の説明を入力してください認証には2つの方法があるようです。

/etc/kubernetes/admin.confkubeconfigとしてアップロードしようとしましたが、失敗しました。次に、取得したトークンを使用しkubeadm token listてサインインしようとしましたが、再び失敗しました。

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


6
ここにプログラミングの質問はありません。代わりにserverfault.comを試してください。
Jolta

localhostを使用していない場合は、httpsのみを使用する必要がある場合があります。そうしないと、ログインフォームが表示されずに(err msgなしで)失敗します。詳細:stackoverflow.com/questions/53957413/...
Putnik

トークンを生成する必要があります。このガイドに従ってください-jhooq.com/setting-up-kubernetes-dashboard
Rahul

1
@Jolta Devopsは、kubernetesのおかげでプログラミングアクティビティになりました。それに直面するでしょう;)
Fabien Quatravaux

回答:


165

リリース1.7以降、ダッシュボードは以下に基づくユーザー認証をサポートします。

Githubのダッシュボード

トークン

ここでTokenすることができStatic TokenService Account TokenOpenID Connect TokenからKubernetesの認証ではなく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 / uiでを使用してロードできますkubectl proxy

ダッシュボードのサービスアカウントへの管理者権限の付与

$ 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、ログインページのオプションを使用してダッシュボードにアクセスできます。

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

例:

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

3
ユーザーを作成してトークンでログインする方法の例を教えてください。トークンをユーザーのように振る舞う方法はまだわかりません。
xren

Kubernetes Authenticatingの静的トークンファイルを参照してください
silverfox

96

TL; DR

1つのワンライナーでトークンを取得するには:

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を長すぎるようにしていますが、私はシェルで考えています。英語で学ぶことや教えることは、私にとってはるかに困難です。

以下は、読みやすくするために改行とインデントを設定した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のトークンセクションの最初のコマンドです。
  • 3行目-のみ最初の印刷のフィールドで始まる行のdeployment-controller-token-(ポッドの名前です)
  • 1行目-これは、@ silverfoxのトークンセクションの2番目のコマンドです。
  • 5行目- 最初のフィールドが「トークン」である行の2番目のフィールドのみを印刷します。

2
awkに相当するPowerShellはありますか?
–duct_tape_coder、

1
@duct_tape_coderはkubectl -n kube-systemでシークレットを取得し、deployment-controller-token-SOMEHASHという名前のtokenmを見つけます。その後、kubectl -n kube-systemでシークレットの展開コントローラートークンSOMEHASHを記述します。これがawkが行うことです。
キュービット

2
すばらしい答えです。それをもう一歩kubectl describe secret $(kubectl get secret | awk '/^dashboard-token-/{print $1}') | awk '$1=="token:"{print $2}' 進めるには:または、クリップボードを右に押す kubectl describe secret $(kubectl get secret | awk '/^dashboard-token-/{print $1}') | awk '$1=="token:"{print $2}' | xclip -selection clipboard -i
javajon

@duct_tape_coder kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | sls admin-user | ForEach-Object { $_ -Split '\s+' } | Select -First 1)からgithub.com/kubernetes/dashboard/blob/master/docs/user/...
Putnik

48

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

$ 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/


5
これは私にとってはうまくいきましたが、受け入れられた回答はサインインされましたが、承認エラーがいくつかありました。
ZedTuX 2018年

3
このコマンドはサービスアカウントに多くの権限を与え、実稼働環境では推奨されない場合があることに注意してください。
X. Wang

4
これはまた、以来KUBE-システムの下でserviceaccountを追加したいと思うかもしれない場所のダッシュボード生活
atomaras

私のために働いた!ポート8001でサービスを公開し、SSHトンネルを使用してローカルマシンからアクセスしました。
Anuradha Fernando

18

2つの回答を組み合わせる:4999269847761914

# 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}')

8

Kubernetesダッシュボードログイン用のトークンを抽出する、説明のないシンプルな1行。

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

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


5

これまでの答えはすべて私にとっては良いことです。しかし、私の側の簡単な答えは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あなたの名前に対応するものです。そのトークンをコピーして、トークンボックスに貼り付けます。お役に立てれば。


上記の回答のいくつかを試した後、この1つの回答が機能しました。私はそれを貼り付け、トークンアウトをコピーして、プレスト、イムに。
CENTURION

5

トークン認証の前にこれらのステップに従う必要があります

  1. Cluster Adminサービスアカウントを作成する

    kubectl create serviceaccount dashboard -n default
    
  2. クラスターバインディングルールをダッシュ​​ボードアカウントに追加する

    kubectl create clusterrolebinding dashboard-admin -n default --clusterrole=cluster-admin --serviceaccount=default:dashboard
    
  3. このコマンドでシークレットトークンを取得する

    kubectl get secret $(kubectl get serviceaccount dashboard -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode
    
  4. Kubernetesダッシュボードのログインページでトークン認証を選択します ここに画像の説明を入力してください

  5. これでログインできます


0

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

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

ダッシュボードにyamlにこの引数を追加します

- --enable-skip-login

それを取り戻す


1
このリンクで質問に答えることができますが、回答の重要な部分をここに含め、参照用のリンクを提供することをお勧めします。リンクされたページが変更されると、リンクのみの回答が無効になる可能性があります。
Stefan Becker

1
このリンクで質問に答えることができますが、回答の重要な部分をここに含め、参照用のリンクを提供することをお勧めします。リンクされたページが変更されると、リンクのみの回答が無効になる可能性があります。- 口コミより
リック・

@StefanBeckerリンクは答えではなく、証明するソースThe skip login has been disabled by default due to security issuesです。答えは- --enable-skip-loginです。多分それは最良の答えではないかもしれませんが、これはリンクのみの答えではありません。
derHugo

@Rickリンクは答えではなく、証明のソースThe skip login has been disabled by default due to security issuesです。答えは- --enable-skip-loginです。多分それは最良の答えではないかもしれませんが、これはリンクのみの答えではありません。
derHugo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.