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:~>
- Exportar la variable de entorno correspondiente al usuario en el ambiente del servidor
Bastion:lab-#-aiostudent@lab-0-bastion:~> export LAB=X - Crear un directorio para almacenar los archivos
KUBECONFIGde cada cluster creado anteriormente:mkdir -p ~/rke2_conn/aiomkdir -p ~/rke2_conn/cluster1 - Extraer los archivos
KUBECONFIGde los clusters:ssh student@lab-${LAB}-aio sudo cat /etc/rancher/rke2/rke2.yaml > ~/rke2_conn/aio/aio_kubeconfig.yamlssh student@lab-${LAB}-master sudo cat /etc/rancher/rke2/rke2.yaml > ~/rke2_conn/cluster1/cluster1_kubeconfig.yaml - Realizar la instalación y configuración de la herramienta
kubectlen el servidorbastion:Agregue el repositorio zypper de Kubernetes.student@lab-0-bastion:~> sudo -iActualice zyppery confirme la nueva incorporación del repositorio: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 EOFCuando aparezca este mensaje, presione 't' o 'a':zypper updateSi aparece el mensaje siguiente, elejir la opciónNew 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): an:Instalar kubectl y bash-completion usando zypperBackend: classic_rpmtrans Continue? [y/n/v/...? shows all options] (y): nSalga de la sesión del usuariozypper install -y kubectl bash-completionroot, debe asegurarse de estar en la sesión del usuariostudent:Configurar el Autocompletadolab-0-bastion:~ # exit logout student@lab-0-bastion:~>student@lab-0-bastion:~> kubectl completion bash > ~/.completion-bash.shstudent@lab-0-bastion:~> source ~/.completion-bash.shSalga de la sesión de usuariostudent@lab-0-bastion:~> echo 'source ~/.completion-bash.sh' >> .bashrcstudent, e ingrese nuevamente:student@lab-0-bastion:~> exit logoutssh lab-0-bastion.mx-g01.ws.itmlabs.io -l student -i student-0-private_key.pemstudent@lab-0-bastion:~> - 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.
Verificar que se haya ejecutado el cambio en el archivo:
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.yamlVerificar la conexión a All In One Clustergrep 6443 /home/student/rke2_conn/aio/aio_kubeconfig.yamlLa salida debería de ser similar a la siguiente:kubectl --kubeconfig=/home/student/rke2_conn/aio/aio_kubeconfig.yaml get nodes -L clusterstudent@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:~> - 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.
Verificar que se haya ejecutado el cambio en el archivo:
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.yamlgrep 6443 /home/student/rke2_conn/cluster1/cluster1_kubeconfig.yaml - Verificar la conexión a Cluster 1.
La salida debería de ser similar a la siguiente:
kubectl --kubeconfig=/home/student/rke2_conn/cluster1/cluster1_kubeconfig.yaml get nodes -L clusterstudent@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.
- 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
cluster1de tal forma que se muestre de la siguiente manera:
- Luego seleccionar la opción Copy KubeConfig to Clipboard, lo cual copiará todo el contenido de KUBECONFIG para posteriormente poderla utilizar.

- Asegurarse de estar en el servidor
bastioncon el usuariostudentstudent@lab-0-bastion:~> - Exportar la variable de entorno correspondiente al usuario en el ambiente del servidor
Bastion:lab-#-aiostudent@lab-0-bastion:~> export LAB=X - Crear un directorio para almacenar los archivos
KUBECONFIGque copiamos anteriormente:mkdir -p ~/rke2_conn/rancher - Crear un archivo llamado
rancher_kubeconfig.yamlcon el contenido que copiamos anteriormente, de tal forma que quede de la siguiente manera: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álidaapiVersion: 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"
- Cuando tenga el archivo creado en el servidor
Bastiones posible utilizarlo para gestionar elcluster1, ya que el archivoKUBECONFIGdescargado o copiado, es válido paracluster1: - Verificar la conexión a Cluster 1.
La salida debería de ser similar a la siguiente:
kubectl --kubeconfig=/home/student/rke2_conn/rancher/rancher_kubeconfig.yaml get nodes -L clusterstudent@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:~> - 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