Kubernetes: x509 cert questões após kubeadm init

Criado em 1 jul. 2017  ·  28Comentários  ·  Fonte: kubernetes/kubernetes

RELATÓRIO DE BUG: (eu acho?)

O que aconteceu :

Executei as seguintes etapas no Ubuntu 16.04:

  1. sudo apt-get update
  2. sudo apt-get upgrade
  3. sudo su
  4. kubeadm reset
  5. kubeadm init --token [redacted] --apiserver-advertise-address=192.168.13.1 --pod-network-cidr=10.244.0.0/16
  6. exit
  7. mkdir -p $HOME/.kube
  8. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  9. sudo chown $(id -u):$(id -g) $HOME/.kube/config
  10. kubectl get nodes

Ao fazer isso, recebo:

Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")

Eu tentei desinstalar kubectl , kubeadm e kubelet algumas vezes (mesmo com --purge ) e não importa o que eu faça, ele (kubeadm 1.7 ) não gera um admin.conf . No entanto, eu corro o seguinte:

curl --cacert /etc/kubernetes/pki/ca.crt --cert /etc/kubernetes/pki/apiserver-kubelet-client.crt --key /etc/kubernetes/pki/apiserver-kubelet-client.key https://192.168.13.1:6443

e pegue:

{
  "paths": [
    "/api",
    "/api/v1",
    "/apis",
    "/apis/",
    "/apis/apiextensions.k8s.io",
    "/apis/apiextensions.k8s.io/v1beta1",
    "/apis/apiregistration.k8s.io",
    "/apis/apiregistration.k8s.io/v1beta1",
    "/apis/apps",
    "/apis/apps/v1beta1",
    "/apis/authentication.k8s.io",
    "/apis/authentication.k8s.io/v1",
    "/apis/authentication.k8s.io/v1beta1",
    "/apis/authorization.k8s.io",
    "/apis/authorization.k8s.io/v1",
    "/apis/authorization.k8s.io/v1beta1",
    "/apis/autoscaling",
    "/apis/autoscaling/v1",
    "/apis/batch",
    "/apis/batch/v1",
    "/apis/certificates.k8s.io",
    "/apis/certificates.k8s.io/v1beta1",
    "/apis/extensions",
    "/apis/extensions/v1beta1",
    "/apis/networking.k8s.io",
    "/apis/networking.k8s.io/v1",
    "/apis/policy",
    "/apis/policy/v1beta1",
    "/apis/rbac.authorization.k8s.io",
    "/apis/rbac.authorization.k8s.io/v1alpha1",
    "/apis/rbac.authorization.k8s.io/v1beta1",
    "/apis/settings.k8s.io",
    "/apis/settings.k8s.io/v1alpha1",
    "/apis/storage.k8s.io",
    "/apis/storage.k8s.io/v1",
    "/apis/storage.k8s.io/v1beta1",
    "/healthz",
    "/healthz/autoregister-completion",
    "/healthz/ping",
    "/healthz/poststarthook/apiservice-registration-controller",
    "/healthz/poststarthook/apiservice-status-available-controller",
    "/healthz/poststarthook/bootstrap-controller",
    "/healthz/poststarthook/ca-registration",
    "/healthz/poststarthook/extensions/third-party-resources",
    "/healthz/poststarthook/generic-apiserver-start-informers",
    "/healthz/poststarthook/kube-apiserver-autoregistration",
    "/healthz/poststarthook/rbac/bootstrap-roles",
    "/healthz/poststarthook/start-apiextensions-controllers",
    "/healthz/poststarthook/start-apiextensions-informers",
    "/healthz/poststarthook/start-kube-aggregator-informers",
    "/healthz/poststarthook/start-kube-apiserver-informers",
    "/logs",
    "/metrics",
    "/swagger-2.0.0.json",
    "/swagger-2.0.0.pb-v1",
    "/swagger-2.0.0.pb-v1.gz",
    "/swagger.json",
    "/swaggerapi",
    "/ui",
    "/ui/",
    "/version"
  ]
}

O que você esperava que acontecesse :

Depois de inicializar o mestre por meio de kubeadm init , esperava poder usar kubectl para instalar um plugin de rede; visto que é x509 , não posso fazer isso.

