Configuración de un bastión de acceso al cluster

Descubra cómo configurar un bastión para acceder a los clusters que ha creado mediante Container Engine for Kubernetes (OKE).

Al realizar operaciones en un cluster mediante kubectl, debe tener acceso al punto final de API de Kubernetes. Del mismo modo, al realizar tareas administrativas en nodos de trabajador, debe tener acceso a los nodos de trabajador. Sin embargo, el acceso al punto final de API de Kubernetes y/o a los nodos de trabajador puede estar restringido debido a reglas de lista de seguridad o porque el punto final de API de Kubernetes y/o los nodos de trabajador están en una subred privada. En estas situaciones, puede configurar bastiones en el servicio Oracle Cloud Infrastructure Bastion para proporcionar acceso seguro al punto final de API de Kubernetes y/o a los nodos de trabajador.

La configuración de bastiones y sesiones de bastiones implica una serie de tareas diferentes. Según la organización, estas tareas pueden ser realizadas por la misma persona o por diferentes personas, de la siguiente manera:

  • Un administrador de VCN es responsable de crear la VCN, las subredes y las reglas de seguridad para un cluster de Kubernetes y un bastión. Las políticas de IAM permiten al administrador de VCN gestionar la VCN.
  • Un administrador de cluster es responsable de crear bastiones para acceder a los puntos finales y los nodos de trabajador de la API de Kubernetes, y de crear sesiones de bastion para el acceso a los nodos de trabajador. Las políticas de IAM permiten al administrador de cluster gestionar clusters y bastiones.
  • Un usuario de cluster es responsable de crear sesiones de bastión para acceder a los puntos finales de API de Kubernetes. Las políticas de IAM permiten al usuario de cluster utilizar clusters y bastiones.

En este diagrama se muestra un ejemplo de configuración de cluster con un bastión que proporciona acceso seguro al punto final de API de Kubernetes y los nodos de trabajador de un cluster.

En esta imagen se muestra una configuración de cluster de ejemplo con una subred de punto final de API Kubernetes, una subred de nodo de trabajador y subredes de equilibrador de carga. El acceso a las subredes está controlado por las listas de seguridad seclist-KubernetesAPIendpoint, seclist-workernodes y seclist-loadbalancers, respectivamente. Una VNIC conecta la subred de punto final de API de Kubernetes al plano de control de cluster. Un bastión en una subred bastión proporciona acceso SSH al punto final de API de Kubernetes del cluster y a los nodos de trabajador. Otras funciones de esta configuración de ejemplo se describen en el texto adyacente.

Políticas de IAM necesarias para crear y utilizar bastiones para acceder a clusters

Para obtener información sobre las políticas de IAM necesarias para crear bastiones y sesiones de bastion, consulte Políticas de bastion.

Si lo desea, los administradores del cluster también pueden configurar políticas de IAM para limitar los recursos a los que pueden acceder los usuarios del cluster mediante un bastión. Consulte Configuración de políticas de IAM para limitar el uso de bastiones.

Configuración de un bastión para acceder al punto final de API de Kubernetes

Para que los usuarios de cluster accedan al punto final de API de Kubernetes privado de un cluster, los administradores de VCN, los administradores de cluster y los usuarios de cluster deben realizar una serie de pasos, como se describe en esta sección.

Pasos del administrador de VCN

Como administrador de VCN, siga estos pasos para configurar reglas de seguridad de entrada y salida para permitir que un bastión acceda al punto final de API de Kubernetes:

  1. Cree una nueva subred privada para alojar el bastión, en la misma VCN que el cluster al que desea proporcionar acceso.

    Tenga en cuenta que si ya ha creado una subred para alojar un bastión para acceder a los nodos de trabajador, puede reutilizar esa subred en lugar de crear una nueva subred. Consulte Configuración de un bastión para proporcionar acceso SSH a los nodos gestionados.

  2. Agregue la siguiente regla de seguridad de salida TCP/6443 a la lista de seguridad asociada a la subred de bastión.

    Esta regla de seguridad de salida permite el tráfico desde la subred de bastión a la subred de punto final de API de Kubernetes del cluster.

    Estado: Destino Protocolo/puerto de destino Descripción:
    Con estado CIDR de punto final de API de Kubernetes (por ejemplo, 10.0.0.0/29) TCP/6443 Permita la comunicación de bastión a punto final de API de Kubernetes.
  3. Si aún no está presente, agregue la siguiente regla de seguridad de entrada TCP/6443 a una lista de seguridad nueva o existente asociada a la subred que aloja el punto final de API de Kubernetes.

    Esta regla de seguridad de entrada permite el tráfico a la subred de punto final de API de Kubernetes desde la subred de bastión.

    Estado: Origen Protocolo/puerto de destino Descripción:
    Con estado CIDR de subred de Bastion TCP/6443 Permita la comunicación de bastión a punto final de API de Kubernetes.
    Nota

    Aunque no es el diseño preferido de Oracle, puede utilizar la misma subred tanto para el bastión como para el punto final de API de Kubernetes del cluster. En este caso, agregue la regla de seguridad de salida TCP/6443 a la lista de seguridad asociada a la subred de punto final de API de Kubernetes.

