Como entrar no painel do kubernetes?

127

Acabei de atualizar o kubeadm e o kubelet para a v1.8.0. E instale o painel seguindo o documento oficial .

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

Depois disso, iniciei o painel executando

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

Felizmente, consegui acessar o painel através de http://192.168.0.101:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

Fui redirecionado para uma página de login como essa que nunca havia encontrado antes. insira a descrição da imagem aquiParece que existem duas maneiras de autenticação.

Eu tentei fazer o upload do arquivo /etc/kubernetes/admin.confcomo o kubeconfig, mas falhei. Depois, tentei usar o token de origem kubeadm token listpara entrar, mas falhei novamente.

A questão é como eu posso entrar no painel. Parece que eles adicionaram muitos mecanismos de segurança do que antes. Obrigado.

ichbinblau
fonte
6
Não vejo uma pergunta de programação aqui. Tente serverfault.com.
Jolta
Se você NÃO está no host local, pode ser necessário usar apenas https, caso contrário, o formulário de login falhará silenciosamente (sem erros de mensagem). Detalhes: stackoverflow.com/questions/53957413/…
Putnik
Você precisa gerar token, siga este guia - jhooq.com/setting-up-kubernetes-dashboard
Rahul Wagh
1
@Jolta Devops agora é uma atividade de programação, graças a kubernetes, você enfrentará isso;)
Fabien Quatravaux

Respostas:

165

A partir do release 1.7, o Dashboard suporta autenticação de usuário com base em:

- Painel no Github

Símbolo

Aqui Tokenpode ser Static Token, Service Account Token, OpenID Connect Tokena partir Kubernetes Authenticating , mas não o kubeadm Bootstrap Token.

Com o kubectl, podemos obter uma conta de serviço (por exemplo, controlador de implantação) criada no kubernetes por padrão.

$ 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

O painel precisa que o usuário no arquivo kubeconfig tenha username & passwordou token, mas admin.confapenas possui client-certificate. Você pode editar o arquivo de configuração para adicionar o token que foi extraído usando o método acima.

$ kubectl config-credentials de configuração cluster-admin --token = bearer_token

Alternativa (não recomendado para produção)

Aqui estão duas maneiras de ignorar a autenticação, mas use com cuidado.

Implantar painel com HTTP

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

O painel pode ser carregado em http: // localhost: 8001 / ui com kubectl proxy.

Concedendo privilégios de administrador à conta de serviço do painel

$ 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

Depois, você pode usar a Skipopção na página de login para acessar o Painel.

Se você estiver usando a versão do painel v1.10.1 ou posterior, também deverá adicionar --enable-skip-loginaos argumentos de linha de comando da implantação. Você pode fazer isso adicionando-o ao argsin kubectl edit deployment/kubernetes-dashboard --namespace=kube-system.

Exemplo:

      containers:
      - args:
        - --auto-generate-certificates
        - --enable-skip-login            # <-- add this line
        image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
Raposa Prateada
fonte
3
Você pode nos dar um exemplo de como criar um usuário e depois fazer login com token? Ainda não sei como usar o token como um usuário.
xren
Veja arquivo estático token em Kubernetes Authenticating
silverfox
96

TL; DR

Para obter o token em um único oneliner:

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

Isso pressupõe que seu ~ / .kube / config esteja presente e válido. E também kubectl config get-contextsindica que você está usando o contexto correto (cluster e espaço para nome) para o painel no qual está efetuando login.

Explicação

Eu deduzi esta resposta do que aprendi com a resposta do @ silverfox. Essa é uma redação muito informativa. Infelizmente, não é possível dizer como colocar as informações em prática. Talvez eu esteja desenvolvendo o DevOps há muito tempo, mas acho que com casca. É muito mais difícil para mim aprender ou ensinar em inglês.

Aqui está o oneliner com quebras de linha e recuos para facilitar a leitura:

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

Existem 4 comandos distintos e eles são chamados nesta ordem:

  • Linha 2 - Este é o primeiro comando da seção Token do @ silverfox .
  • Linha 3 - Imprima apenas o primeiro campo da linha que começa com deployment-controller-token-(que é o nome do pod)
  • Linha 1 - Este é o segundo comando da seção Token do @ silverfox .
  • Linha 5 - Imprima apenas o segundo campo da linha cujo primeiro campo é "token:"