Meio Ambiente :

  • Versão do Kubernetes (use kubectl version ): 1.7
  • SO (por exemplo, de / etc / os-release): Ubuntu 16.04.2 LTS
  • Kernel (por exemplo, uname -a ): Linux radium-control 4.4.0-83-generic # 106-Ubuntu SMP Mon Jun 26 17:54:43 UTC 2017 x86_64 x86_64 x86_64 GNU / Linux
arekubeadm sicluster-lifecycle

Comentários muito úteis

você tem $KUBECONFIG apontando para /etc/kubernetes/kubelet.conf ?

export KUBECONFIG=/etc/kubernetes/kubelet.conf
kubectl get nodes

Todos 28 comentários

@carldanley Não há rótulos de assinatura neste assunto. Adicione um rótulo de assinatura por:
(1) mencionando um sig: @kubernetes/sig-<team-name>-misc
por exemplo, @kubernetes/sig-api-machinery-* para API Machinery
(2) especificando o rótulo manualmente: /sig <label>
por exemplo, /sig scalability para sig / escalabilidade

_Observação: o método (1) acionará uma notificação para a equipe. Você pode encontrar a lista de equipes aqui e a lista de marcadores aqui _

/ sig cluster-lifecycle

Não tenho certeza se isso ajuda, mas eu fiz o mesmo e percebi que estava usando o guia de configuração antigo, copiando /etc/kubernetes/admin.conf em ~/.kube/admin.conf e definindo $KUBECONFIG=$HOME/.kube/admin.conf . Limpei a variável de ambiente e kubectl voltou a usar ~/.kube/config padrão.

Também estou vendo isso usando kubeadm v1.7 - está impedindo que os nós se juntem ao cluster

Mesmo erro para minha instalação. Tente com v1.6.5 e 1.6.7 funciona bem.

Mesmo problema aqui.

.

( kubeadm init parece bem)