Pasos del administrador del cluster

Como administrador de cluster, siga estos pasos para configurar un bastión para acceder al punto final de API de Kubernetes:

  1. Cree un bastión, de la siguiente manera:
    1. En la consola, abra el menú de navegación y haga clic en Identidad y seguridad.
    2. Haga clic en Bastión.
    3. En la página Bastión, haga clic en Crear bastión.
    4. En el cuadro de diálogo Crear bastión, defina las siguientes propiedades:
      • Nombre de bastión: nombre del bastión. Evite introducir información confidencial. Solo están soportados los caracteres alfanuméricos.
      • Red virtual en la nube de destino: especifique la VCN del cluster de Kubernetes al que desea proporcionar acceso.
      • Subred de destino: subred en la que se aloja el bastión, con las reglas de seguridad de entrada y salida que ha configurado.
      • Lista de permitidos del bloque de IDR: uno o más rangos de direcciones en notación CIDR a los que desea permitir la conexión a sesiones alojadas en este bastión. Por ejemplo, 0.0.0.0/0 para permitir el acceso desde Internet o un rango de direcciones más limitado. Por ejemplo, 203.0.113.0/24.
    5. (Opcional) Para cambiar la cantidad máxima de tiempo que puede permanecer activa cualquier sesión en este bastión, haga clic en Mostrar opciones avanzadas y, a continuación, introduzca un valor para Periodo de vida de sesión máximo.
    6. Haga clic en Create Bastion.
    7. Cuando se haya creado el bastión, haga clic en el nombre del bastión para ver información sobre él, incluido su OCID.

    Para obtener más información sobre la creación de un bastión, consulte Para crear un bastión.

  2. Proporcione a los usuarios del cluster el OCID del bastión.
  3. Asegúrese de que existen políticas de IAM adecuadas para autorizar a los usuarios del cluster a utilizar el bastión. Consulte Políticas de IAM necesarias para crear y utilizar bastiones para acceder a clusters.

    Si lo desea, también puede configurar políticas de IAM para limitar los recursos a los que pueden acceder los usuarios del cluster mediante el bastión. Consulte Configuración de políticas de IAM para limitar el uso de bastiones.

pasos de usuario de cluster

