Configurar o provedor de nuvem do OpenStack para o Kubernetes

Neste guia, explicamos como configurar Provedor de nuvem do OpenStack para Kubernetes no seu cluster do Google Distributed Cloud. O OpenStack Cloud Provider precisa ser configurado para expor os serviços do Kubernetes usando o OpenStack LBaaS (em inglês).

Pré-requisitos

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

Google Distributed Cloud instalado no OpenStack.

Configure o provedor

Na seção a seguir, pressupomos que você esteja começando de uma janela de 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 em rede particular na implantação do OpenStack da qual os IPs são alocados para as VMs que executam o Google Distributed Cloud. É possível usar um comando semelhante para Consiga o ID da rede pública no OpenStack para 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 no Google Distributed Cloud 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.

    O LoadBalancer é provisionado pelo Google Distributed Cloud visualizado na interface do OpenStack.