ns2 ~ # kubeadm init
[kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters.
[init] Using Kubernetes version: v1.7.3
[init] Using Authorization modes: [Node RBAC]
[preflight] Running pre-flight checks
[preflight] WARNING: docker version is greater than the most recently validated version. Docker version: 17.03.1-ce. Max validated version: 1.12
[preflight] WARNING: no supported init system detected, skipping checking for services
[preflight] WARNING: no supported init system detected, skipping checking for services
[preflight] WARNING: no supported init system detected, skipping checking for services
[preflight] WARNING: socat not found in system path
[preflight] No supported init system detected, won't ensure kubelet is running.
[certificates] Generated CA certificate and key.
[certificates] Generated API server certificate and key.
[certificates] API Server serving cert is signed for DNS names [ns2 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 ip_of_my_server]
[certificates] Generated API server kubelet client certificate and key.
[certificates] Generated service account token signing key and public key.
[certificates] Generated front-proxy CA certificate and key.
[certificates] Generated front-proxy client certificate and key.
[certificates] Valid certificates and keys now exist in "/etc/kubernetes/pki"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/controller-manager.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/scheduler.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/admin.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"
[apiclient] Created API client, waiting for the control plane to become ready
[apiclient] All control plane components are healthy after 36.004283 seconds
[token] Using token: 62af23.9fba33a48799d425
[apiconfig] Created RBAC rules
[addons] Applied essential addon: kube-proxy
[addons] Applied essential addon: kube-dns

Your Kubernetes master has initialized successfully!

To start using your cluster, you need to run (as a regular user):

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  http://kubernetes.io/docs/admin/addons/

You can now join any number of machines by running the following on each node
as root:

  kubeadm join --token [some string] [ip_of_my_server]:6443

( kubeadm join parece bom)

h1 ~ # kubeadm join --token [some string] [ip_of_my_server]:6443 --skip-preflight-checks 
[kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters.
[preflight] Skipping pre-flight checks
[discovery] Trying to connect to API Server "192.168.0.254:6443"
[discovery] Created cluster-info discovery client, requesting info from "https://192.168.0.254:6443"
[discovery] Cluster info signature and contents are valid, will use API Server "https://192.168.0.254:6443"
[discovery] Successfully established connection with API Server "192.168.0.254:6443"
[bootstrap] Detected server version: v1.7.3
[bootstrap] The server supports the Certificates API (certificates.k8s.io/v1beta1)
[csr] Created API client to obtain unique certificate for this node, generating keys and certificate signing request
[csr] Received signed certificate from the API server, generating KubeConfig...
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"

Node join complete:
* Certificate signing request sent to master and response
  received.
* Kubelet informed of new secure connection details.

Run 'kubectl get nodes' on the master to see this machine join.

(mas kubectl get nodes falha)

byungnam2<strong i="17">@ns2</strong> ~ $ kubectl get nodes
Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")

você tem $KUBECONFIG apontando para /etc/kubernetes/kubelet.conf ?

export KUBECONFIG=/etc/kubernetes/kubelet.conf
kubectl get nodes

@liggitt Depois de definir $KUBECONFIG como /etc/kubernetes/kubelet.conf , agora aparece um erro de tempo limite.

ns2 ~ # ./kubernetes/kubernetes/server/bin/kubectl get nodes
Error from server (ServerTimeout): the server cannot complete the requested operation at this time, try again later (get nodes)

E agora eu quero de onde veio o $KUBECONFIG porque não existe tal declaração no manual que estou fazendo referência.

A partir da saída do comando node join:

[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"

Encontrou o mesmo problema ao jogar com o kubeadm.

Depois de kubeadm init e kubeadm reset por algumas vezes, o kubelet falhará na comunicação com o apiserver porque certificate signed by unknown authority (nos logs do kubelet). E também blocos de kubeadm init para sempre.

Depois de remover /run/kubernetes/ manualmente, todas as coisas voltam. Talvez haja problemas de limpeza de certificados ao executar kubeadm reset ?

/ area kubeadm

Estou no kubeadm 1.8 e esse problema ainda ocorre.

ubuntu@ip-172-31-9-157:~$ kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.0", GitCommit:"6e937839ac04a38cac63e6a7a306c5d035fe7b0a", GitTreeState:"clean", BuildDate:"2017-09-28T22:46:41Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
ubuntu@ip-172-31-9-157:~$
ubuntu@ip-172-31-9-157:~$
ubuntu@ip-172-31-9-157:~$ kubectl get nodes
Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")
ubuntu@ip-172-31-9-157:~$
ubuntu@ip-172-31-9-157:~$
ubuntu@ip-172-31-9-157:~$

Eu verifiquei manualmente /var/run/kubernetes . Ele foi limpo quando executei kubeadm reset . Não tenho certeza de qual é o problema real.

ATENÇÃO: "Para começar a usar seu cluster, você precisa executá-lo (como um usuário normal)"

[ root @ master1 ~] # kubectl get nodes
Não foi possível conectar ao servidor: x509: certificado assinado por autoridade desconhecida (possivelmente devido a "crypto / rsa: erro de verificação" ao tentar verificar o certificado de autoridade candidata "kubernetes")

[ root @ master1 ~] # su - regular_user

[ regular_user @ master1 ~] $ mkdir -p $ HOME / .kube
[ regular_user @ master1 ~] $ sudo cp -i /etc/kubernetes/admin.conf $ HOME / .kube / config
[ regular_user @ master1 ~] $ sudo chown $ (id -u): $ (id -g) $ HOME / .kube / config

[ regular_user @ master1 ~] $ kubectl get nodes
NOME STATUS ROLES IDADE VERSÃO
master1.virti.corp NotReady master 6m v1.8.1
master2.virti.corp NotReady4m v1.8.1

@ jeffbr13 Obrigado. Funciona.

Atualize os documentos com esta solução alternativa

Se você kubeadm reset e, em seguida, kubeadm init novamente, e se você já executou o seguinte como root, será necessário executá-lo novamente (como root) para obter a nova configuração:
mkdir -p $ HOME / .kube
sudo cp -i /etc/kubernetes/admin.conf $ HOME / .kube / config
sudo chown $ (id -u): $ (id -g) $ HOME / .kube / config

Então você ainda pode executar como root.

se for descoberto que, se você for executar "sudo kubeadm reset", será necessário remover seu diretório .kube para limpar os diretórios em cache.
Depois disso, você pode seguir @petersonwsantos
oh, certifique-se de definir KUBECONFIG com o que quer que você (re) nomeie seu arquivo de configuração, por exemplo, $ HOME / .kube / config

tanques freind ints true.

Configure com as seguintes linhas, _ $ kubectl get nodes_ works:

_root: ~ / k8s # cat 04-config.sh
mkdir -p $ HOME / .kube
sudo cp -i /etc/kubernetes/admin.conf $ HOME / .kube / config
sudo chown $ (id -u): $ (id -g) $ HOME / .kube / config
sudo chmod 777 $ HOME / .kube / config
exportar KUBECONFIG = / etc / kubernetes / kubelet.conf
exportar KUBECONFIG = / home / ubuntu / .kube / config
kubectl get nodes

isso provavelmente ocorre porque você tem uma configuração de vários mestres e gerou /etc/kubernetes/pki/ca.* em cada um dos mestres. Em vez de copiá-los do primeiro master para o resto.

Encontrei a solução na documentação do Kubernetes
enquanto segue a documentação, não se esqueça de criar o diretório .kube usando este comando
mkdir -p $HOME/.kube

Porque conforme você precisa deste comando, ele moverá o diretório .kube
mv $HOME/.kube $HOME/.kube.bak

https://kubernetes.io/docs/setup/independent/trou troubleshooting-kubeadm/

Para outras pessoas que podem ter esse problema, podem tentar mover a pasta /root/.kube para o local de backup, se houver, e tentar novamente. É muito possível ter uma versão raiz em cache sendo usada que não seja mais válida, pois você executará kubeadm como sudo.

Meu problema era que eu tinha certificados personalizados que criei durante o guia de primeiros passos do KubeEdge. Não mexer com ssl e kubeedge funcionou.

ATENÇÃO: "Para começar a usar seu cluster, você precisa executá-lo (como um usuário normal)"

[ root @ master1 ~] # kubectl get nodes
Não foi possível conectar ao servidor: x509: certificado assinado por autoridade desconhecida (possivelmente devido a "crypto / rsa: erro de verificação" ao tentar verificar o certificado de autoridade candidata "kubernetes")

[ root @ master1 ~] # su - regular_user

[ regular_user @ master1 ~] $ mkdir -p $ HOME / .kube
[ regular_user @ master1 ~] $ sudo cp -i /etc/kubernetes/admin.conf $ HOME / .kube / config
[ regular_user @ master1 ~] $ sudo chown $ (id -u): $ (id -g) $ HOME / .kube / config

Isso funciona. Exceto que eu tive que definir meu KUBECONFIG novamente, uma vez que ele foi alterado

exportar KUBECONFIG = $ HOME / .kube / config

[ regular_user @ master1 ~] $ kubectl get nodes
NOME STATUS ROLES IDADE VERSÃO
master1.virti.corp NotReady master 6m v1.8.1
master2.virti.corp NotReady 4m v1.8.1

você tem $KUBECONFIG apontando para /etc/kubernetes/kubelet.conf ?

export KUBECONFIG=/etc/kubernetes/kubelet.conf
kubectl get nodes

isso funciona para mim, muito obrigado.

exportar KUBECONFIG = / etc / kubernetes / kubelet.conf
kubectl get nodes

é trabalho de mim

ATENÇÃO: "Para começar a usar seu cluster, você precisa executá-lo (como um usuário normal)"

[ root @ master1 ~] # kubectl get nodes
Não foi possível conectar ao servidor: x509: certificado assinado por autoridade desconhecida (possivelmente devido a "crypto / rsa: erro de verificação" ao tentar verificar o certificado de autoridade candidata "kubernetes")

[ root @ master1 ~] # su - regular_user

[ regular_user @ master1 ~] $ mkdir -p $ HOME / .kube
[ regular_user @ master1 ~] $ sudo cp -i /etc/kubernetes/admin.conf $ HOME / .kube / config
[ regular_user @ master1 ~] $ sudo chown $ (id -u): $ (id -g) $ HOME / .kube / config

[ regular_user @ master1 ~] $ kubectl get nodes
NOME STATUS ROLES IDADE VERSÃO
master1.virti.corp NotReady master 6m v1.8.1
master2.virti.corp NotReady 4m v1.8.1

Isso funcionou!

Depois de kubeadm init você deve remover a pasta $ HOME / .kube e criar uma nova:

mkdir -p $ HOME / .kube
sudo cp -i /etc/kubernetes/admin.conf $ HOME / .kube / config
sudo chown $ (id -u): $ (id -g) $ HOME / .kube / config

Esta página foi útil?
0 / 5 - 0 avaliações