Como usuario de cluster, siga estos pasos para crear una sesión de bastión para acceder al punto final de API de Kubernetes:

  1. Si aún no lo ha hecho, cree el archivo kubeconfig para el cluster al que desea acceder ejecutando:
    oci ce cluster create-kubeconfig \
      --cluster-id <cluster OCID> \
      --file $HOME/.kube/config \
      --region <region> \
      --token-version 2.0.0
    
  2. Edite el archivo kubeconfig del cluster y cambie la dirección IP especificada para server para especificar la dirección IP y el puerto en los que se va a recibir el tráfico SSH:
    1. Localice la línea:
      server: https://x.x.x.x:6443
    2. Cambie la línea a:
      server: https://127.0.0.1:6443

      Por ejemplo:

      apiVersion: v1
      clusters:
      - cluster:
          certificate-authority-data:______
          server: https://127.0.0.1:6443
      - name: cluster-xxxxxxx
      …
      
  3. Cree una sesión bastión mediante la consola o la CLI de la siguiente manera:

    Uso de la consola
    1. En la página Bastión, haga clic en el nombre del bastión creado por el administrador del cluster.
    2. En la página Sesiones, haga clic en Crear sesión.
    3. En el cuadro de diálogo Crear sesión, defina las siguientes propiedades:
      • Tipo de sesión: seleccione Sesión de reenvío de puerto SSH.
      • Nombre de sesión: nombre mostrado para la nueva sesión. Evite introducir información confidencial.
      • Conéctese al host de destino utilizando: seleccione Dirección IP.
      • Dirección IP: especifique la parte de la dirección IP del punto final privado de API de Kubernetes del cluster (que se muestra en la página Detalles de cluster).
      • Puerto: especifique la parte de puerto del punto final privado de API de Kubernetes del cluster (que se muestra en la página Detalles de cluster). Por ejemplo, 6443.
      • Clave SSH: especifique el archivo de clave pública de un par de claves SSH existente que desea utilizar para la sesión o genere un nuevo par de claves SSH y guarde la clave privada.
    4. (Opcional) Para cambiar la cantidad máxima de tiempo que la sesión puede permanecer activa, haga clic en Mostrar opciones avanzadas y, a continuación, introduzca un valor para Periodo de vida de sesión máximo.
    5. Haga clic en Crear sesión.
    Uso de la CLI
    oci bastion session create-port-forwarding \
     --bastion-id <bastion OCID> \
     --ssh-public-key-file <ssh public key> \
     --target-private-ip <API Private IP endpoint> \
     --target-port 6443
    

    Para obtener más información sobre la creación de una sesión bastión, consulte Para crear una sesión.

  4. Obtenga el comando para crear un túnel SSH mediante la consola o la CLI de la siguiente manera:

    Uso de la consola

    En la página Sesiones, seleccione Copiar comando SSH en el menú Acciones (Menú Acciones) junto a la sesión que acaba de crear.

    Uso de la CLI
    oci bastion session get --session-id <session OCID> | jq '.data."ssh-metadata".command'

    El comando de túnel SSH que ha obtenido tiene el siguiente formato:

    ssh -i <privateKey> -N -L <localPort>:<session-IP>:<session-port> -p 22 <session-ocid>

    donde:

    • <session-IP>:<session-port> es la dirección IP y el número de puerto del punto final de API de Kubernetes que ha especificado al crear la sesión de bastión. Por ejemplo, 10.0.0.6:6443.
    • <session-ocid> es el OCID de la sesión de bastión que ha creado.
  5. Ejecute el comando para crear el túnel SSH en una estación de trabajo local o en Cloud Shell, de la siguiente forma:
    1. Edite el comando de túnel SSH que ha obtenido de la siguiente manera:

      • Sustituya <privateKey> por la ruta de acceso al archivo que contiene la clave privada del par de claves SSH especificado para la sesión. Por ejemplo, /home/johndoe/.ssh/id_rsa
      • Sustituya <localPort> por 6443 o un puerto libre en el sistema (ya sea una estación de trabajo local si la red está conectada con la VCN del cluster o Cloud Shell)
      • Agregue & al final del comando para que se ejecute en segundo plano.
    2. Ejecute el comando de túnel SSH editado en una estación de trabajo local o en la ventana de Cloud Shell.

      Por ejemplo:

      ssh -i /home/johndoe/.ssh/id_rsa -N -L 6443:10.0.0.6:6443 -p 22 ocid1.bastionsession_______oraclecloud.com &

Ahora puede realizar operaciones de kubectl en el cluster hasta que se agote el tiempo de espera del túnel SSH o la sesión bastión.

Configuración de un bastión para proporcionar acceso SSH a los nodos gestionados

Para que los usuarios de cluster tengan acceso SSH a los nodos gestionados, los administradores de VCN, los administradores de cluster y los usuarios de cluster deben realizar una serie de pasos, como se describe en esta sección.

Pasos del administrador de VCN

Como administrador de la VCN, siga estos pasos para configurar reglas de seguridad de entrada y salida para permitir que un bastión proporcione acceso SSH a los nodos gestionados:

  1. Cree una nueva subred para alojar el bastión, en la misma VCN que el cluster al que desea proporcionar acceso.

    Tenga en cuenta que si ya ha creado una subred para alojar un bastión para acceder al punto final de API de Kubernetes, puede reutilizar esa subred en lugar de crear una nueva subred. Consulte Configuración de un bastión para acceder al punto final de API de Kubernetes.

  2. Agregue la siguiente regla de seguridad de salida TCP/22 a la lista de seguridad asociada a la subred de bastión.

    Esta regla de seguridad de salida permite el tráfico de la subred de bastión a la subred de nodos de trabajador.

    Estado: Destino Protocolo/puerto de destino Descripción:
    Con estado CIDR de nodos de trabajador (por ejemplo, 10.0.1.0/24) TCP/22 Permitir comunicación de bastión a nodos de trabajador.
  3. Si aún no está presente, agregue la siguiente regla de seguridad de entrada TCP/22 a una lista de seguridad nueva o existente asociada a la subred que aloja los nodos de trabajador.

    Esta regla de seguridad de entrada permite el tráfico a la subred del nodo de trabajador desde la subred de bastión.

    Estado: Origen Protocolo/puerto de destino Descripción:
    Con estado CIDR de subred de Bastion TCP/22 Permitir comunicación de bastión a nodos de trabajador.
    Nota

    Aunque no es el diseño preferido de Oracle, puede utilizar la misma subred tanto para el bastión como para los nodos de trabajador. En este caso, agregue la regla de seguridad de salida TCP/22 a la lista de seguridad asociada a la subred del nodo de trabajador.

