El
proveedor de servicios en la nube de OpenStack para Kubernetes
te permite usar el balanceo de cargas de OpenStack para un clúster que se ejecuta en VMs de OpenStack.
Después de instalar y configurar el proveedor, cada Service de tipo
LoadBalancer obtiene un balanceador de cargas de OpenStack Octavia
y una dirección IP externa de tu red de IP flotante. En este documento, verificarás la integración exponiendo una aplicación de ejemplo.
Requisitos previos
En esta guía, se supone que tienes un clúster creado con Google Distributed Cloud que se ejecuta en tu entorno de OpenStack con una configuración similar a la que se explica en la guía Implementa un clúster de equipos físicos en OpenStack. Sigue esa guía antes de probar estos pasos.

Configura el proveedor
En la siguiente sección, se supone que comienzas desde una ventana de terminal en tu estación de trabajo local.
Obtén el archivo de configuración del cliente de OpenStack (
openrc). Puedes descargarlo desde la IU web de OpenStack.source PATH_TO_OPENRC_FILE/openrcCrea el archivo de configuración para el proveedor de servicios en la nube de Kubernetes de 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 EOFReemplaza lo siguiente:
OS_AUTH_URL,OS_USERNAME,OS_PASSWORD: Estas variables ya deben haberse configurado en el entorno mediante el aprovisionamiento del archivoopenrc. Por lo tanto, se tomarán de forma automática.PUBLIC_NETWORK_ID: Es la red de acceso público en tu implementación de OpenStack desde la que se asignan las direcciones IP flotantes. Desde esta red, se asignará elLoadBalancer IPspara los servicios de Kubernetes. Puedes usar un comando de una línea para recuperar esta IP de tu entorno de OpenStack.ABM_NETWORK_SUBNET_ID: Esta es la subred de la red privada en tu implementación de OpenStack desde la que se asignan las IP para las VMs que ejecutan el software de Google Distributed Cloud. Puedes usar un comando similar a Obtén el ID de la red pública en OpenStack para recuperar esta IP de tu entorno de OpenStack.
Recupera la dirección IP flotante pública 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 '"')Copia el archivo
cloud.confen la VMabm-wsen OpenStack.scp ./cloud.conf ubuntu@$FLOATING_IP:~Usa SSH para conectarte de forma segura a la VM de
abm-wsy acceder como usuario deroot.El usuario
root, según lo configurado por las secuencias de comandos de Terraform, esabm.ssh ubuntu@$FLOATING_IP sudo -u abm -iCopia los archivos
cloud.confen el directorio$HOMEdel usuarioroot.cp /home/ubuntu/cloud.conf $HOMECrea un
Kubernetes Secretcon la configuración.# 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.confInstala el proveedor de servicios en la nube de OpenStack 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
Valida la integración de OpenStack
Implementa la aplicación de punto de venta de muestra.
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/master/anthos-bm-openstack-terraform/resources/point-of-sales.yamlVerifica si los pods de la aplicación se están ejecutando.
kubectl get podsResultado esperado:
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 74sSe expuso la aplicación a través de un servicio de tipo
LoadBalancer.kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/master/anthos-bm-openstack-terraform/resources/point-of-sales-service.yamlIntenta acceder al servicio desde un 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 4m12sAplicación de punto de venta a la que se accede mediante
EXTERNAL-IP.
Puedes notar que se crea un nuevo balanceador de cargas de OpenStack en OpenStack si visitas la IU web de OpenStack.
