Skip to content

Conexión a Clusters de Kubernetes


Introducción

La conexión a clústeres de Kubernetes es un paso esencial para interactuar con aplicaciones y recursos en entornos contenerizados. Esta guía proporciona un enfoque práctico para establecer conexiones seguras y eficientes, utilizando tanto el archivo kubeconfig desde la línea de comandos como Rancher Manager como un proxy de autenticación. Aprenderás a gestionar el acceso a múltiples clústeres de manera centralizada y a optimizar tus flujos de trabajo administrativos.


Objetivo

Objetivo General:

  • Proporcionar a los usuarios las habilidades necesarias para conectar y gestionar clústeres de Kubernetes utilizando el archivo kubeconfig y Rancher Manager, asegurando una administración segura, centralizada y eficiente en entornos distribuidos.

Laboratorio: Conexión a Clusters de Kubernetes

Antes de comenzar

  • Contar con el acceso al ambiente de laboratorio
  • Haber realizado la validación de conexión y funcionamiento
  • Finalizar las prácticas de laboratorio de las instalaciones de RKE2.

Conexión por medio del CLI

Asegurarse de estar en el servidor bastion con el usuario student

student@lab-0-bastion:~>

  1. Exportar la variable de entorno correspondiente al usuario en el ambiente del servidor Bastion: lab-#-aio
    student@lab-0-bastion:~> export LAB=X
    
  2. Crear un directorio para almacenar los archivos KUBECONFIG de cada cluster creado anteriormente:
    mkdir -p ~/rke2_conn/aio
    
    mkdir -p ~/rke2_conn/cluster1
    
  3. Extraer los archivos KUBECONFIG de los clusters:
    ssh student@lab-${LAB}-aio sudo cat /etc/rancher/rke2/rke2.yaml > ~/rke2_conn/aio/aio_kubeconfig.yaml
    
    ssh student@lab-${LAB}-master sudo cat /etc/rancher/rke2/rke2.yaml > ~/rke2_conn/cluster1/cluster1_kubeconfig.yaml
    
  4. Realizar la instalación y configuración de la herramienta kubectl en el servidor bastion:
    student@lab-0-bastion:~> sudo -i
    
    Agregue el repositorio zypper de Kubernetes.
    cat <<EOF | sudo tee /etc/zypp/repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/
    enabled=1
    gpgcheck=1
    gpgkey=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/repodata/repomd.xml.key
    EOF
    
    Actualice zyppery confirme la nueva incorporación del repositorio:
    zypper update
    
    Cuando aparezca este mensaje, presione 't' o 'a':
    New repository or package signing key received:
    
    Repository:       Kubernetes
    Key Fingerprint:  1111 2222 3333 4444 5555 6666 7777 8888 9999 AAAA
    Key Name:         isv:kubernetes OBS Project <isv:kubernetes@build.opensuse.org>
    Key Algorithm:    RSA 2048
    Key Created:      Thu 25 Aug 2022 01:21:11 PM -03
    Key Expires:      Sat 02 Nov 2024 01:21:11 PM -03 (expires in 85 days)
    Rpm Name:         gpg-pubkey-9a296436-6307a177
    
    Note: Signing data enables the recipient to verify that no modifications occurred after the data
    were signed. Accepting data with no, wrong or unknown signature can lead to a corrupted system
    and in extreme cases even to a system compromise.
    
    Note: A GPG pubkey is clearly identified by its fingerprint. Do not rely on the key's name. If
    you are not sure whether the presented key is authentic, ask the repository provider or check
    their web site. Many providers maintain a web page showing the fingerprints of the GPG keys they
    are using.
    
    Do you want to reject the key, trust temporarily, or trust always? [r/t/a/?] (r): a
    
    Si aparece el mensaje siguiente, elejir la opción n:
    Backend:  classic_rpmtrans
    Continue? [y/n/v/...? shows all options] (y): n
    
    Instalar kubectl y bash-completion usando zypper
    zypper install -y kubectl bash-completion
    
    Salga de la sesión del usuario root, debe asegurarse de estar en la sesión del usuario student:
    lab-0-bastion:~ # exit
    logout
    student@lab-0-bastion:~>
    
    Configurar el Autocompletado
    student@lab-0-bastion:~> kubectl completion bash > ~/.completion-bash.sh
    
    student@lab-0-bastion:~> source  ~/.completion-bash.sh
    
    student@lab-0-bastion:~> echo 'source  ~/.completion-bash.sh' >> .bashrc
    
    Salga de la sesión de usuario student, e ingrese nuevamente:
    student@lab-0-bastion:~> exit
    logout
    
    ssh lab-0-bastion.mx-g01.ws.itmlabs.io -l student -i student-0-private_key.pem
    
    student@lab-0-bastion:~>
    
  5. Conexión a Cluster AIO: Debes reemplazar la línea server: https://127.0.0.1:6443 por el nombre de servidor correspondiente al All In One por ejemplo: https://lab-0-aio.c.mx-g05.internal:6443 en el archivo /home/student/rke2_conn/aio/aio_kubeconfig.yaml. Asegurarse de reemplazar por los valores correctos.
    sed -i 's|server: https://127.0.0.1:6443|server: https://lab-0-aio.c.mx-g05.internal:6443|' /home/student/rke2_conn/aio/aio_kubeconfig.yaml
    
    Verificar que se haya ejecutado el cambio en el archivo:
    grep 6443 /home/student/rke2_conn/aio/aio_kubeconfig.yaml
    
    Verificar la conexión a All In One Cluster
    kubectl --kubeconfig=/home/student/rke2_conn/aio/aio_kubeconfig.yaml get nodes -L cluster
    
    La salida debería de ser similar a la siguiente:
    student@lab-0-bastion:~> kubectl --kubeconfig=rke2_conn/aio/aio_kubeconfig.yaml get nodes -L cluster
    NAME                          STATUS   ROLES                       AGE   VERSION          CLUSTER
    lab-0-aio.c.mx-g01.internal   Ready    control-plane,etcd,master   16h   v1.30.5+rke2r1   rancher
    student@lab-0-bastion:~>
    
  6. Conexión a Cluster 1: Puedes usar el siguiente comando sed para reemplazar la línea server: https://127.0.0.1:6443 por server: https://lab-0-master.c.mx-g05.internal:6443 en el archivo /home/student/rke2_conn/cluster1/cluster1_kubeconfig.yaml. Asegurarse de reemplazar por los valores correspondientes.
    sed -i 's|server: https://127.0.0.1:6443|server: https://lab-0-master.c.mx-g05.internal:6443|' /home/student/rke2_conn/cluster1/cluster1_kubeconfig.yaml
    
    Verificar que se haya ejecutado el cambio en el archivo:
    grep 6443 /home/student/rke2_conn/cluster1/cluster1_kubeconfig.yaml
    
  7. Verificar la conexión a Cluster 1.
    kubectl --kubeconfig=/home/student/rke2_conn/cluster1/cluster1_kubeconfig.yaml get nodes -L cluster
    
    La salida debería de ser similar a la siguiente:
    student@lab-0-bastion:~> kubectl --kubeconfig=/home/student/rke2_conn/cluster1/cluster1_kubeconfig.yaml get nodes -L cluster
    NAME                             STATUS   ROLES                       AGE   VERSION          CLUSTER
    lab-0-master.c.mx-g01.internal   Ready    control-plane,etcd,master   17h   v1.29.9+rke2r1   cluster1
    lab-0-node1.c.mx-g01.internal    Ready    <none>                      17h   v1.29.9+rke2r1   
    lab-0-node2.c.mx-g01.internal    Ready    <none>                      17h   v1.29.9+rke2r1   
    student@lab-0-bastion:~>
    

