IBM Cloud Docs
Configuración del primer clúster en Virtual Private Cloud (VPC)

Configuración del primer clúster en Virtual Private Cloud (VPC)

Cree un clúster de IBM Cloud® Kubernetes Service en Virtual Private Cloud (VPC).

Con los clústeres IBM Cloud Kubernetes Service en VPC, puede crear su clúster en la próxima generación de la plataforma IBM Cloud, en su nube privada virtual. VPC le proporciona la seguridad de un entorno de nube privado con la escalabilidad dinámica de una nube pública. VPC utiliza la versión siguiente de IBM Cloud Kubernetes Service proveedores de infraestructura, con un grupo seleccionado de API v2, CLI y funciones de consola. Solo puede crear clústeres estándares para VPC.

Audiencia

Esta guía de aprendizaje está pensada para los administradores que crean un clúster en IBM Cloud Kubernetes Service en un entorno de VPC por primera vez.

Objetivos

En las lecciones de la guía de aprendizaje puede crear un clústeres de IBM Cloud Kubernetes Service en Virtual Private Cloud (VPC). A continuación, puede desplegar una app y exponer la app públicamente mediante un equilibrador de carga.

Qué obtendrá

En este tutorial, creará los siguientes recursos. Hay pasos opcionales para suprimir estos recursos si no desea conservarlos después de completar la guía de aprendizaje.

  • Un clúster de VPC
  • Una app Hello World simple desplegada en el clúster
  • Un equilibrador de carga de VPC para exponer la app

Requisitos previos

Complete los siguientes pasos de requisito previo para configurar permisos y el entorno de línea de mandatos.

Permisos
Si usted es el propietario de la cuenta, ya tiene los permisos necesarios para crear un clúster y puede continuar con el siguiente paso. De lo contrario, solicite al propietario de la cuenta que configure la clave de API y le asigne los permisos de usuario mínimos en IBM Cloud IAM.
Herramientas de línea de mandatos
Para obtener un acceso rápido a los recursos desde la línea de mandatos, intente IBM Cloud Shell. De lo contrario, configure el entorno de línea de mandatos local siguiendo los pasos siguientes.
  1. Instale la CLI de IBM Cloud (ibmcloud), el plugin Kubernetes Service (ibmcloud ks) y el plugin IBM Cloud Container Registry (ibmcloud cr).
  2. Instale las CLI de Red Hat OpenShift (oc) y de Kubernetes (kubectl).
  3. Para trabajar con VPC, instale el plugin infrastructure-service. El prefijo para ejecutar mandatos es ibmcloud is.
    ibmcloud plugin install infrastructure-service
    
  4. Actualice el plugin de Kubernetes Service a la última versión.
    ibmcloud plugin update kubernetes-service
    
  5. Asegúrese de que la versión de kubectl coincide con la versión de Kubernetes del clúster de VPC. Este tutorial crea un clúster que ejecuta la versión 1.32.

Cree un clúster en VPC

