Configurar el proveedor de servicios en la nube de OpenStack para Kubernetes

En esta guía se explica cómo configurar el proveedor de servicios en la nube de OpenStack para Kubernetes en tu clúster de hardware desnudo. El proveedor de servicios en la nube de OpenStack debe configurarse para exponer los servicios de Kubernetes mediante OpenStack LBaaS.

Requisitos previos

En esta guía se presupone que has creado un clúster con Google Distributed Cloud que se ejecuta en tu entorno de OpenStack con una configuración similar a la que se explica en la guía Desplegar un clúster bare metal en OpenStack. Sigue esa guía antes de probar estos pasos.

Google Distributed Cloud instalado en OpenStack.

Configurar el proveedor

En la siguiente sección se da por hecho que vas a empezar desde una ventana de terminal de tu estación de trabajo local.

  1. Obtén el archivo de configuración del cliente de OpenStack (openrc). Puedes descargarla desde la interfaz web de OpenStack.

    source PATH_TO_OPENRC_FILE/openrc
    
  2. Crea el archivo de configuración del proveedor de servicios en la nube de Kubernetes de OpenStack.

    cat > cloud.conf << EOF
    [Global]
    auth-url=${OS_AUTH_URL}
    username=${OS_USERNAME}
    password=${OS_PASSWORD}
    region=RegionOne
    tenant-name=admin
    domain-id=default
    # this is for using a self-signed cert if your using a CA then comment this line
    # and point to the CA certificate using the "ca-file" arg
    tls-Insecure=true 
    
    [LoadBalancer]
    use-octavia=true
    # this is generally the public network on OpenStack
    floating-network-id=PUBLIC_NETWORK_ID
    # this should be private network subnet where vip is allocated for the ABM nodes
    subnet-id=ABM_NETWORK_SUBNET_ID
    
    [BlockStorage]
    bs-version=v2
    EOF
    

    Haz los cambios siguientes:

    • OS_AUTH_URL, OS_USERNAME, OS_PASSWORD: estas variables ya deberían estar definidas en el entorno al obtener el archivo openrc. Por lo tanto, se recogerán automáticamente.
    • PUBLIC_NETWORK_ID: es la red de acceso público de tu implementación de OpenStack desde la que se asignan las direcciones IP flotantes. Es de esta red de la que se asignará la LoadBalancer IPs para los servicios de Kubernetes. Puedes usar un comando de una línea para obtener esta IP de tu entorno de OpenStack.
    • ABM_NETWORK_SUBNET_ID: Es la subred de la red privada de tu implementación de OpenStack desde la que se asignan IPs a las VMs que ejecutan el software de Google Distributed Cloud. Puedes usar un comando similar a Obtener el ID de la red pública en OpenStack para obtener esta IP de tu entorno de OpenStack.
  3. Obtén la dirección IP flotante pública de la VM abm-ws.

    export OPENSTACK_IPS=$(openstack floating ip list --tags=abm_ws_floatingip -f json)
    export FLOATING_IP=$(jq -c '.[]."Floating IP Address"' <<< $OPENSTACK_IPS | tr -d '"')
    
  4. Copia el archivo cloud.conf en la máquina virtual abm-ws de OpenStack.

    scp ./cloud.conf ubuntu@$FLOATING_IP:~
    
  5. Usa SSH para conectarte de forma segura a la máquina virtual abm-ws e inicia sesión como usuario root.

    El usuario root configurado por las secuencias de comandos de Terraform es abm.

    ssh ubuntu@$FLOATING_IP
    sudo -u abm -i
    
  6. Copia los archivos cloud.conf en el directorio $HOME del usuario root.

    cp /home/ubuntu/cloud.conf $HOME
    
  7. Crea un Kubernetes Secret con la configuración.

    # make sure the kubectl client is pointing towards your cluster
    export KUBECONFIG=~/bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
    
    # store the provider configurations as a Kubernetes secret
    kubectl create secret -n kube-system generic cloud-config --from-file=cloud.conf
    
  8. Instala el proveedor de servicios en la nube de OpenStack para Kubernetes.

    # create the necessary roles for the OpenStack provider
    kubectl apply -f https://raw.githubusercontent.com/kubernetes/cloud-provider-openstack/master/manifests/controller-manager/cloud-controller-manager-roles.yaml
    
    # create the required role-bindings for the OpenStack provider
    kubectl apply -f https://raw.githubusercontent.com/kubernetes/cloud-provider-openstack/master/manifests/controller-manager/cloud-controller-manager-role-bindings.yaml
    
    # create the OpenStack controller manager
    kubectl apply -f https://raw.githubusercontent.com/kubernetes/cloud-provider-openstack/master/manifests/controller-manager/openstack-cloud-controller-manager-ds.yaml
    

Validar la integración de OpenStack

  1. Implementa la aplicación de punto de venta de ejemplo.

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/master/anthos-bm-openstack-terraform/resources/point-of-sales.yaml
    
  2. Verifica si los pods de la aplicación se están ejecutando.

    kubectl get pods
    

    Resultado esperado:

    NAME                          READY   STATUS    RESTARTS   AGE
    api-server-7db4777f7f-zflk5   1/1     Running   0          74s
    inventory-58c6fb5568-dqk2x    1/1     Running   0          74s
    payments-68d5d65d5c-5mjl6     1/1     Running   0          74s
    
  3. Ha expuesto la aplicación a través de un servicio de tipo LoadBalancer.

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/master/anthos-bm-openstack-terraform/resources/point-of-sales-service.yaml
    
  4. Prueba a acceder al servicio desde un navegador.

    # wait for the external IP to be assigned
    kubectl get service api-server-lb
    
    NAME            TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)        AGE
    api-server-lb   LoadBalancer   10.203.77.215   172.29.249.159   80:32378/TCP   4m12s
    

    Aplicación de punto de venta a la que se accede mediante EXTERNAL-IP.

    Aplicación de punto de venta que se ejecuta en un clúster de hardware desnudo expuesto a través de un balanceador de carga en OpenStack

    Puedes ver que se ha creado un nuevo balanceador de carga de OpenStack en OpenStack si visitas la interfaz web de OpenStack.

    Aplicación de OpenStack que muestra balanceadores de carga aprovisionados por el software de Google Distributed Cloud