Mostrando entradas con la etiqueta proxy. Mostrar todas las entradas
Mostrando entradas con la etiqueta proxy. Mostrar todas las entradas

miércoles, 14 de octubre de 2020

Acceso a Minikube

En esta entrada, revisaremos diferentes métodos para acceder a un Clúster de Kubernetes. Existe una variedad de clientes externos o scripts personalizados que brindan acceso al Clúster con fines administrativos. Usaremos kubectl como una herramienta de Interfaz de Línea de Comando (Command Line Interface CLI) para acceder al Clúster de Minikube Kubernetes, el panel de Kubernetes como una interfaz de usuario basada en web para interactuar con el Clúster y el comando curl con las credenciales adecuadas, para acceder al Clúster a través de una Application Programmable Interface (API).


¿Qué vamos a ver en este capítulo?
  • Revisar los métodos para acceder a Cualquier clúster de Kubernetes.
  • Configurar kubectl para Linux, macOS y Windows.
  • Acceder al Clúster de Minikube desde el Tablero o Dashboard.
  • Acceder a Minikube a través de la API.
Accediendo a Minikube

Se puede acceder a cualquier Clúster de Kubernetes que funcione correctamente a través de cualquiera de los siguientes métodos:

  • Herramientas y scripts de la Interfaz de Línea de Comandos (CLI)
  • Interfaz de usuario basada en navegador (IU web)
  • API de CLI o mediante programación
Estos métodos son aplicables a todos los clústeres de Kubernetes.

Acceso a Minikube: Interfaz de línea de comandos (CLI)

kubectl es el cliente de la Interfaz de Línea de Comandos (CLI) de Kubernetes para administrar los recursos y las aplicaciones del Clúster. Se puede utilizar de forma independiente o como parte de scripts y herramientas de automatización. Una vez que se han configurado todas las credenciales y los puntos de acceso al Clúster necesarios para kubectl, se puede utilizar de forma remota desde cualquier lugar para acceder a un Clúster.

Posteriormente usaremos kubectl para implementar aplicaciones, administrar y configurar recursos de Kubernetes.

Acceso a Minikube: interfaz de usuario basada en navegador

El panel de Kubernetes proporciona una interfaz de usuario basada en navegador para interactuar con un Clúster de Kubernetes para administrar recursos y aplicaciones en Contenedores. Posteriormente lo usaremos para implementar una aplicación en Contenedores.

Acceso a Minikube: API

Como sabemos, Kubernetes tiene el servidor API, y los operadores/usuarios se conectan a él desde el mundo externo para interactuar con el Clúster. Usando CLI y Web UI, podemos conectarnos al servidor API que se ejecuta en el Nodo Maestro para realizar diferentes operaciones. Podemos conectarnos directamente al servidor API usando sus puntos finales API y enviarle comandos, siempre que podamos acceder al nodo maestro y tener las credenciales correctas.

A continuación, podemos ver una parte del espacio de la API HTTP de Kubernetes:

Espacio de API HTTP de Kubernetes

El espacio de la API HTTP de Kubernetes se puede dividir en tres grupos independientes:

Grupo principal (/api/v1)
Este grupo incluye objetos como Pods, Servicios, nodos, espacios de nombres, mapas de configuración, secretos, etc.

Grupo nombrado
Este grupo incluye objetos en formato /apis/$NAME/$VERSION. Estas diferentes versiones de API implican diferentes niveles de estabilidad y soporte:

Nivel alfa: se puede eliminar en cualquier momento, sin previo aviso. Por ejemplo, / apis / batch / v2alpha1.

Nivel beta: está bien probado, pero la semántica de los objetos puede cambiar de formas incompatibles en una versión beta o estable posterior. Por ejemplo, /apis/certificates.k8s.io/v1beta1.Nivel estable: aparece en el software publicado para muchas versiones posteriores. Por ejemplo, /apis/networking.k8s.io/v1.

Todo el sistema: Este grupo consta de puntos finales de API de todo el sistema, como /healthz, /logs, /metrics, /ui, etc.

Podemos conectarnos a un servidor de API directamente llamando a los respectivos puntos finales de API o mediante la CLI / UI web.

A continuación, veremos cómo podemos acceder al entorno de Minikube que configuramos en el capítulo anterior.


kubectl

kubectl generalmente se instala antes de instalar Minikube, pero también podemos instalarlo después. Una vez instalado, kubectl recibe su configuración automáticamente para el acceso al Clúster de Minikube Kubernetes. Sin embargo, en otras configuraciones de Clúster de Kubernetes, es posible que debamos configurar los puntos de acceso del Clúster y los certificados que kubectl requiere para acceder al Clúster.