Cree un clúster de IBM Cloud Kubernetes Service en el entorno de IBM Cloud Virtual Private Cloud (VPC). Para obtener más información acerca de VPC, consulte Iniciación a Virtual Private Cloud.

  1. Inicie una sesión en la cuenta, el grupo de recursos y la región de IBM Cloud donde desea crear el entorno de VPC. El VPC debe configurarse en la misma región metropolitana multizona donde desea crear su clúster. En esta guía de aprendizaje se crea una VPC en us-south. Para ver otras regiones admitidas, consulte Áreas metropolitanas multizona para clústeres de VPC. Si tiene un ID federado, incluya la opción --sso.
    ibmcloud login -r us-south [-g <resource_group>] [--sso]
    
  2. Cree una VPC para el clúster. Para obtener más información, consulte la documentación sobre cómo crear una VPC en la consola o la CLI.
    1. Cree una VPC llamada myvpc y anote el ID en la salida. Las VPC proporcionan un entorno aislado para que las cargas de trabajo se ejecuten dentro de la nube pública. Puede utilizar la misma VPC para varios clústeres, por ejemplo si desea tener distintos clústeres que alberguen microservicios separados que se tengan que comunicar entre sí. Si desea separar los clústeres, por ejemplo por departamentos, puede crear una VPC para cada clúster.

      ibmcloud is vpc-create myvpc
      
    2. Cree una subred para la VPC y anote su ID. Tenga en cuenta la siguiente información cuando cree la subred de VPC:

      • Zonas: debe tener una subred de VPC para cada zona del clúster. Las zonas disponibles dependen de la región metropolitana en la que haya creado el VPC. Para consultar las zonas de la región, ejecute ibmcloud is zones.
      • Direcciones IP: las subredes de VPC proporcionan direcciones IP privadas para los nodos trabajadores y los servicios de equilibrador de carga en el clúster, por lo tanto asegúrese de crear una subred con suficientes direcciones IP, como por ejemplo 256. Después, ya no puede cambiar el número de direcciones IP que tiene una subred de VPC.
      • Pasarelas públicas: no es necesario conectar una pasarela pública para completar esta guía de aprendizaje. Puede mantener los nodos trabajadores aislados del acceso público mediante equilibradores de carga de VPC para exponer las cargas de trabajo de forma segura. Puede conectar una pasarela pública si los nodos trabajadores tienen que acceder a un URL público.
      ibmcloud is subnet-create mysubnet1 <vpc_ID> --zone us-south-1 --ipv4-address-count 256
      
  3. Cree un clúster en la VPC en la misma zona que la subred. De forma predeterminada, el clúster se crea con un punto final de servicio en la nube público y privado. Puede utilizar el punto final de servicio en la nube público para acceder al nodo maestro de Kubernetes, por ejemplo para ejecutar mandatos kubectl, desde la máquina local. Los nodos trabajadores pueden comunicarse con el nodo maestro en el punto final de servicio en la nube privado. Para obtener más información sobre las opciones del mandato, consulte la documentación de referencia de la CLI cluster create vpc-gen2.
    ibmcloud ks cluster create vpc-gen2 --name myvpc-cluster --zone us-south-1 --version 1.32 --flavor bx2.2x8 --workers 1 --vpc-id <vpc_ID> --subnet-id <vpc_subnet_ID>
    
  4. Compruebe el estado del clúster. El clúster puede tardar unos minutos en suministrarse.
    1. Verifique que el estado (State) del clúster es normal.
      ibmcloud ks cluster ls --provider vpc-gen2
      
    2. Descargue los archivos de configuración de Kubernetes.
      ibmcloud ks cluster config --cluster myvpc-cluster
      
    3. Compruebe que los mandatos kubectl se ejecutan correctamente con el clúster comprobando la versión del cliente de la CLI de Kubernetes.
      kubectl version  --short
      
      Salida de ejemplo
      Client Version: 1.32
      Server Version: 1.32+IKS
      

Despliegue una app disponible de forma privada

