En esta guía se explica cómo configurar el proveedor de servicios en la nube de OpenStack para Kubernetes en tu clúster de hardware desnudo. El proveedor de servicios en la nube de OpenStack debe configurarse para exponer los servicios de Kubernetes mediante OpenStack LBaaS.
Requisitos previos
En esta guía se presupone que has creado un clúster 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 Desplegar un clúster bare metal en OpenStack. Sigue esa guía antes de probar estos pasos.
Configurar el proveedor
En la siguiente sección se da por hecho que vas a empezar desde una ventana de terminal de tu estación de trabajo local.
Obtén el archivo de configuración del cliente de OpenStack (
openrc
). Puedes descargarla desde la interfaz web de OpenStack.source PATH_TO_OPENRC_FILE/openrc
Crea el archivo de configuración del 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 EOF
Haz los cambios siguientes:
OS_AUTH_URL
,OS_USERNAME
,OS_PASSWORD
: estas variables ya deberían estar definidas en el entorno al obtener el archivoopenrc
. Por lo tanto, se recogerán automáticamente.PUBLIC_NETWORK_ID
: es la red de acceso público de tu implementación de OpenStack desde la que se asignan las direcciones IP flotantes. Es de esta red de la que se asignará laLoadBalancer IPs
para los servicios de Kubernetes. Puedes usar un comando de una línea para obtener esta IP de tu entorno de OpenStack.ABM_NETWORK_SUBNET_ID
: Es la subred de la red privada de tu implementación de OpenStack desde la que se asignan IPs a las VMs que ejecutan el software de Google Distributed Cloud. Puedes usar un comando similar a Obtener el ID de la red pública en OpenStack para obtener esta IP de tu entorno de OpenStack.
Obtén 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.conf
en la máquina virtualabm-ws
de OpenStack.scp ./cloud.conf ubuntu@$FLOATING_IP:~
Usa SSH para conectarte de forma segura a la máquina virtual
abm-ws
e inicia sesión como usuarioroot
.El usuario
root
configurado por las secuencias de comandos de Terraform esabm
.ssh ubuntu@$FLOATING_IP sudo -u abm -i
Copia los archivos
cloud.conf
en el directorio$HOME
del usuarioroot
.cp /home/ubuntu/cloud.conf $HOME
Crea un
Kubernetes Secret
con 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.conf
Instala 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
Validar la integración de OpenStack
Implementa la aplicación de punto de venta de ejemplo.
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/master/anthos-bm-openstack-terraform/resources/point-of-sales.yaml
Verifica si los pods de la aplicación se están ejecutando.
kubectl get pods
Resultado 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 74s
Ha expuesto 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.yaml
Prueba a 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 4m12s
Aplicación de punto de venta a la que se accede mediante
EXTERNAL-IP
.Puedes ver que se ha creado un nuevo balanceador de carga de OpenStack en OpenStack si visitas la interfaz web de OpenStack.