Existen diferentes métodos que se pueden usar para instalar kubectl, que se mencionan en la documentación de Kubernetes. Para obtener los mejores resultados, se recomienda mantener kubectl en la misma versión que Kubernetes ejecutado por Minikube; en el momento en que se escriben estas líneas, la última versión estable era la v1.14.1. A continuación, veremos algunos pasos para instalarlo en sistemas Linux, macOS y Windows.


Instalación de kubectl en Linux

Para instalar kubectl en Linux, siga las instrucciones que están a continuación:

Descargue el binario kubectl estable más reciente, hágalo ejecut'able y muévalo al PATH o RUTA:

$ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/NOTA: Para descargar y configurar una versión específica de kubectl (como v1.14.1), ejecute el siguiente comando:

$ curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.14.1/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/


Installing kubectl on macOS

Hay dos formas de instalar kubectl en macOS: manualmente y usando el administrador de paquetes Homebrew. A continuación, proporcionaremos instrucciones para ambos métodos.

Para instalar kubectl manualmente, descargue el último binario estable de kubectl, hágalo ejecutable y muévalo a la RUTA con el siguiente comando:

$ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/NOTE: To download and setup a specific version of kubectl (such as v1.14.1), issue the following command:

$ curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.14.1/bin/darwin/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/To install kubectl with Homebrew package manager, issue the following command:

$ brew install kubernetes-cli


Instalación de kubectl en Windows

Para instalar kubectl, podemos descargar el binario directamente o usar curl desde la CLI. Una vez descargado, el binario debe agregarse a la RUTA.

Enlace de descarga directa para binario v1.14.1 (simplemente haga clic a continuación):https://storage.googleapis.com/kubernetes-release/release/v1.14.1/bin/windows/amd64/kubectl.exeNOTA: Obtenga el último número de versión de la versión estable de kubectl en el enlace a continuación y, si es necesario, edite el enlace de descarga para el binario desde arriba:

https://storage.googleapis.com/kubernetes-release/release/stable.txtUtilice el comando curl (si está instalado) de la CLI:

$ curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.14.1/bin/windows/amd64/kubectl.exeUna vez descargado, mueva el binario kubectl al PATH o RUTA.

Archivo de configuración de kubectl

Para acceder al Clúster de Kubernetes, el cliente de kubectl necesita el endpoint del Nodo Maestro o Principal y las credenciales adecuadas para poder interactuar con el Servidor API que se ejecuta en el Nodo Maestro o Principal. Al iniciar Minikube, el proceso de inicio crea, de forma predeterminada, un archivo de configuración "config", dentro del directorio .kube (a menudo denominado archivo dot-kube-config), que reside en el directorio de inicio del usuario.

El archivo de configuración tiene todos los detalles de conexión requeridos por kubectl. De forma predeterminada, el binario kubectl analiza este archivo para encontrar el punto final de conexión del nodo principal, junto con las credenciales. Para ver los detalles de la conexión, podemos ver el contenido del archivo ~/.kube/config (en Linux) o ejecutar el siguiente comando:

$ kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority: /home/student/.minikube/ca.crt
server: https://192.168.99.100:8443
name: minikube
contexts:
- context:
cluster: minikube
user: minikube
name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
user:
client-certificate: /home/student/.minikube/client.crt
client-key: /home/student/.minikube/client.key

Una vez que kubectl está instalado, podemos obtener información sobre el Clúster de Minikube con el comando kubectl cluster-info:

$ kubectl cluster-info
Kubernetes master is running at https://192.168.99.100:8443
KubeDNS is running at https://192.168.99.100:8443//api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

Puede encontrar más detalles sobre las opciones de la línea de comandos de kubectl aquí.

Aunque para el Clúster de Kubernetes instalado por Minikube el archivo ~/.kube/config se crea automáticamente, este no es el caso de los Clústeres de Kubernetes instalados por otras herramientas. En otros casos, el archivo de configuración debe crearse manualmente y, a veces, volver a configurarse para adaptarse a varias configuraciones de red y cliente/servidor.


Instalación del cliente CLI de kubectl (demostración)


Panel o Dashboard de Kubernetes

Como se mencionó anteriormente, el Panel o Dashboard de Kubernetes proporciona una interfaz de usuario basada en navedador para la administración de Clústeres de Kubernetes. Para acceder al panel desde Minikube, podemos usar el comando del Panel de Minikube, que abre una nueva pestaña en nuestro navegador web, mostrando el Panel de Kubernetes:

$ minikube dashboard

Panel de Kubernetes

