El archivo kubeconfig ejecuta kubectl para resolver el problema de autenticación del certificado x509

Sobre el problema de los dispositivos de red externos que acceden a un clúster de kubernetes creado en la red interna cuya dirección de publicidad es la IP de la red interna

Descripción del entorno

Descripción del problema

causas del problema

solución


Descripción del entorno

  • Kubernetes versión 1.22
  • Cliente de prueba centos7


Descripción del problema

  1. Copie el archivo /etc/kubernetes/admin.conf del clúster de kubernetes integrado en el entorno de red de intranet/nube en un dispositivo equipado con kubectl en la red externa y coloque el contenido del archivo en ~/.kube del dispositivo de red externo/ archivo de configuración
  2. Luego modifique el servidor en el archivo de configuración: https://${ip}:6443 La ip que contiene es la IP de la red pública del nodo maestro del clúster de kubernetes
  3. Luego use métodos como kubectl get pods para acceder al clúster de kubernetes
  4. El resultado devuelto es No se puede conectar al servidor: x509: el certificado es válido para ${la lista de direcciones IP de la red interna del clúster de kubernetes}, no para ${la dirección IP de la red externa del dispositivo maestro del clúster de kubernetes}


causas del problema


La dirección de anuncio de servidor ap de nuestros kubernetes es una IP de intranet. De forma predeterminada, la CA de kubernetes creada por sí misma emitirá un certificado para el servidor ap. El certificado accesible predeterminado es la IP de intranet, kubernetes, kubernetes.default kubernetes.default. svc y kubernetes.default.svc.cluster.local no incluyen la IP pública del nodo maestro. Por lo tanto, es imposible acceder a kubernetes directamente a través de admin.conf.

Puede ejecutar el siguiente comando en el nodo maestro para obtener la información de la dirección que permite el acceso al servidor analizando el certificado del servidor ap

openssl x509 -noout -text -in /etc/kubernetes/pki/apiserver.crt |grep IP

solución


Elimine el certificado y la clave del servidor ap en el clúster de kubernetes actual

rm /etc/kubernetes/pki/apiserver.*


Generar nuevo certificado y clave de apserver

Lo instalé a través de un sellador, por lo que necesito agregar la dirección del servidor configurada en el archivo de configuración del nodo del plano de control a la segunda cadena de direcciones IP: apiserver.cluster.local

kubeadm init phase certs apiserver \ 
--apiserver-advertise-address ${原来的advertise ip} \
--apiserver-cert-extra-sans ${master的外网ip}


Actualizar admin.conf

kubeadm alpha certs renew admin.conf


volver a aplicar un servidor

kubectl apply -f /etc/kubernetes/manifests/kube-apiserver.yaml

En este momento, mediante el análisis de openssl para obtener el contenido del certificado, podemos encontrar que se ha agregado la dirección que queremos expandir 

Cómo conectar directamente el programa al apserver de forma remota

También tomado del archivo kubeconfig en el paso 2. de la descripción del problema, podemos usar go-client para compilar rest.Config y modificar la variable miembro Insecure de rest.Config a true para omitir la verificación del certificado.

config.Insecure = true

Continúe ejecutando, el comentario es que el archivo ca no admite el parámetro de bandera de inseguro, para esto, necesitamos eliminar los datos ca en el archivo de configuración, continúe intentándolo y puede acceder normalmente. La idea aquí también se refiere al código fuente de kubectl.

Supongo que te gusta

Origin blog.csdn.net/kingu_crimson/article/details/127806193
Recomendado
Clasificación