Kubernetes: Problemas con el certificado x509 después de kubeadm init

Creado en 1 jul. 2017  ·  28Comentarios  ·  Fuente: kubernetes/kubernetes

INFORME DE ERROR: (¿creo?)

Que paso :

Ejecuté los siguientes pasos en 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

Al hacer esto, recibo:

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")

Intenté desinstalar kubectl , kubeadm y kubelet un par de veces (incluso con --purge ) y no importa lo que haga, (kubeadm 1.7 ) no genera un admin.conf funcione. Sin embargo, ejecuto lo siguiente:

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

y obten:

{
  "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"
  ]
}

Qué esperabas que sucediera :

Después de inicializar el maestro a través de kubeadm init , esperaba poder usar kubectl para instalar un complemento de red; ya que es x509 , no puedo hacer eso.

Medio ambiente :

  • Versión de Kubernetes (use kubectl version ): 1.7
  • SO (por ejemplo, de / etc / os-release): Ubuntu 16.04.2 LTS
  • Kernel (por ejemplo, uname -a ): Linux radium-control 4.4.0-83-generic # 106-Ubuntu SMP Lun 26 de junio 17:54:43 UTC 2017 x86_64 x86_64 x86_64 GNU / Linux
arekubeadm sicluster-lifecycle

Comentario más útil

¿tienes $KUBECONFIG apuntando a /etc/kubernetes/kubelet.conf ?

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

Todos 28 comentarios

@carldanley No hay etiquetas sig sobre este tema. Agregue una etiqueta de firma por:
(1) mencionar una firma: @kubernetes/sig-<team-name>-misc
por ejemplo, @kubernetes/sig-api-machinery-* para API Machinery
(2) especificando la etiqueta manualmente: /sig <label>
p. ej., /sig scalability para sig / escalabilidad

_Nota: el método (1) activará una notificación al equipo. Puede encontrar la lista de equipos aquí y la lista de etiquetas aquí _

/ sig cluster-lifecycle

No estoy seguro de si esto ayuda, pero tuve lo mismo y me di cuenta de que estaba usando la guía de configuración anterior, copiando /etc/kubernetes/admin.conf en ~/.kube/admin.conf y configurando $KUBECONFIG=$HOME/.kube/admin.conf . Borré la variable de entorno y kubectl vuelve a usar ~/.kube/config defecto.

También veo esto usando kubeadm v1.7: evita que los nodos se unan al clúster

Mismo error para mi instalación. Prueba con v1.6.5 y 1.6.7 funciona bien.

El mismo problema aqui.

.

( kubeadm init parece estar bien)

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 estar bien)

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.

(pero kubectl get nodes falla)

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")

¿tienes $KUBECONFIG apuntando a /etc/kubernetes/kubelet.conf ?

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

@liggitt Después de configurar $KUBECONFIG en /etc/kubernetes/kubelet.conf , ahora me da un error de tiempo de espera.

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)

Y ahora quiero saber de dónde provienen los $KUBECONFIG porque no hay tal declaración en el manual al que me refiero.

Desde el resultado del comando de unión de nodo:

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

Encontré el mismo problema mientras jugaba con kubeadm.

Después de kubeadm init y kubeadm reset algunas veces, kubelet no se comunicará con un servidor porque certificate signed by unknown authority (en los registros de kubelet). Y también bloques kubeadm init para siempre.

Después de eliminar /run/kubernetes/ manualmente, todo vuelve. ¿Quizás hay problemas de limpieza de certificados cuando se ejecuta kubeadm reset ?

/ area kubeadm

Estoy en kubeadm 1.8 y este problema persiste.

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:~$

Revisé manualmente /var/run/kubernetes . Se limpió cuando ejecuté kubeadm reset . No estoy seguro de cuál es el problema real.

ATENCIÓN: "Para comenzar a utilizar su clúster, debe ejecutar (como usuario habitual)"

[ root @ master1 ~] # kubectl obtener nodos
No se puede conectar al servidor: x509: certificado firmado por una autoridad desconocida (posiblemente debido a "crypto / rsa: error de verificación" al intentar verificar el certificado de autoridad candidata "kubernetes")

[ root @ master1 ~] # su - usuario_regular

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