Bruno Bronosky
fonte
2
Existe um PowerShell equivalente ao awk?
duct_tape_coder
1
@duct_tape_coder apenas kubectl -n kube-system obtenha segredos e encontre o tokenm com o nome deployment-controller-token-SOMEHASH; depois, apenas kubectl -n kube-system descreve segredo deploy deployment-controller-token-SOMEHASH. É isso que o awk faz.
qubits
2
Ótima resposta. Para dar mais um passo: kubectl describe secret $(kubectl get secret | awk '/^dashboard-token-/{print $1}') | awk '$1=="token:"{print $2}' Ou empurrar direito de sua prancheta 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)do github.com/kubernetes/dashboard/blob/master/docs/user/…
Putnik
48

Se você não deseja conceder permissão de administrador para a conta de serviço do painel, é possível criar uma conta de serviço de administrador de cluster.

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

E então, você pode usar o token da conta de serviço de administração de cluster recém-criada.

$ 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

Eu o citei no guia giantswarm - https://docs.giantswarm.io/guides/install-kubernetes-dashboard/

SunghoMoon
fonte
5
Este funcionou bem para mim, enquanto a resposta aceita estava dentro de mim, mas com alguns erros de autorização.
ZedTuX
3
Observe que este comando concede muitos direitos à conta de serviço e pode não ser aconselhável em um ambiente de produção.
X. Wang
4
pode querer adicionar o ServiceAccount sob kube-sistema também já que este é onde as vidas de painel
atomaras
Trabalhou para mim! eu estava expondo o serviço com a porta 8001 e usei um túnel SSH para acessar da minha máquina local.
Anuradha Fernando
18

Combinando duas respostas: 49992698 e 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}')
Abdennour TOUMI
fonte
8

Uma linha única simples e auto-explicativa para extrair token para o login no painel do kubernetes.

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

Copie o token e cole-o no painel do kubernetes, na opção de login do token, e é bom usar o painel do kubernetes

Rewanth Cool
fonte
5

Todas as respostas anteriores são boas para mim. Mas uma resposta direta do meu lado viria de https://github.com/kubernetes/dashboard/wiki/Creating-sample-user#bearer-token . Apenas use kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}'). Você vai ter muitos valores para algumas teclas ( Name, Namespace, Labels, ..., token). O mais importante é o tokenque corresponde ao seu nome. copie esse token e cole-o na caixa de token. Espero que isto ajude.

Julien Nyambal
fonte
Depois de tentar várias das respostas acima, essa resposta funcionou. Copiei um token, colei e pronto, estou dentro.
CENTURION
5

Você precisa seguir estas etapas antes da autenticação do token

  1. Crie uma conta de serviço de administrador de cluster

    kubectl create serviceaccount dashboard -n default
    
  2. Adicione as regras de ligação de cluster à sua conta do painel

    kubectl create clusterrolebinding dashboard-admin -n default --clusterrole=cluster-admin --serviceaccount=default:dashboard
    
  3. Obtenha o token secreto com este comando

    kubectl get secret $(kubectl get serviceaccount dashboard -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode
    
  4. Escolha a autenticação de token na página de login do painel Kubernetes insira a descrição da imagem aqui

  5. Agora você pode fazer o login

UDIT JOSHI
fonte
0

Baixar https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/alternative/kubernetes-dashboard.yaml

adicionar

type: NodePort for the Service

E, em seguida, execute este comando:

kubectl apply -f kubernetes-dashboard.yaml

Encontre a porta exposta com o comando:

kubectl get services -n kube-system

Você deve conseguir o painel em http: // hostname :posedport / sem autenticação

Rajesh Guptan
fonte
Este é um conselho absolutamente terrível. Mesmo que seja tecnicamente correto
Christopher Thomas
0

O login ignorado foi desativado por padrão devido a problemas de segurança. https://github.com/kubernetes/dashboard/issues/2672

no seu painel yaml adicione este argumento

- --enable-skip-login

recuperá-lo

Ravi
fonte
1
Embora esse link possa responder à pergunta, é melhor incluir aqui as partes essenciais da resposta e fornecer o link para referência. As respostas somente para links podem se tornar inválidas se a página vinculada for alterada.
Stefan Becker
1
Embora esse link possa responder à pergunta, é melhor incluir aqui as partes essenciais da resposta e fornecer o link para referência. As respostas somente para links podem se tornar inválidas se a página vinculada for alterada. - Do comentário
Rick
@StefanBecker o link não é a resposta, mas a fonte a provar The skip login has been disabled by default due to security issues. A tentativa de resposta é - --enable-skip-login. Talvez não seja a melhor resposta, talvez, mas esta não é apenas uma resposta.
derHugo 30/01/19
@Rick o link não é a resposta, mas a fonte para provar The skip login has been disabled by default due to security issues. A tentativa de resposta é - --enable-skip-login. Talvez não seja a melhor resposta, talvez, mas esta não é apenas uma resposta.
derHugo 30/01/19