Configurar o provedor de nuvem do OpenStack para o Kubernetes

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

Pré-requisitos

Este guia pressupõe que você tenha um cluster do GKE em Bare Metal em execução no ambiente do OpenStack com uma configuração semelhante à explicada no guia Implantar GDCV para Bare Metal no OpenStack. Siga esse guia antes de tentar estas etapas.

GKE em Bare Metal 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 rede acessível publicamente na implantação do OpenStack a partir da qual os IPs flutuantes são alocados. É dessa rede que os LoadBalancer IPs dos serviços do Kubernetes serão atribuídos. Você pode usar um comando semelhante a este para buscar esse IP no ambiente do OpenStack.
    • ABM_NETWORK_SUBNET_ID: é a sub-rede na rede privada na implantação do OpenStack a partir da qual os IPs são alocados para as VMs que executam o GKE em bare mental. Você pode usar um comando semelhante a este 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. Faça login com segurança na VM abm-ws usando o SSH 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 Anthos on bare metal 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 vendas em execução no GKE em 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.

    O LoadBalancer é provisionado pelo GKE em bare metal visualizado na IU do OpenStack