Pasos del administrador del cluster

Como administrador del cluster, siga estos pasos para configurar un bastión para proporcionar acceso SSH a los nodos gestionados:

  1. Active el agente bastión en el nodo de trabajador al que desea conectarse a través de SSH de la siguiente manera:
    1. Abra el menú de navegación y haga clic en Servicios para desarrolladores. En Contenedores y artefactos, haga clic en Clusters de Kubernetes (OKE).
    2. En la página Lista de clusters, haga clic en el nombre del cluster que contiene el nodo de trabajador al que desea conectarse.
    3. En Recursos, haga clic en Grupos de nodos y en el nombre del pool de nodos que contiene el nodo de trabajador al que desea conectarse.
    4. En Recursos, haga clic en Nodos y haga clic en el nombre del nodo de trabajador al que desea conectarse.
    5. En la página Detalles de instancia, muestre el separador Oracle Cloud Agent y cambie el plugin Activado de Bastion.

      El cambio puede durar hasta 10 minutos.

    6. Espere hasta que el estado del plugin de Bastion se muestre como En ejecución antes de continuar con el siguiente paso.
  2. Cree un bastión, de la siguiente manera:
    1. Abra el menú de navegación y haga clic en Identidad y seguridad.
    2. Haga clic en Bastión.
    3. En la página Bastión, haga clic en Crear bastión.
    4. En el cuadro de diálogo Crear bastión, defina las siguientes propiedades:
      • Nombre de bastión: nombre del bastión. Evite introducir información confidencial. Solo están soportados los caracteres alfanuméricos.
      • Red virtual en la nube de destino: especifique la VCN del cluster de Kubernetes al que desea proporcionar acceso.
      • Subred de destino: subred en la que se aloja el bastión, con las reglas de seguridad de entrada y salida que ha configurado.
      • Lista de permitidos del bloque de IDR: uno o más rangos de direcciones en notación CIDR a los que desea permitir la conexión a sesiones alojadas en este bastión. Por ejemplo, 0.0.0.0/0 para permitir el acceso desde Internet o un rango de direcciones más limitado. Por ejemplo, 203.0.113.0/24.
    5. (Opcional) Para cambiar la cantidad máxima de tiempo que puede permanecer activa cualquier sesión en este bastión, haga clic en Mostrar opciones avanzadas y, a continuación, introduzca un valor para Periodo de vida de sesión máximo.
    6. Haga clic en Create Bastion.
    7. Cuando se haya creado el bastión, haga clic en el nombre del bastión para ver información sobre él, incluido su OCID.

    Para obtener más información sobre la creación de un bastión, consulte Para crear un bastión.

  3. Proporcione a los usuarios del cluster el OCID del bastión.
  4. Asegúrese de que existen políticas de IAM adecuadas para autorizar a los usuarios del cluster a utilizar el bastión. Consulte Políticas de IAM necesarias para crear y utilizar bastiones para acceder a clusters.

    Si lo desea, también puede configurar políticas de IAM para limitar los recursos a los que pueden acceder los usuarios del cluster mediante el bastión. Consulte Configuración de políticas de IAM para limitar el uso de bastiones.

pasos de usuario de cluster