Cree un despliegue de Kubernetes para desplegar una instancia de una sola app como un pod en el nodo trabajador del clúster de VPC.

  1. Clona el código fuente de la aplicación Hello world en tu directorio de inicio de usuario. El repositorio contiene distintas versiones de una app similar en carpetas que empiezan por Lab. Cada versión contiene los siguientes archivos:

    • Dockerfile: las definiciones de compilación para la imagen.
    • app.js: la app Hello world.
    • package.json: metadatos sobre la app.
    git clone https://github.com/IBM/container-service-getting-started-wt.git
    
  2. Vaya al directorio Lab 1.

    cd 'container-service-getting-started-wt/Lab 1'
    
  3. Utilice un espacio de nombres de registro existente o cree uno, como por ejemplo vpc-gen2.

    ibmcloud cr namespace-list
    
    ibmcloud cr namespace-add vpc-gen2
    
  4. Cree una imagen de Docker que incluya los archivos de aplicación del directorio Lab 1.

    Utilice caracteres alfanuméricos en minúscula o guiones bajos (_) solo en el nombre de imagen. No olvide el punto (.) al final del mandato. El punto indica a Docker que debe buscar el Dockerfile y crear artefactos para crear la imagen dentro del directorio actual.

    docker build -t us.icr.io/<namespace>/hello-world:1 .
    

    Cuando finalice la compilación, compruebe que aparece el siguiente mensaje de éxito:

    => exporting to image                                                                           0.0s
    => => exporting layers                                                                          0.0s
    => => writing image sha256:3ca1eb1d0998f738b552d4c435329edf731fe59e427555b78ba2fb54f2017906     0.0s
    => => naming to <region>.icr.io/<namespace>/hello-world:1                                       0.0s
    
  5. Inicie una sesión en IBM Cloud Container Registry.

    ibmcloud cr login
    
  6. Envíe la imagen al espacio de nombres IBM Cloud Container Registry que ha creado. Si tiene que modificar la app en el futuro, repita estos pasos para crear otra versión de la imagen. Nota: Obtenga más información sobre cómo proteger su información personal cuando se trabaja con imágenes de contenedor.

    docker push us.icr.io/<namespace>/hello-world:1
    
  7. Cree un despliegue para la app. Los despliegues se utilizan para gestionar pods, lo que incluye instancias contenerizadas de una app. El mandato siguiente despliega la app en un solo pod. Para los efectos de esta guía, el despliegue se denomina despliegue hello-world-deployment, pero puede darle al despliegue cualquier nombre que desee.

    kubectl create deployment hello-world-deployment --image=us.icr.io/vpc-gen2/hello-world:1
    

    Salida de ejemplo

    deployment.apps/hello-world-deployment created
    

    Obtenga más información sobre cómo proteger su información personal cuando se trabaja recursos de Kubernetes.

  8. Facilite el acceso a la app exponiendo el despliegue como un servicio NodePort. Puesto que los nodos trabajadores de VPC están conectados únicamente a una subred privada, al puerto de nodo solo se le asigna a una dirección IP privada y no se expone en la red pública. Otros servicios que se ejecuten en la red privada pueden acceder a la app utilizando la dirección IP privada del servicio NodePort.

    kubectl expose deployment/hello-world-deployment --type=NodePort --name=hello-world-service --port=8080 --target-port=8080
    

    Salida de ejemplo

    service/hello-world-service exposed
    
    Información sobre las opciones del comando.
    Parámetro Descripción
    expose Exponga un recurso de Kubernetes, como por ejemplo un despliegue, como un servicio de Kubernetes de modo que los usuarios puedan acceder al recurso mediante la dirección IP del servicio.
    deployment/*<hello-world-deployment>* El tipo de recurso y el nombre del recurso para exponer con este servicio.
    --name=*<hello-world-service>* El nombre del servicio.
    --type=NodePort El tipo de servicio a crear. En esta lección, creará un servicio NodePort. En la lección siguiente, creará un servicio LoadBalancer.
    --port=*<8080>* El puerto en el que el servicio escucha el tráfico de la red externa.
    --target-port=*<8080>* El puerto en el que la app escucha y a la que el servicio dirige el tráfico de red de entrada. En este ejemplo, target-port es el mismo que port, pero otras app que cree pueden utilizar otro puerto.
  9. Ahora que ya se ha realizado todo el trabajo de despliegue, puede probar la app desde dentro del clúster. Obtenga los detalles para formar la dirección IP privada que puede utilizar para acceder a la app.

    1. Obtenga información acerca del servicio para ver qué NodePort se ha asignado. Los NodePorts se asignan aleatoriamente cuando se generan con el mandato expose, pero dentro del rango 30000-32767. En este ejemplo, NodePort es 30872.

      kubectl describe service hello-world-service
      

      Salida de ejemplo

      NAME:                   hello-world-service
      Namespace:              default
      Labels:                 run=hello-world-deployment
      Selector:               run=hello-world-deployment
      Type:                   NodePort
      IP:                     10.xxx.xx.xxx
      Port:                   <unset> 8080/TCP
      NodePort:               <unset> 30872/TCP
      Endpoints:              172.30.xxx.xxx:8080
      Session Affinity:       None
      No events.
      
    2. Obtenga una lista de los pods que ejecutan su app y anote el nombre del pod.

      kubectl get pods
      

      Salida de ejemplo

      NAME                                     READY     STATUS        RESTARTS   AGE
      hello-world-deployment-d99cddb45-lmj2v   1/1       Running       0          2d
      
    3. Describa el pod para averiguar el nodo trabajador en el que se ejecuta el pod. En la salida de ejemplo, el nodo trabajador en el que se ejecuta el pod es 10.xxx.xx.xxx.

      kubectl describe pod hello-world-deployment-d99cddb45-lmj2v
      

      Salida de ejemplo

      NAME:               hello-world-deployment-d99cddb45-lmj2v
      Namespace:          default
      Priority:           0
      PriorityClassName:  <none>
      Node:               10.xxx.xx.xxx/10.xxx.xx.xxx
      Start Time:         Mon, 22 Apr 20122 12:40:48 -0400
      Labels:             pod-template-hash=d99cddb45
                          run=hello-world-deployment
      Annotations:        kubernetes.io/psp=ibm-privileged-psp
      Status:             Running
      IP:                 172.30.xxx.xxx
      ...
      
  10. Inicie una sesión en el pod para poder realizar una solicitud a la app desde dentro del clúster.

    kubectl exec -it hello-world-deployment-d99cddb45-lmj2v /bin/sh
    
  11. Realice una solicitud al servicio NodePort utilizando la dirección IP privada del nodo trabajador y el puerto de nodo que ha recuperado anteriormente.

    wget -O - 10.xxx.xx.xxx:30872
    

    Salida de ejemplo

    Connecting to 10.xxx.xx.xxx:30872 (10.xxx.xx.xxx:30872)
    Hello world from hello-world-deployment-d99cddb45-lmj2v! Your app is up and running in a cluster!
    -                    100% |*****************************************************************************************|    88   0:00:00 ETA
    

    Para cerrar la sesión del pod, escriba exit.

Configure un equilibrador de carga para VPC para exponer la app de forma pública

Configure un equilibrador de carga de VPC para exponer la app en la red pública.

Cuando se crea un servicio LoadBalancer de Kubernetes en el clúster, se crea automáticamente un equilibrador de carga de VPC en la VPC fuera del clúster. El equilibrador de carga es multizona y direcciona las solicitudes de la app a través de los NodePorts privados que se abren automáticamente en los nodos trabajadores. En el diagrama siguiente se muestra cómo un usuario accede al servicio de una app a través del equilibrador de carga, aunque el nodo trabajador solo está conectado a una subred privada.

Equilibrio de carga VPC para un clúster.
VPC load balancing for a cluster

  1. Cree un servicio LoadBalancer de Kubernetes en el clúster para exponer de forma pública la app hello world.

    kubectl expose deployment/hello-world-deployment --type=LoadBalancer --name=hw-lb-svc  --port=8080 --target-port=8080
    

    Salida de ejemplo

    service "hw-lb-svc" exposed
    
    Información sobre las opciones del comando.
    Parámetro Descripción
    expose Exponga un recurso de Kubernetes, como por ejemplo un despliegue, como un servicio de Kubernetes de modo que los usuarios puedan acceder al recurso mediante la dirección IP del servicio.
    deployment/*<hello-world-deployment>* El tipo de recurso y el nombre del recurso para exponer con este servicio.
    --name=*<hello-world-service>* El nombre del servicio.
    --type=LoadBalancer El tipo de servicio Kubernetes que se va a crear. En esta lección, creará un servicio LoadBalancer.
    --port=*<8080>* El puerto en el que el servicio escucha el tráfico de la red externa.
    --target-port=*<8080>* El puerto en el que la app escucha y a la que el servicio dirige el tráfico de red de entrada. En este ejemplo, target-port es el mismo que port, pero otras app que cree pueden utilizar otro puerto.
  2. Verifique que el servicio LoadBalancer de Kubernetes se ha creado correctamente en el clúster. Cuando se crea el servicio LoadBalancer de Kubernetes, se crea automáticamente un equilibrador de carga de VPC. El equilibrador de carga de VPC asigna un nombre de host al servicio de Kubernetes LoadBalancer que puede ver en el campo LoadBalancer Ingress de la salida de la CLI. El equilibrador de carga de VPC tarda unos minutos en suministrarse en la VPC. Hasta que el equilibrador de carga VPC esté listo, no podrá acceder al servicio Kubernetes LoadBalancer a través de su nombre de host.

    kubectl describe service hw-lb-svc
    

    Salida de CLI de ejemplo

    NAME:                     hw-lb-svc
    Namespace:                default
    Labels:                   app=hello-world-deployment
    Annotations:              <none>
    Selector:                 app=hello-world-deployment
    Type:                     LoadBalancer
    IP:                       172.21.xxx.xxx
    LoadBalancer Ingress:     1234abcd-us-south.lb.appdomain.cloud
    Port:                     <unset> 8080/TCP
    TargetPort:               8080/TCP
    NodePort:                 <unset> 32040/TCP
    Endpoints:
    Session Affinity:         None
    External Traffic Policy:  Cluster
    Events:
        Type    Reason                Age   From                Message
        ----    ------                ----  ----                -------
        Normal  EnsuringLoadBalancer  1m    service-controller  Ensuring load balancer
        Normal  EnsuredLoadBalancer   1m    service-controller  Ensured load balancer
    
  3. Verifique que el equilibrador de carga de VPC se ha creado correctamente en la VPC. En la salida, verifique que el equilibrador de carga de VPC tiene como estatus de suministro (Provision Status) el valor active y como estatus operativo (Operating Status) el valor online.

    El equilibrador de carga de VPC se denomina con el formato kube-<cluster_ID>-<kubernetes_lb_service_UID>. Para ver el ID de clúster, ejecute ibmcloud ks cluster get --cluster <cluster_name>. Para ver el UID del servicio LoadBalancer de Kubernetes, ejecute kubectl get svc hw-lb-svc -o yaml y busque el campo metadata.uid en la salida.

    ibmcloud is load-balancers
    

    En la siguiente salida de CLI de ejemplo, se crea el equilibrador de carga de VPC denominado kube-bsaucubd07dhl66e4tgg-1f4f408ce6d2485499bcbdec0fa2d306 para el servicio LoadBalancer de Kubernetes:

    ID                                          Name                                                         Family        Subnets               Is public   Provision status   Operating status   Resource group
    r006-d044af9b-92bf-4047-8f77-a7b86efcb923   kube-bsaucubd07dhl66e4tgg-1f4f408ce6d2485499bcbdec0fa2d306   Application   mysubnet-us-south-3   true        active             online             default
    
  4. Envíe una solicitud a la app mediante cURL con el nombre de host y el puerto del servicio LoadBalancer de ubernetes asignado por el equilibrador de carga de VPC que ha encontrado en el paso 2.

    curl 1234abcd-us-south.lb.appdomain.cloud:8080
    

    Salida de ejemplo

    Hello world from hello-world-deployment-5fd7787c79-sl9hn! Your app is up and running in a cluster!
    

¿Qué hacer a continuación?

Ahora que tienes un clúster de VPC, aprenda más sobre lo que puede hacer.

¿Necesita ayuda, tiene preguntas o desea escribir comentarios sobre los clústeres de VPC? Intente publicar en el canal de Slack.