[ usuario_regular @ master1 ~] $ kubectl obtener nodos
NOMBRE ESTADO ROLES EDAD VERSIÓN
master1.virti.corp NotReady master 6m v1.8.1
master2.virti.corp NotReady4 m v1.8.1

@ jeffbr13 Gracias. Funciona.

Actualice los documentos con esta solución alternativa

Si reinicia kubeadm y luego kubeadm init nuevamente, y si alguna vez ejecutó lo siguiente como root, debe ejecutarlo nuevamente (como root) para obtener la nueva configuración:
mkdir -p $ INICIO / .kube
sudo cp -i /etc/kubernetes/admin.conf $ INICIO / .kube / config
sudo chown $ (id -u): $ (id -g) $ HOME / .kube / config

Entonces aún puede ejecutar como root.

si descubre que si alguna vez va a ejecutar "sudo kubeadm reset", deberá eliminar su directorio .kube para borrar los directorios almacenados en caché.
Después de eso, puedes seguir a @petersonwsantos
oh, asegúrese de configurar KUBECONFIG con el nombre que (re) nombre su archivo de configuración, por ejemplo, $ HOME / .kube / config

tanques amigos verdaderos.

Configúrelo como las siguientes líneas, _ $ kubectl get nodes_ funciona:

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

Es probable que esto se deba a que tiene una configuración de varios maestros y ha generado el /etc/kubernetes/pki/ca.* en cada uno de los maestros. En lugar de copiarlos del primer maestro al resto.

Encontré la solución en la documentación de kubernetes.
mientras seguía la documentación, no se olvidó de crear el directorio .kube con este comando
mkdir -p $HOME/.kube

Porque como necesita este comando, moverá el directorio .kube
mv $HOME/.kube $HOME/.kube.bak

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

Para otros que puedan tener este problema, puede intentar mover la carpeta /root/.kube a la ubicación de la copia de seguridad, si existe, y volver a intentarlo. Es muy posible que se use una versión raíz en caché que ya no sea válida, ya que ejecutará kubeadm como sudo.

Mi problema era que tenía certificados personalizados que había creado durante la guía de introducción de KubeEdge. No jugar con ssl y kubeedge lo hizo funcionar.

ATENCIÓN: "Para comenzar a utilizar su clúster, debe ejecutar (como usuario habitual)"

[ root @ master1 ~] # kubectl obtener nodos
No se puede conectar al servidor: x509: certificado firmado por una autoridad desconocida (posiblemente debido a "crypto / rsa: error de verificación" al intentar verificar el certificado de autoridad candidata "kubernetes")

[ root @ master1 ~] # su - usuario_regular

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

Esto funciona. Excepto que tuve que configurar mi KUBECONFIG nuevamente ya que eso fue cambiado

exportar KUBECONFIG = $ HOME / .kube / config

[ usuario_regular @ master1 ~] $ kubectl obtener nodos
NOMBRE ESTADO ROLES EDAD VERSIÓN
master1.virti.corp NotReady master 6m v1.8.1
master2.virti.corp NotReady 4m v1.8.1

¿tienes $KUBECONFIG apuntando a /etc/kubernetes/kubelet.conf ?

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

eso funciona para mí, muchas gracias.

exportar KUBECONFIG = / etc / kubernetes / kubelet.conf
kubectl obtener nodos

es trabajo de mi parte

ATENCIÓN: "Para comenzar a utilizar su clúster, debe ejecutar (como usuario habitual)"

[ root @ master1 ~] # kubectl obtener nodos
No se puede conectar al servidor: x509: certificado firmado por una autoridad desconocida (posiblemente debido a "crypto / rsa: error de verificación" al intentar verificar el certificado de autoridad candidata "kubernetes")

[ root @ master1 ~] # su - usuario_regular

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

[ usuario_regular @ master1 ~] $ kubectl obtener nodos
NOMBRE ESTADO ROLES EDAD VERSIÓN
master1.virti.corp NotReady master 6m v1.8.1
master2.virti.corp NotReady 4m v1.8.1

¡Esto funcionó!

Después de kubeadm init , debe eliminar la carpeta $ HOME / .kube y crear una nueva:

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

¿Fue útil esta página
0 / 5 - 0 calificaciones