En esta guía, se explica cómo configurar el proveedor de Cloud de OpenStack para Kubernetes en tu clúster de GKE en Bare Metal. El proveedor de servicios en la nube de OpenStack debe configurarse para exponer los Services de Kubernetes mediante OpenStack LBaaS.
Requisitos previos
En esta guía, se supone que tienes un clúster de GKE en Bare Metal ejecutándose en tu entorno de OpenStack con una configuración similar a la que se explica en la guía Implementa Google Distributed Cloud en OpenStack. Sigue esa guía antes de probar estos pasos.
Configura el proveedor
En la siguiente sección, se asume que estás comenzando desde una ventana de la 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/openrc
Crea 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 EOF
Reemplaza 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
: Esta 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 IPs
para 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 en la red privada en tu implementación de OpenStack desde la que se asignan las IP a las VM que ejecutan 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.conf
en la VMabm-ws
en OpenStack.scp ./cloud.conf ubuntu@$FLOATING_IP:~
Usa SSH para conectarte de forma segura a la VM de
abm-ws
y accede como usuario deroot
.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
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.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
Se 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.yaml
Intenta 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 notar que se crea un nuevo balanceador de cargas de OpenStack en OpenStack si visitas la IU web de OpenStack.