NOTA: En caso de que el navegador no abra otra pestaña y no muestre el Panel de Control como se esperaba, verifique el resultado en su terminal, ya que puede mostrar un enlace para el Panel de Control (junto con algunos mensajes de error). Copie y pegue ese enlace en una nueva pestaña de su navegador. Dependiendo de las características de su terminal, es posible que pueda simplemente hacer clic o hacer clic con el botón derecho en el enlace para abrirlo directamente en el navegador. El enlace puede parecer similar a:

http://127.0.0.1:37751/api/v1/namespaces/kube-system/services/http:kubernetes-dashboard:/proxy/

Lo más probable es que la única diferencia sea el número de PUERTO, que arriba es 37751. Su número de puerto puede ser diferente.

Después de cerrar sesión/iniciar sesión o reiniciar su estación de trabajo, se debería esperar el comportamiento normal (donde el comando del tablero de Minikube abre directamente una nueva pestaña en su navegador que muestra el Tablero).

El comando 'kubectl proxy'

Al emitir el comando kubectl proxy, kubectl se autentica con el servidor API en el Nodo Maestro o Principal y hace que el panel esté disponible en una URL ligeramente diferente a la anterior, esta vez en nuestro ejemplo, a través del puerto proxy 8001.

Primero, emitimos el comando kubectl proxy:

$ kubectl proxy
Starting to serve on 127.0.0.1:8001

Bloquea el terminal mientras se ejecuta el proxy. Con el proxy en ejecución, podemos acceder al Panel de Control a través de la nueva URL (simplemente haga clic en él a continuación; debería funcionar en su estación de trabajo). Una vez que detengamos el proxy (con CTRL + C), el Panel de Control ya no será accesible.

http://127.0.0.1:8001/api/v1/namespaces/kube-system/services/kubernetes-dashboard:/proxy/#!/overview?namespace=default

Panel de Kubernetes a través del proxy


API con 'kubectl proxy'

Cuando se está ejecutando el proxy kubectl, podemos enviar solicitudes a la API a través del host local en el puerto proxy 8001 (desde otro terminal, ya que el proxy bloquea el primer terminal):

$ curl http://localhost:8001/
{
"paths": [
"/api",
"/api/v1",
"/apis",
"/apis/apps",
......
......
"/logs",
"/metrics",
"/openapi/v2",
"/version"
]
}

Con la solicitud curl anterior, solicitamos todos los puntos finales de API del servidor de API. Al hacer clic en el enlace de arriba (en el comando curl), se abrirá la misma salida de listado en una pestaña del navegador.

Podemos explorar todas las combinaciones de rutas con curl o en un navegador, como:

http://localhost:8001/api/v1http://localhost:8001/apis/apps/v1http://localhost:8001/healthzhttp://localhost:8001/metrics

API sin 'proxy kubectl'

Cuando no usamos el proxy kubectl, necesitamos autenticarnos en el servidor API cuando enviamos solicitudes API. Podemos autenticarnos proporcionando un token de portador al emitir un curl, o proporcionando un conjunto de claves y certificados.

Un token de portador es un token de acceso que es generado por el servidor de autenticación (el servidor API en el Nodo Maestro o Principal) y devuelto al cliente. Con ese token, el cliente puede volver a conectarse al servidor de la API de Kubernetes sin proporcionar más detalles de autenticación y, luego, acceder a los recursos.

Para obtener el token:

$ TOKEN=$(kubectl describe secret -n kube-system $(kubectl get secrets -n kube-system | grep default | cut -f1 -d ' ') | grep -E '^token' | cut -f2 -d':' | tr -d '\t' | tr -d " ")

Para obtener el API server endpoint:

$ APISERVER=$(kubectl config view | grep https | cut -f 2- -d ":" | tr -d " ")

Confirme que APISERVER almacenó la misma IP que la IP maestra de Kubernetes emitiendo los siguientes 2 comandos y comparando sus resultados:

$ echo $APISERVER
https://192.168.99.100:8443

$ kubectl cluster-info
Kubernetes master is running at https://192.168.99.100:8443 ...

Acceda al servidor API usando el comando curl, como se muestra a continuación:

$ curl $APISERVER --header "Authorization: Bearer $TOKEN" --insecure
{
"paths": [
"/api",
"/api/v1",
"/apis",
"/apis/apps",
......
......
"/logs",
"/metrics",
"/openapi/v2",
"/version"
]
}

En lugar del token de acceso, podemos extraer el certificado de cliente, la clave del cliente y los datos de la autoridad de certificación del archivo .kube/config. Una vez extraídos, se codifican y luego se pasan con un comando curl para la autenticación. El nuevo comando curl es similar a:

$ curl $APISERVER --cert encoded-cert --key encoded-key --cacert encoded-ca


Acceso al clúster con el panel y las API de consulta con CLI (demostración)