Configurer le fournisseur cloud OpenStack pour Kubernetes

Ce guide explique comment configurer le fournisseur cloud OpenStack pour Kubernetes dans votre cluster GKE sur Bare Metal. Le fournisseur cloud OpenStack doit être configuré pour exposer les services Kubernetes à l'aide de OpenStack LBaaS.

Prérequis

Ce guide suppose que vous disposez d'un cluster GKE sur Bare Metal s'exécutant dans votre environnement OpenStack avec une configuration semblable à celle expliquée dans le guide Déployer Google Distributed Cloud sur OpenStack. Suivez d'abord ce guide avant de suivre ces étapes.

Google Distributed Cloud installé sur OpenStack

Configurer le fournisseur

La section suivante suppose que vous démarrez depuis une fenêtre de terminal sur votre poste de travail local.

  1. Générez le fichier de configuration du client OpenStack (openrc). Vous pouvez le télécharger depuis l'interface utilisateur Web d'OpenStack.

    source PATH_TO_OPENRC_FILE/openrc
    
  2. Créez le fichier de configuration pour le fournisseur cloud 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
    

    Remplacez les éléments suivants :

    • OS_AUTH_URL, OS_USERNAME, OS_PASSWORD : ces variables doivent déjà être définies dans l'environnement en générant le fichier openrc. Ainsi, elles sont automatiquement récupérées.
    • PUBLIC_NETWORK_ID: réseau accessible publiquement dans votre déploiement OpenStack à partir duquel les adresses IP flottantes sont allouées. Les LoadBalancer IPs pour les services Kubernetes seront assignées à partir de ce réseau. Pour récupérer cette adresse IP dans votre environnement OpenStack, vous pouvez utiliser une commande sur une ligne.
    • ABM_NETWORK_SUBNET_ID: sous-réseau du réseau privé de votre déploiement OpenStack à partir duquel les adresses IP sont allouées aux VM exécutant Google Distributed Cloud. Pour récupérer cette adresse IP dans votre environnement OpenStack, exécutez une commande semblable à la commande Get the ID of the public network in OpenStack.
  3. Extrayez l'adresse IP flottante publique 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. Copiez le fichier cloud.conf dans la VM abm-ws dans OpenStack.

    scp ./cloud.conf ubuntu@$FLOATING_IP:~
    
  5. Utilisez SSH pour vous connecter de façon sécurisée à la VM abm-ws, puis connectez-vous en tant qu'utilisateur root.

    L'utilisateur root, tel qu'il est configuré par les scripts Terraform, est abm.

    ssh ubuntu@$FLOATING_IP
    sudo -u abm -i
    
  6. Copiez les fichiers cloud.conf dans le répertoire $HOME de l'utilisateur root.

    cp /home/ubuntu/cloud.conf $HOME
    
  7. Créez un Kubernetes Secret avec la configuration.

    # 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. Installez le fournisseur cloud OpenStack pour 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
    

Valider l'intégration à OpenStack

  1. Déployez l'exemple d'application Point-Of-Sales.

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/master/anthos-bm-openstack-terraform/resources/point-of-sales.yaml
    
  2. Vérifiez si les pods d'application sont en cours d'exécution.

    kubectl get pods
    

    Résultat attendu :

    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. Vous avez exposé l'application via un service de type LoadBalancer.

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/master/anthos-bm-openstack-terraform/resources/point-of-sales-service.yaml
    
  4. Essayez d'accéder au service à partir d'un navigateur.

    # 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
    

    L'application Point-Of-Sales est accessible via l'EXTERNAL-IP.

    Application de point de vente exécutée sur Google Distributed Cloud et exposée via un équilibreur de charge dans OpenStack

    Vous pouvez constater qu'un nouvel équilibreur de charge OpenStack est en cours de création dans OpenStack en accédant à l'interface utilisateur Web d'OpenStack.

    Les équilibreurs de charge provisionnés par Google Distributed Cloud sont affichés dans l&#39;interface utilisateur d&#39;OpenStack.