Instalación del cliente kubectl en Ubuntu y conectarnos a un Cluster de Kubernetes

Para evitar errores en las validaciones de las API que utiliza kubernetes es necesario instalar la misma versión de kubectl que la versión de kubernetes que corre en nuestro Cluster.

Para este ejemplo vamos a utilizar un cluster basado en minikube. Como todos sabemos minikube es un cluster formado por una sola máquina y que podemos utilizar cuando queremos formarnos y comprender como kubernetes funciona.

Este artículo no pretende dar los pasos necesario para conectarnos a un cluster de producción si no identificar los recursos que intervienen entre un cliente kubectl y un Cluster de kubernetes. Como en casi todos estos sistemas todo esta basado en una autenticación basada en certificados.

Instalación en un sistema linux

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

Configurar el acceso al Cluster

La configuración de acceso a un Cluster se encuentra normalmente en

~/.kube/config

En el caso que nos ocupa estamos utilizando minikube en un sistema Windows y lo que queremos es poder conectarnos desde una maquina virtual Ubuntu al cluster de minikube. Copiamos la configuración de nuestro sistema en nuestro Ubuntu.

Lo normal no es hacerlo así, si no que nos proporcionen un certificado cliente para nosotros y así autenticarnos con el cluster, o bien generar nosotros una petición de firma de certificado y que la CA nos la firme.

La configuración en nuestro sistema Windows es la siguiente:

$ cat ~/.kube/config
apiVersion: v1
clusters:
- cluster:
    certificate-authority: C:\Software\minikube\.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: C:\Software\minikube\.minikube\apiserver.crt
    client-key: C:\Software\minikube\.minikube\apiserver.key

$ kubectl config view
apiVersion: v1
clusters:
- cluster:
    certificate-authority: C:\Software\minikube\.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: C:\Software\minikube\.minikube\apiserver.crt
    client-key: C:\Software\minikube\.minikube\apiserver.key

Copiamos dicha configuración en Ubuntu en
~/.kube/config
y modificamos la ruta de los certificados. Como vemos tenemos

  • el certificado de la CA

y

  • clave privada de cliente y el certificado de cliente

que nuestro administrador de kubernetes nos ha generado para nosotros.

Nuestra configuración en Ubuntu quedaría:

$ find /var/minikube/
/var/minikube/
/var/minikube/.minikube
/var/minikube/.minikube/ca.crt
/var/minikube/.minikube/apiserver.key
/var/minikube/.minikube/apiserver.crt

$ cat ~/.kube/config
apiVersion: v1
clusters:
- cluster:
    certificate-authority: /var/minikube/.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: /var/minikube/.minikube/apiserver.crt
    client-key: /var/minikube/.minikube/apiserver.key

Validamos la configuración

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"7", GitVersion:"v1.7.0", GitCommit:"d3ada0119e776222f11ec7945e6d860061339aad", GitTreeState:"clean", BuildDate:"2017-06-29T23:15:59Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"7", GitVersion:"v1.7.0", GitCommit:"d3ada0119e776222f11ec7945e6d860061339aad", GitTreeState:"clean", BuildDate:"2017-07-26T00:12:31Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}

$ kubectl get all
NAME                                   READY     STATUS    RESTARTS   AGE
po/frontend-3872149310-0qz3m           1/1       Running   4          1d
po/hello-1243552595-bv62v              1/1       Running   2          1d
po/hello-1243552595-h9fdd              1/1       Running   2          1d
po/hello-1243552595-jmwp2              1/1       Running   2          1d
po/hello-1243552595-k3q4d              1/1       Running   2          1d
po/hello-1243552595-w4sw1              1/1       Running   2          1d
po/hello-1243552595-xb96t              1/1       Running   2          1d
po/hello-1243552595-xvw2q              1/1       Running   2          1d
po/hello-minikube-180744149-b7g45      1/1       Running   5          48d
po/nginx-deployment-2078889897-mcdz4   1/1       Running   3          2d
po/nginx-deployment-2078889897-qc4dk   1/1       Running   3          2d
po/nginx-deployment-2078889897-xnzzh   1/1       Running   3          2d

NAME                 CLUSTER-IP   EXTERNAL-IP   PORT(S)          AGE
svc/frontend         10.0.0.30         80:31303/TCP     1d
svc/hello            10.0.0.6             80/TCP           1d
svc/hello-minikube   10.0.0.201        8080:31033/TCP   48d
svc/kubernetes       10.0.0.1             443/TCP          49d

NAME                      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deploy/frontend           1         1         1            1           1d
deploy/hello              7         7         7            7           1d
deploy/hello-minikube     1         1         1            1           48d
deploy/nginx-deployment   3         3         3            3           2d

NAME                             DESIRED   CURRENT   READY     AGE
rs/frontend-3872149310           1         1         1         1d
rs/hello-1243552595              7         7         7         1d
rs/hello-minikube-180744149      1         1         1         48d
rs/nginx-deployment-2078889897   3         3         3         2d
rs/nginx-deployment-2558903419   0         0         0         2d
rs/nginx-deployment-3896099094   0         0         0         2d

Configurar el acceso a más de un cluster

Desde nuestr cliente kubectl podemos conectarnos a más de un cluster. Solo tenemos que modificar el fichero de configuración añadiendo la nueva entrada. Si nos fijamos tenemos varias secciones para indicar la configuración de mas de un cluster y el mecanismo de autenticación para cada uno de ellos.

Estas secciones son <strong>clusters</strong>, <strong>context</strong> y <strong>users</strong>.

Para cambiarnos y apuntar a otro cluster diferente de donde nos encontremos es bastante sencillo. Solo tenemos que apuntar al contexto que queremos.

En este caso solo tenemos 1 contexto, es decir 1 configuración a cluster. El comando sería:

$ kubectl config use-context minikube
Switched to context "minikube"
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s