Conexión KUBECONFIG medio de Rancher Manager

Es posible utilizar Rancher Manager como un Proxy de Autenticación para nuestros usuarios, ya que Rancher Manager puede proporcionarnos un archivo KUBECONFIG con los permisos con que cuentan los usuarios en Rancher Manager.

  1. Ingresa a la consola web de Rancher Manager con el usuario administrador (También es posible utilizar cualquier usuario que tengamos creado en Rancher Manager, el acceso que obtendremos será el mismo con sus mismos permisos), cuando te encuentres dentro, seleccionar cluster1 de tal forma que se muestre de la siguiente manera: RancherManager
  2. Luego seleccionar la opción Copy KubeConfig to Clipboard, lo cual copiará todo el contenido de KUBECONFIG para posteriormente poderla utilizar. RancherManager
  3. Asegurarse de estar en el servidor bastion con el usuario student
    student@lab-0-bastion:~>
    
  4. Exportar la variable de entorno correspondiente al usuario en el ambiente del servidor Bastion: lab-#-aio
    student@lab-0-bastion:~> export LAB=X
    
  5. Crear un directorio para almacenar los archivos KUBECONFIG que copiamos anteriormente:
    mkdir -p ~/rke2_conn/rancher
    
  6. Crear un archivo llamado rancher_kubeconfig.yaml con el contenido que copiamos anteriormente, de tal forma que quede de la siguiente manera:
    apiVersion: v1
    kind: Config
    clusters:
    - name: "cluster1"
      cluster:
        server: "https://rancher.lab-0.mx-g05.ws.itmlabs.io/k8s/clusters/c-m-vwskznwj"
        certificate-authority-data: "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tT"
    
    users:
    - name: "cluster1"
      user:
        token: "kubeconfig-user-d8znnb6fmh:z5g7fcbmqm9cdcpbln8rr5nh24s94d85lg88tgr4kn"
    
    
    contexts:
    - name: "cluster1"
      context:
        user: "cluster1"
        cluster: "cluster1"
    
    current-context: "cluster1"
    
    Si la opción Copy KubeConfig to Clipboard, no funciona, puedo optar por descargar el archivo KUBECONFIG, lo cual también es una opción válida RancherManager
  7. Cuando tenga el archivo creado en el servidor Bastion es posible utilizarlo para gestionar el cluster1, ya que el archivo KUBECONFIG descargado o copiado, es válido para cluster1:
  8. Verificar la conexión a Cluster 1.
    kubectl --kubeconfig=/home/student/rke2_conn/rancher/rancher_kubeconfig.yaml get nodes -L cluster
    
    La salida debería de ser similar a la siguiente:
    student@lab-0-bastion:~> kubectl --kubeconfig=/home/student/rke2_conn/rancher/rancher_kubeconfig.yaml get nodes -L cluster
    NAME                             STATUS   ROLES                       AGE   VERSION          CLUSTER
    lab-0-master.c.mx-g01.internal   Ready    control-plane,etcd,master   17h   v1.29.9+rke2r1   cluster1
    lab-0-node1.c.mx-g01.internal    Ready    <none>                      17h   v1.29.9+rke2r1   
    lab-0-node2.c.mx-g01.internal    Ready    <none>                      17h   v1.29.9+rke2r1   
    student@lab-0-bastion:~>
    
  9. Puedes probar otros comandos para verificar el acceso y verificar que estas gestionando el cluster1:
    kubectl --kubeconfig=/home/student/rke2_conn/rancher/rancher_kubeconfig.yaml get pods -A