Configurar o provedor de nuvem do OpenStack para o Kubernetes

O provedor de nuvem do OpenStack para Kubernetes permite usar o balanceamento de carga do OpenStack para um cluster executado em VMs do OpenStack. Depois de instalar e configurar o provedor, cada Serviço do tipo LoadBalancer recebe um balanceador de carga do OpenStack Octavia e um endereço IP externo da rede IP flutuante. Neste documento, você vai verificar a integração expondo um aplicativo de amostra.

Pré-requisitos

Neste guia, presumimos que você tenha um cluster criado com o Google Distributed Cloud em execução no seu ambiente do OpenStack com uma configuração similar ao que é explicado no guia Implantar um cluster em bare metal no OpenStack. Siga esse guia antes de seguir estas etapas.

Google Distributed Cloud instalado no OpenStack.

Configure o provedor

A seção a seguir pressupõe que você está começando em uma janela do terminal na estação de trabalho local.

  1. Crie o arquivo de configuração do cliente do OpenStack (openrc). É possível fazer o download na IU da Web do OpenStack.

    source PATH_TO_OPENRC_FILE/openrc
    
  2. Crie o arquivo de configuração do provedor de nuvem do Kubernetes do 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
    

    Substitua:

    • OS_AUTH_URL, OS_USERNAME, OS_PASSWORD: essas variáveis já devem estar definidas no ambiente por meio da origem do arquivo openrc. Assim, eles serão retirados automaticamente.
    • PUBLIC_NETWORK_ID: é a versão de acesso público rede na implantação do OpenStack da qual os endereços IP flutuantes são alocada. É dessa rede que os LoadBalancer IPs dos serviços do Kubernetes serão atribuídos. É possível usar um comando de uma linha para buscar esse IP no ambiente do OpenStack.
    • ABM_NETWORK_SUBNET_ID: é a sub-rede na rede privada na implantação do OpenStack da qual os IPs são alocados para as VMs que executam o Google Distributed Cloud somente software. É possível usar um comando semelhante para conseguir o ID da rede pública no OpenStack e buscar esse IP no ambiente do OpenStack.
  3. Busque o endereço IP flutuante público da 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. Copie o arquivo cloud.conf na VM abm-ws no OpenStack.

    scp ./cloud.conf ubuntu@$FLOATING_IP:~
    
  5. Use SSH para se conectar com segurança à VM abm-ws e faça login como usuário root.

    O usuário root, conforme configurado pelos scripts do Terraform, é abm.

    ssh ubuntu@$FLOATING_IP
    sudo -u abm -i
    
  6. Copie os arquivos cloud.conf para o diretório $HOME do usuário root.

    cp /home/ubuntu/cloud.conf $HOME
    
  7. Crie um Kubernetes Secret com a configuração.

    # 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. Instale o OpenStack Cloud Provider 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 a integração do OpenStack

  1. Implante a amostra de aplicativo Point-of-Sales.

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/master/anthos-bm-openstack-terraform/resources/point-of-sales.yaml
    
  2. Verifique se os pods do aplicativo estão em execução.

    kubectl get pods
    

    Saída esperada:

    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. Exposição do aplicativo por meio de um serviço do tipo LoadBalancer.

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/master/anthos-bm-openstack-terraform/resources/point-of-sales-service.yaml
    
  4. Tente acessar o serviço em um 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
    

    Aplicativo de ponto de venda acessado com o EXTERNAL-IP.

    Aplicativo de ponto de venda em execução em um cluster bare metal exposto por um LoadBalancer no OpenStack

    Há um novo balanceador de carga do OpenStack sendo criado no OpenStack ao acessar a IU da Web do OpenStack.

    App do OpenStack mostrando LoadBalancers provisionados pelo Google Distributed Cloud (somente software)