Como usuario de cluster, siga estos pasos para crear una sesión de bastión a fin de proporcionar acceso SSH a los nodos gestionados:

  1. Cree una sesión bastión mediante la consola o la CLI de la siguiente manera:

    Uso de la CLI
    1. En la página Bastión, haga clic en el nombre del bastión creado por el administrador del cluster.
    2. En la página Sesiones, haga clic en Crear sesión.
    3. En el cuadro de diálogo Crear sesión, defina las siguientes propiedades:
      • Sesión: seleccione Sesión de SSH gestionada.
      • Nombre de sesión: nombre mostrado para la nueva sesión. Evite introducir información confidencial.
      • Username: introduzca opc.
      • Instancia informática en <compartment name>: seleccione el nombre de la instancia informática del nodo de trabajador de la lista de instancias informáticas del compartimento. Si es necesario, cambie el compartimento para buscar la instancia. Solo se muestran las instancias activas.
      • Clave SSH: especifique el archivo de clave pública de un par de claves SSH existente que desea utilizar para la sesión o genere un nuevo par de claves SSH y guarde la clave privada.
    4. (Opcional) Para cambiar la cantidad máxima de tiempo que la sesión puede permanecer activa, haga clic en Mostrar opciones avanzadas y, a continuación, introduzca un valor para Periodo de vida de sesión máximo.

      Tenga en cuenta que no cambia el valor por defecto en el campo Puerto de instancia informática de destino (el puerto por defecto ya está definido en 22). Además, no especifica direcciones IP en el campo Dirección IP de instancia informática de destino porque ya ha seleccionado las instancias informáticas.

    5. Haga clic en Crear sesión.
    Uso de la CLI
    oci bastion session create-managed-ssh \
      --bastion-id <bastion OCID> \
      --ssh-public-key-file <ssh public key> \
      --target-resource-id <worker node instance OCID> \
      --target-os-username <instance_username>

    Para obtener más información sobre la creación de una sesión bastión, consulte Para crear una sesión.

  2. Obtenga el comando para crear un túnel SSH mediante la consola o la CLI de la siguiente manera:

    Uso de la consola

    En la página Sesiones, seleccione Copiar comando SSH en el menú Acciones (Menú Acciones) junto a la sesión que acaba de crear.

    Uso de la CLI
    oci bastion session get --session-id <session OCID> | jq '.data."ssh-metadata".command'

    El comando de túnel SSH que ha obtenido tiene el siguiente formato:

    ssh -i <privateKey> -o ProxyCommand="ssh -i <privateKey> -W %h:%p -p 22 <session-ocid>" -p 22 opc@<node-private-ip>

    donde:

    • <session-ocid> es el OCID de la sesión de bastión que ha creado.
    • <node-private-ip> es la dirección IP privada del nodo de trabajador que ha especificado al crear la sesión de bastión. Por ejemplo, 10.0.10.99.
  3. Ejecute el comando para crear el túnel SSH en una estación de trabajo local o en Cloud Shell, de la siguiente forma:
    1. Edite el comando de túnel SSH que ha obtenido de la siguiente manera:

      • Sustituya <privateKey> por la ruta de acceso al archivo que contiene la clave privada del par de claves SSH especificado para la sesión. Por ejemplo, /home/johndoe/.ssh/id_rsa
      • Agregue & al final del comando para que el comando se ejecute en segundo plano.
    2. Ejecute el comando de túnel SSH editado en una estación de trabajo local o en la ventana de Cloud Shell.

      Por ejemplo:

      ssh -i /home/johndoe/.ssh/id_rsa -o ProxyCommand="ssh -i /home/johndoe/.ssh/id_rsa -W %h:%p -p 22 ocid1.bastionsession_______oraclecloud.com" -p 22 opc@10.0.10.99 &

Ahora puede realizar operaciones en los nodos de trabajador hasta que el túnel SSH o la sesión bastión sufran un timeout.

Configuración de políticas de IAM para limitar el uso de bastiones

Los administradores de cluster pueden configurar políticas de IAM para limitar los recursos a los que pueden acceder los usuarios de cluster mediante un bastión. Por ejemplo, un requisito común es restringir a los usuarios del cluster al uso de un bastión para acceder solo al punto final de API de Kubernetes de un cluster, en lugar de poder acceder a los nodos de trabajador mediante SSH.

La siguiente política de ejemplo permite a los usuarios del grupo cluster-users crear, conectarse y terminar sesiones de bastión para puntos finales de API de Kubernetes (en la subred 10.0.0.11/32, en el puerto 6443) solo, en el compartimento ABC:

Allow group cluster-users to use bastion in compartment ABC 
Allow group cluster-users to manage bastion-session in compartment ABC where ALL {target.bastion.ocid='ocid1.bastion.xxx', target.bastion-session.type='port_forwarding', target.bastion-session.ip in ['10.0.0.11/32'], target.bastion-session.port='6443'}
Allow group cluster-users to read vcn in compartment ABC
Allow group cluster-users to read subnet in compartment ABC

En el ejemplo:

  • Ya se ha creado un bastión.
  • Las redes y los nodos de trabajador están en el mismo compartimento que el bastión.
  • El acceso a la red se debe establecer en el mínimo necesario.