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

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

Requisitos previos

En esta guía, se supone que tienes un clúster de GKE en Bare Metal ejecutándose en tu entorno de OpenStack con una configuración similar a la que se explica en la guía Implementa Google Distributed Cloud en OpenStack. Sigue esa guía antes de probar estos pasos.

Google Distributed Cloud instalado en OpenStack

Configura el proveedor

En la siguiente sección, se asume que estás comenzando desde una ventana de la terminal en tu estación de trabajo local.

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

    source PATH_TO_OPENRC_FILE/openrc
    
  2. Crea el archivo de configuración para el 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
    

    Reemplaza lo siguiente:

    • OS_AUTH_URL, OS_USERNAME, OS_PASSWORD: Estas variables ya deben haberse configurado en el entorno mediante el aprovisionamiento del archivo openrc. Por lo tanto, se tomarán de forma automática.
    • PUBLIC_NETWORK_ID: Esta es la red de acceso público en tu implementación de OpenStack desde la que se asignan las direcciones IP flotantes. Desde esta red, se asignará el LoadBalancer IPs para los servicios de Kubernetes. Puedes usar un comando de una línea para recuperar esta IP de tu entorno de OpenStack.
    • ABM_NETWORK_SUBNET_ID: Esta es la subred en la red privada en tu implementación de OpenStack desde la que se asignan las IP a las VM que ejecutan Google Distributed Cloud. Puedes usar un comando similar a Obtén el ID de la red pública en OpenStack para recuperar esta IP de tu entorno de OpenStack.
  3. Recupera 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 VM abm-ws en OpenStack.

    scp ./cloud.conf ubuntu@$FLOATING_IP:~
    
  5. Usa SSH para conectarte de forma segura a la VM de abm-ws y accede como usuario de 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
    

Valida la integración de OpenStack

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

    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. Se expuso 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. Intenta 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 Google Distributed Cloud y expuesta a través de un balanceador de cargas en OpenStack

    Puedes notar que se crea un nuevo balanceador de cargas de OpenStack en OpenStack si visitas la IU web de OpenStack.

    Los objetos LoadBalancer aprovisionados por Google Distributed Cloud se visualizan desde la IU de OpenStack