Configura il provider cloud OpenStack per Kubernetes

Il provider cloud OpenStack per Kubernetes ti consente di utilizzare il bilanciamento del carico OpenStack per un cluster eseguito su VM OpenStack. Dopo aver installato e configurato il provider, ogni servizio di tipo LoadBalancer riceve un bilanciatore del carico OpenStack Octavia e un indirizzo IP esterno dalla rete IP mobile. In questo documento, verifichi l'integrazione esponendo un'applicazione di esempio.

Prerequisiti

Questa guida presuppone che tu abbia un cluster creato con Google Distributed Cloud in esecuzione nel tuo ambiente OpenStack con una configurazione simile a quella spiegata nella guida Esegui il deployment di un cluster bare metal su OpenStack. Segui questa guida prima di provare questi passaggi.

Google Distributed Cloud installato su OpenStack.

Configura il provider

La sezione seguente presuppone che tu stia partendo da una finestra del terminale nella tua workstation locale.

  1. Esegui il sourcing del file di configurazione del client OpenStack (openrc). Puoi scaricarlo dalla WebUI di OpenStack.

    source PATH_TO_OPENRC_FILE/openrc
    
  2. Crea il file di configurazione per il cloud provider OpenStack Kubernetes.

    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
    

    Sostituisci quanto segue:

    • OS_AUTH_URL, OS_USERNAME, OS_PASSWORD: queste variabili dovrebbero essere già impostate nell'ambiente tramite l'origine del file openrc. Pertanto, verranno rilevati automaticamente.
    • PUBLIC_NETWORK_ID: questa è la rete accessibile pubblicamente nel tuo deployment OpenStack da cui vengono allocati gli indirizzi IP mobili. È da questa rete che verrà assegnato l'indirizzo LoadBalancer IPs per i servizi Kubernetes. Puoi utilizzare un comando di una riga per recuperare questo IP dal tuo ambiente OpenStack.
    • ABM_NETWORK_SUBNET_ID: questa è la subnet della rete privata nel tuo deployment OpenStack da cui vengono allocati gli IP per le VM che eseguono Google Distributed Cloud solo software. Puoi utilizzare un comando simile a Recupera l'ID della rete pubblica in OpenStack per recuperare questo IP dal tuo ambiente OpenStack.
  3. Recupera l'indirizzo IP mobile pubblico della 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 il file cloud.conf nella VM abm-ws in OpenStack.

    scp ./cloud.conf ubuntu@$FLOATING_IP:~
    
  5. Utilizza SSH per connetterti in modo sicuro alla VM abm-ws e accedi come utente root.

    L'utente root configurato dagli script Terraform è abm.

    ssh ubuntu@$FLOATING_IP
    sudo -u abm -i
    
  6. Copia i file cloud.conf nella directory $HOME dell'utente root.

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

    # 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. Installa il provider cloud OpenStack per 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
    

Convalida l'integrazione di OpenStack

  1. Eseguire il deployment dell'applicazione Point of Sale di esempio.

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/master/anthos-bm-openstack-terraform/resources/point-of-sales.yaml
    
  2. Verifica se i pod dell'applicazione sono in esecuzione.

    kubectl get pods
    

    Output previsto:

    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. Esposto l'applicazione tramite un servizio di tipo LoadBalancer.

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/master/anthos-bm-openstack-terraform/resources/point-of-sales-service.yaml
    
  4. Prova ad accedere al servizio da un browser.

    # 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
    

    Applicazione Point of Sale a cui si accede utilizzando EXTERNAL-IP.

    Applicazione per punti vendita in esecuzione su un cluster bare metal esposto tramite un bilanciatore del carico in OpenStack

    Puoi notare che un nuovo bilanciatore del carico OpenStack viene creato in OpenStack visitando l'interfaccia utente web di OpenStack.

    App OpenStack che mostra i bilanciatori del carico di cui è stato eseguito il provisioning da Google Distributed Cloud (solo software)