En este instructivo, se describe cómo configurar una conexión desde una aplicación que se ejecuta en un clúster de Google Kubernetes Engine Autopilot a una instancia de AlloyDB.
AlloyDB es un servicio de base de datos completamente administrado y compatible con PostgreSQL en Google Cloud.
Google Kubernetes Engine te ayuda a implementar, escalar y administrar Kubernetes de forma automática.
Objetivos
- Compila una imagen de Docker para AlloyDB.
- Ejecuta una aplicación en Google Kubernetes Engine.
- Conéctate a una instancia de AlloyDB con el proxy de autenticación de AlloyDB y la IP interna.
Costos
En este instructivo, se usan los siguientes componentes facturables de Google Cloud:
- AlloyDB
- Google Kubernetes Engine
- Artifact Registry
Usa la calculadora de precios para generar una estimación de los costos según el uso previsto.
Antes de comenzar
Console
- Accede a tu cuenta de Google Cloud . Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- Verifica que tengas los permisos necesarios para completar este instructivo.
- Habilita las API de Cloud necesarias para crear una conexión a AlloyDB.
En el paso Confirmar proyecto, haz clic en Siguiente para confirmar el nombre del proyecto en el que realizarás cambios.
En el paso Habilitar APIs, haz clic en Habilitar para habilitar lo siguiente:
- API de AlloyDB
- API de Artifact Registry
- API de Compute Engine
- API de Cloud Resource Manager
- API de Cloud Build
- API de Container Registry
- API de Kubernetes Engine
- API de Service Networking
gcloud
- Accede a tu cuenta de Google Cloud . Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- Verifica que tengas los permisos necesarios para completar este instructivo.
Para los fines de este instructivo, usa la aplicación web de recopilación de votos de muestra llamada gke-alloydb-app.
Roles obligatorios
Si quieres obtener los permisos que necesitas para completar las tareas de este instructivo, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto:
-
Administrador de Databases (
roles/iam.databasesAdmin) -
Administrador de clústeres de Kubernetes Engine (
roles/container.clusterAdmin) -
Administrador de IAM de proyecto (
roles/resourcemanager.projectIamAdmin) -
Administrador de cuenta de servicio(
roles/iam.serviceAccountAdmin) -
Administrador de Kubernetes Engine(
roles/container.admin) -
Administrador de Artifact Registry(
roles/artifactregistry.admin)
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.
Inicia Cloud Shell
Cloud Shell es un entorno de shell para administrar recursos alojados enGoogle Cloud.
Cloud Shell ya viene instalado en Google Cloud CLI y la herramienta de línea de comandos de kubectl. Gcloud CLI proporciona la interfaz de línea de comandos principal para Google Cloud. kubectl proporciona la interfaz de línea de comandos principal para ejecutar comandos en clústeres de Kubernetes.
Console
Para iniciar Cloud Shell, completa los siguientes pasos.
Accede a la consola de Google Cloud .
Haz clic en
Activar Cloud Shell en la parte superior de la Google Cloud consola.
En el diálogo Autorizar Cloud Shell, haz clic en Autorizar.
Se abrirá una sesión de Cloud Shell dentro de un marco en la parte inferior en la consola. Usa este shell para ejecutar los comandos de
gcloudykubectl.Antes de ejecutar comandos, configura tu proyecto predeterminado en Google Cloud CLI con el siguiente comando:
gcloud config set project PROJECT_IDReemplaza
PROJECT_IDpor el ID del proyecto.
gcloud
Para iniciar Cloud Shell, completa los siguientes pasos.
-
En la consola de Google Cloud , activa Cloud Shell.
En la parte inferior de la consola de Google Cloud , se inicia una sesión de Cloud Shell que muestra una ventana emergente con una línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.
Para inicializar el entorno, configura tu proyecto predeterminado en Google Cloud CLI con el siguiente comando:
gcloud config set project PROJECT_IDReemplaza
PROJECT_IDpor el ID del proyecto.Habilita las API de Cloud necesarias para crear y conectarte a AlloyDB para PostgreSQL.
gcloud services enable alloydb.googleapis.com \ compute.googleapis.com \ cloudresourcemanager.googleapis.com \ cloudbuild.googleapis.com \ containerregistry.googleapis.com \ servicenetworking.googleapis.com \ artifactregistry.googleapis.com \ container.googleapis.com
Crea un clúster de AlloyDB y su instancia principal
Tu clúster de AlloyDB incluye una cantidad de nodos dentro de una nube privada virtual (VPC) de Google. Cuando creas un clúster, también configuras el acceso privado a servicios entre una de tus VPC y la VPC administrada por Google que contiene tu nuevo clúster. Te recomendamos que uses un acceso a la IP interna para evitar la exposición de la base de datos a la Internet pública.
Para conectarte a un clúster de AlloyDB para PostgreSQL desde fuera de su VPC configurada, debes establecer la configuración del acceso privado a servicios en la VPC para AlloyDB y usar la red de VPC predeterminada para ejecutar consultas desde una aplicación implementada en un clúster de GKE.
Console
Ve a la página Clústeres.
En la sección Configura tu clúster, en el campo ID del clúster, ingresa un ID para tu clúster. Debe comenzar con una letra minúscula y puede contener letras minúsculas, números y guiones, como
alloydb-cluster.En el campo Contraseña, ingresa la CLUSTER_PASSWORD que se usará para el usuario de base de datos
postgrespredeterminado mientras se crea el clúster.En el campo Versión de la base de datos, selecciona la versión principal
POSTGRES_VERSIONpara tu nuevo clúster de AlloyDB.Selecciona un REGION para tu clúster, como
us-central1.En la sección Configura tu instancia principal, haz lo siguiente:
En el campo ID de instancia, ingresa el INSTANCE_ID de tu instancia principal, como
alloydb-primary.Selecciona una serie de máquinas, por ejemplo,
N2.Selecciona un tipo de máquina y especifica la cantidad de unidades de procesamiento virtuales NUM_CPU, como
2.Para garantizar que se asigne un rango de IP al intercambio de tráfico de servicios, configura la conexión de acceso privado a servicios (PSA):
En la lista Red, selecciona
default.Si ya se reservó un rango de IP, como
default-ip-range, selecciónalo en la lista Rango de IP asignado.Si no se asignó ningún rango de IP, haz clic en Asignar rango de IP personalizado para asignar una nueva IP_RANGE_NAME interna y configurar la conexión.
Haga clic en Crear clúster.
Espera a que se cree la instancia de AlloyDB. Esto puede tomar varios minutos.
gcloud
En Cloud Shell, verifica si el rango de direcciones IP sin usar (IPv4) ya está asignado a la interconexión de servicios:
gcloud services vpc-peerings list --network=defaultOmite el siguiente paso si el resultado es similar al siguiente:
network: projects/493573376485/global/networks/default peering: servicenetworking-googleapis-com reservedPeeringRanges: - default-ip-range service: services/servicenetworking.googleapis.comEn este resultado, el valor de
reservedPeeringRangesesdefault-ip-range, que puedes usar como IP_RANGE_NAME para crear una conexión privada en el paso 3.(Omite este paso cuando uses el valor predeterminado de
reservedPeeringRanges). Para asignar direcciones IP sin usar en la VPC, usa el siguiente comando:gcloud compute addresses create IP_RANGE_NAME \ --global \ --purpose=VPC_PEERING \ --prefix-length=16 \ --description="VPC private service access" \ --network=defaultReemplaza
IP_RANGE_NAMEpor el nombre que le asignaste a las direcciones IP internas disponibles dentro de una subred de AlloyDB, comoalloydb-gke-psa-01.Para configurar el acceso al servicio con el rango de IP asignado, ejecuta el siguiente comando:
gcloud services vpc-peerings connect \ --service=servicenetworking.googleapis.com \ --ranges=IP_RANGE_NAME \ --network=defaultPara implementar el clúster de AlloyDB, ejecuta el siguiente comando:
gcloud alloydb clusters create CLUSTER_ID \ --database-version=POSTGRES_VERSION \ --password=CLUSTER_PASSWORD \ --network=default \ --region=REGION \ --project=PROJECT_IDReemplaza lo siguiente:
CLUSTER_ID: Es el ID del clúster que creas. Debe comenzar con una letra en minúscula y puede contener letras en minúscula, números y guiones, comoalloydb-cluster.VERSION: Es la versión principal de PostgreSQL con la que deseas que sean compatibles los servidores de bases de datos del clúster. Elige una de estas opciones:14: Para la compatibilidad con PostgreSQL 1415: Para la compatibilidad con PostgreSQL 1516: Para la compatibilidad con PostgreSQL 1617: Para la compatibilidad con PostgreSQL 17, que es la versión predeterminada compatible de PostgreSQL18, para la compatibilidad con PostgreSQL 18
CLUSTER_PASSWORD: La contraseña que se usará para el usuariopostgrespredeterminado.PROJECT_ID: Es el ID de tu Google Cloud proyecto en el que deseas colocar el clúster.REGION: Es el nombre de la región en la que se crea el clúster de AlloyDB, comous-central1.
Para implementar la instancia principal de AlloyDB, ejecuta el siguiente comando:
gcloud alloydb instances create INSTANCE_ID \ --instance-type=PRIMARY \ --cpu-count=NUM_CPU \ --region=REGION \ --cluster=CLUSTER_ID \ --project=PROJECT_IDReemplaza lo siguiente:
INSTANCE_IDpor el nombre de la instancia de AlloyDB que elijas, comoalloydb-primary.CLUSTER_IDpor el nombre del clúster de AlloyDB, comoalloydb-clusterNUM_CPUpor la cantidad de unidades de procesamiento virtuales, como2.PROJECT_IDcon el ID de tu proyecto de Google Cloud .REGIONcon el nombre de la región en la que se crea el clúster de AlloyDB, comous-central1
Espera a que se cree la instancia de AlloyDB. Esto puede tomar varios minutos.
Conéctate a tu instancia principal y crea una base de datos y un usuario de AlloyDB
Para crear una base de datos y un usuario de base de datos en tu instancia principal, completa los siguientes pasos:
Console
Si no estás en la página Descripción general del clúster que acabas de crear, ve a la página Clústeres en la consola de Google Cloud .
Para mostrar la página Descripción general del clúster, haz clic en el nombre del clúster CLUSTER_ID.
En el menú de navegación, haz clic en AlloyDB Studio.
En la página Accede a AlloyDB Studio, haz lo siguiente:
En la lista Base de datos, selecciona
postgres.En la lista Usuario, selecciona
postgres.En el campo Contraseña, ingresa
CLUSTER_PASSWORDque creaste en Crea un clúster de AlloyDB y su instancia principal.Haz clic en Autenticar. En el panel Explorador, se muestra una lista de los objetos de tu base de datos.
En la pestaña Editor 1, completa lo siguiente:
Crea una base de datos de AlloyDB:
CREATE DATABASE DATABASE_NAME;Reemplaza
DATABASE_NAMEpor el nombre que elijas, comotutorial_db.Haz clic en Ejecutar. Espera a que aparezca el mensaje
Statement executed successfullyen el panel Resultados.Haz clic en Borrar.
Crea un usuario y una contraseña de la base de datos de AlloyDB:
CREATE USER USERNAME WITH PASSWORD 'DATABASE_PASSWORD';Reemplaza lo siguiente:
USERNAME: Es el nombre del usuario de AlloyDB, comotutorial_user.DATABASE_PASSWORD: La contraseña de tu base de datos de AlloyDB, comotutorial.
Haz clic en Ejecutar. Espera a que aparezca el mensaje
Statement executed successfullyen el panel Resultados.
En el panel Explorador de AlloyDB Studio, haz clic en manage_accounts Cambiar usuario o base de datos.
En la página Accede a AlloyDB Studio, haz lo siguiente:
En la lista Base de datos, selecciona
DATABASE_NAME, comotutorial_db.En la lista Usuario, selecciona
postgres.En el campo Contraseña, ingresa
CLUSTER_PASSWORDque creaste en Crea un clúster de AlloyDB y su instancia principal.Haz clic en Autenticar. En el panel Explorador, se muestra una lista de los objetos de tu base de datos.
En la pestaña Editor 1, completa lo siguiente:
Otorga todos los permisos al usuario de la base de datos de AlloyDB:
GRANT ALL PRIVILEGES ON DATABASE "DATABASE_NAME" to "USERNAME";Haz clic en Ejecutar. Espera a que aparezca el mensaje
Statement executed successfullyen el panel Resultados.Haz clic en Borrar.
Otorga permisos al usuario de la base de datos de AlloyDB en el esquema público:
GRANT CREATE ON SCHEMA public TO "USERNAME";Haz clic en Ejecutar. Espera a que aparezca el mensaje
Statement executed successfullyen el panel Resultados.
Toma nota del nombre, el nombre de usuario y la contraseña de la base de datos. Usarás esta información en Crea un secreto de Kubernetes.
gcloud
Para crear un usuario de la base de datos de AlloyDB, ejecuta el siguiente comando en Cloud Shell:
gcloud alloydb users create USERNAME \ --cluster=CLUSTER_ID \ --region=REGION \ --password=DATABASE_PASSWORDReemplaza lo siguiente:
USERNAME: Es el nombre del usuario de AlloyDB, comotutorial_user.CLUSTER_ID: Es el ID del clúster, comoalloydb-cluster.REGION: Es la región en la que se encuentra el clúster, comous-central1.DATABASE_PASSWORD: La contraseña de tu base de datos de AlloyDB, comotutorial.
Para crear una base de datos y otorgar permisos, debes conectarte al clúster y ejecutar comandos de SQL. En Cloud Shell, usa el cliente
psqlpara conectarte a tu instancia.Una vez que te conectes a tu instancia como el usuario
postgres, crea la base de datos:CREATE DATABASE DATABASE_NAME;Reemplaza
DATABASE_NAMEpor el nombre que elijas, comotutorial_db.Otorga todos los permisos al usuario de la base de datos de AlloyDB en la base de datos nueva:
GRANT ALL PRIVILEGES ON DATABASE "DATABASE_NAME" to "USERNAME";Conéctate a la base de datos nueva y otorga permisos en el esquema
public:\c DATABASE_NAME GRANT CREATE ON SCHEMA public TO "USERNAME";Toma nota del nombre, el nombre de usuario y la contraseña de la base de datos. Usarás esta información en Crea un secreto de Kubernetes.
Crea un clúster de GKE Autopilot
Un clúster contiene al menos una máquina de plano de control del clúster y varias máquinas trabajadoras llamadas nodos. Los nodos son instancias de máquina virtual (VM) de Compute Engine que ejecutan los procesos de Kubernetes necesarios para que sean parte del clúster. Las aplicaciones se implementan en los clústeres y, luego, se ejecutan en los nodos.
Console
En la consola de Google Cloud , accede a la página de clústeres de Kubernetes.
Haz clic en Crear.
Especifica
GKE_CLUSTER_IDpara tu clúster de Autopilot en el campo Nombre de la página Conceptos básicos del clúster, comoap-cluster.En el campo Región, selecciona
REGION, comous-central1.Haz clic en Crear.
Espera a que se cree el clúster de GKE. Esto puede tomar varios minutos.
gcloud
Crea un clúster de Autopilot:
gcloud container clusters create-auto GKE_CLUSTER_ID \
--location=REGIONReemplaza lo siguiente:
GKE_CLUSTER_ID: Es el nombre del clúster de Autopilot, comoap-cluster.REGION: Es el nombre de la región en la que se implementa el clúster de GKE, comous-central1.
Espera a que se cree el clúster de GKE. Esto puede tomar varios minutos.
Conéctate a AlloyDB con el proxy de autenticación de AlloyDB
Te recomendamos que uses el proxy de autenticación de AlloyDB para conectarte a AlloyDB. El proxy de autenticación de AlloyDB proporciona una encriptación y autenticación sólidas con Identity and Access Management (IAM), lo que puede ayudar a mantener tu base de datos segura.
Cuando te conectas con el proxy de autenticación de AlloyDB, este se agrega a tu pod con el patrón de contenedor sidecar. El contenedor del proxy de autenticación de AlloyDB está en el mismo pod que tu aplicación, lo que permite que la aplicación se conecte al proxy de autenticación de AlloyDB con localhost, lo que aumenta la seguridad y el rendimiento.
Crea y otorga roles a las cuentas de servicio de Google
En Google Cloud, las aplicaciones usan cuentas de servicio para realizar llamadas autorizadas a la API autenticándose como la cuenta de servicio en sí. Cuando una aplicación se autentica como una cuenta de servicio, tiene acceso a todos los recursos a los que tiene acceso la cuenta de servicio.
Para ejecutar el proxy de autorización de AlloyDB en Google Kubernetes Engine, debes crear una cuenta de servicio de Google que represente tu aplicación. Te recomendamos que crees una cuenta de servicio única para cada aplicación, en lugar de usar la misma cuenta de servicio en todas partes. Este modelo es más seguro porque te permite limitar los permisos por aplicación.
Console
En la consola de Google Cloud , dirígete a la página IAM.
En la página Permisos para el proyecto "
PROJECT_ID", busca la fila que contiene la cuenta de servicio predeterminada de ComputePROJECT_NUMBER-compute@developer.gserviceaccount.comy haz clic en edit Editar principal en esa fila.Para obtener el
PROJECT_NUMBER, que es un identificador único generado automáticamente para tu proyecto, haz lo siguiente:Ve a la página Panel en la consola de Google Cloud .
Haz clic en la lista desplegable Seleccionar desde en la parte superior de la página. En la ventana Seleccionar una opción que aparece, elige tu proyecto.
El
PROJECT_NUMBERse muestra en la tarjeta Información del proyecto del panel del proyecto.Haz clic en Agregar otro rol.
Para otorgar el rol de
roles/artifactregistry.reader, haz clic en Seleccionar un rol, eligeArtifact Registryen Por producto o servicio y, luego,Artifact Registry Readeren Roles.Haz clic en Guardar. Se le otorga el rol a la principal.
Para crear una cuenta de servicio para la aplicación de ejemplo de GKE, ve a la página Cuentas de servicio. Ir a Cuentas de servicio
Elige tu proyecto.
En la página Cuentas de servicio para el proyecto "
PROJECT_ID", haz clic en Crear cuenta de servicio.En la sección Detalles de la cuenta de servicio de la página Crear cuenta de servicio, ingresa
GSA_NAMEen el campo Nombre de la cuenta de servicio, comogke-alloydb-gsa.Haz clic en Crear y continuar.
Aparecerá la sección Otorga a esta cuenta de servicio acceso al proyecto (opcional) de la página Crear cuenta de servicio.
Para otorgar el rol
roles/alloydb.client, haz lo siguiente:- Haz clic en Selecciona un rol.
- Elige
Cloud AlloyDBen Por producto o servicio. - Elige
Cloud AlloyDB Clienten Roles.
Haz clic en Agregar otro rol.
Para otorgar el rol de
roles/serviceusage.serviceUsageConsumer, haz clic en Seleccionar un rol, eligeService Usageen Por producto o servicio y, luego,Service Usage Consumeren Roles.Haz clic en Listo. Se otorgan roles a la cuenta de servicio de Google.
gcloud
Para otorgar los permisos necesarios a la cuenta de servicio predeterminada de Google de modo que Compute Engine pueda leer desde Artifact Registry, ejecuta el siguiente comando:
PROGECT_NUM=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)") gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:$PROGECT_NUM-compute@developer.gserviceaccount.com" --role="roles/artifactregistry.reader"Para crear una cuenta de servicio de Google para tu aplicación, crea una cuenta de servicio de IAM:
gcloud iam service-accounts create GSA_NAME \ --display-name="gke-tutorial-service-account"Reemplaza
GSA_NAMEpor el nombre de tu nueva cuenta de servicio de IAM, comogke-alloydb-gsa.Para otorgar los roles
alloydb.clientyserviceusage.serviceUsageConsumera la GSA de tu aplicación, usa los siguientes comandos:gcloud projects add-iam-policy-binding PROJECT_ID --member=serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com --role="roles/alloydb.client" gcloud projects add-iam-policy-binding PROJECT_ID --member=serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com --role="roles/serviceusage.serviceUsageConsumer"
Configura la federación de identidades para cargas de trabajo para GKE en la aplicación de ejemplo
Debes configurar GKE para proporcionar la cuenta de servicio al proxy de autenticación de AlloyDB con la función Workload Identity Federation for GKE. Este método te permite vincular una cuenta de servicio de Kubernetes a una cuenta de servicio de Google. Luego, se puede acceder a la cuenta de servicio de Google desde las aplicaciones que usan la cuenta de servicio de Kubernetes correspondiente.
Una cuenta de servicio de Google es una identidad de IAM que representa tu aplicación en Google Cloud. Una cuenta de servicio de Kubernetes es una identidad que representa tu aplicación en un clúster de Google Kubernetes Engine.
La federación de identidades para cargas de trabajo para GKE vincula una cuenta de servicio de Kubernetes a una cuenta de servicio de Google. Esta vinculación hace que cualquier implementación con esa cuenta de servicio de Kubernetes se autentique como la cuenta de servicio de Google en sus interacciones con Google Cloud.
Console
Para iniciar Cloud Shell, completa los siguientes pasos.
-
En la consola de Google Cloud , activa Cloud Shell.
En la parte inferior de la consola de Google Cloud , se inicia una sesión de Cloud Shell que muestra una ventana emergente con una línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.
En Cloud Shell, obtén las credenciales para tu clúster:
gcloud container clusters get-credentials GKE_CLUSTER_ID --region REGION --project PROJECT_IDEste comando configura
kubectlpara usar el clúster de GKE que creaste.En el editor que prefieras, completa los siguientes pasos:
Abre
service-account.yamlcon nano, por ejemplo:nano service-account.yamlEn el editor, pega el siguiente contenido:
apiVersion: v1 kind: ServiceAccount metadata: name: KSA_NAMEReemplaza
KSA_NAMEpor el nombre de la cuenta de servicio, comoksa-alloydb.Presiona Control+O, INTRO para guardar los cambios y, luego, Control+X para salir del editor.
Crea una cuenta de servicio de Kubernetes para tu aplicación de ejemplo:
kubectl apply -f service-account.yamlPara vincular la cuenta de servicio de Kubernetes a la cuenta de servicio de Google, completa los siguientes pasos en la consola de Google Cloud :
En la consola de Google Cloud , ve a la página Cuentas de servicio.
Elige tu proyecto.
Haz clic en el nombre de la cuenta de servicio de Google
GSA_NAME.Haz clic en la pestaña Permisos.
Haz clic en Otorgar acceso.
En el campo Principales nuevas, ingresa lo siguiente:
serviceAccount:PROJECT_ID.svc.id.goog[default/KSA_NAME]En la lista Seleccionar un rol, selecciona IAM > Usuario de Workload Identity.
Haz clic en Guardar.
En Cloud Shell, agrega la anotación
iam.gke.io/gcp-service-accounta la cuenta de servicio de Kubernetes con la dirección de correo electrónico de la cuenta de servicio de Google:kubectl annotate serviceaccount \ KSA_NAME \ iam.gke.io/gcp-service-account=GSA_NAME@PROJECT_ID.iam.gserviceaccount.com
gcloud
En la consola de Google Cloud , abre Cloud Shell.
En Cloud Shell, obtén las credenciales para tu clúster:
gcloud container clusters get-credentials GKE_CLUSTER_ID --region REGION --project PROJECT_IDEste comando configura
kubectlpara usar el clúster de GKE que creaste.En el editor que prefieras, completa los siguientes pasos:
Abre
service-account.yamlcon nano, por ejemplo:nano service-account.yamlEn el editor, pega el siguiente contenido:
apiVersion: v1 kind: ServiceAccount metadata: name: KSA_NAMEReemplaza
KSA_NAMEpor el nombre de la cuenta de servicio, comoksa-alloydb.Presiona Control+O, INTRO para guardar los cambios y, luego, Control+X para salir del editor.
Crea una cuenta de servicio de Kubernetes para tu aplicación de ejemplo:
kubectl apply -f service-account.yamlOtorga permisos a tu cuenta de servicio de Kubernetes para que actúe en nombre de la cuenta de servicio de Google creando una vinculación de política de IAM entre las dos cuentas de servicio:
gcloud iam service-accounts add-iam-policy-binding \ --role="roles/iam.workloadIdentityUser" \ --member="serviceAccount:PROJECT_ID.svc.id.goog[default/KSA_NAME]" \ GSA_NAME@PROJECT_ID.iam.gserviceaccount.comAgrega la anotación
iam.gke.io/gcp-service-account=GSA_NAME@PROJECT_IDa la cuenta de servicio de Kubernetes con la dirección de correo electrónico de la cuenta de servicio de Google:kubectl annotate serviceaccount \ KSA_NAME \ iam.gke.io/gcp-service-account=GSA_NAME@PROJECT_ID.iam.gserviceaccount.com
Propaga Artifact Registry con una imagen de la aplicación de ejemplo
Para compilar una imagen de contenedor de la aplicación de ejemplo y enviarla a un repositorio, completa los siguientes pasos.
Console
En la consola de Google Cloud , ve a la página Artifact Registry.
Para crear un repositorio, haz clic en .
En el campo Nombre, ingresa
REPOSITORY_ID, comogke-alloydb-sample-app.En la sección Formato, selecciona Docker.
En la sección Tipo de ubicación, selecciona Región y elige
REGION, comous-central1.Haz clic en Crear.
Para compilar la imagen de la aplicación de ejemplo, inicia Cloud Shell y completa los siguientes pasos.
-
En la consola de Google Cloud , activa Cloud Shell.
En la parte inferior de la consola de Google Cloud , se inicia una sesión de Cloud Shell que muestra una ventana emergente con una línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.
En Cloud Shell, clona el repositorio con el código de la aplicación de ejemplo
gke-alloydb-appde GitHub:git clone https://github.com/GoogleCloudPlatform/alloydb-auth-proxy && cd alloydb-auth-proxy/examples/goEn el diálogo Autorizar Cloud Shell, haz clic en Autorizar. Este mensaje no aparece si ya realizaste este paso.
Para compilar el contenedor de Docker y publicarlo en Artifact Registry, ejecuta el siguiente comando:
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY_ID/SAMPLE_APPLICATION --project PROJECT_IDReemplaza lo siguiente:
PROJECT_ID: el ID de tu proyecto.REPOSITORY_ID: Es el nombre de tu repositorio, comogke-alloydb-sample-app.SAMPLE_APPLICATION: Es el nombre de tu aplicación web de muestra, comogke-alloydb-app.
gcloud
En Cloud Shell, usa el siguiente comando para clonar el repositorio con el código de la aplicación de ejemplo
gke-alloydb-appde GitHub:git clone https://github.com/GoogleCloudPlatform/alloydb-auth-proxy && cd alloydb-auth-proxy/examples/goCrea un repositorio en Artifact Registry para las imágenes de Docker:
gcloud artifacts repositories create REPOSITORY_ID --location REGION --repository-format=docker --project PROJECT_IDReemplaza lo siguiente:
PROJECT_ID: el ID de tu proyecto.REPOSITORY_ID: Es el nombre de tu repositorio, comogke-alloydb-sample-app.
En el diálogo Autorizar Cloud Shell, haz clic en Autorizar. Este mensaje no aparece si ya realizaste este paso.
Para compilar un contenedor de Docker y publicarlo en Artifact Registry, usa el siguiente comando:
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY_ID/SAMPLE_APPLICATION --project PROJECT_IDReemplaza lo siguiente:
PROJECT_ID: el ID de tu proyecto.REPOSITORY_ID: Es el nombre de tu repositorio, comogke-alloydb-sample-app.SAMPLE_APPLICATION: Es el nombre de tu aplicación web de muestra, comogke-alloydb-app.
Crea un secreto de Kubernetes
Crearás secretos de Kubernetes para la base de datos, el usuario y la contraseña de usuario que usará la aplicación de ejemplo. Los valores de cada secreto se basan en los valores especificados en el paso Conéctate a tu instancia principal y crea una base de datos y un usuario de AlloyDB de este instructivo. Para obtener más información, consulta Secretos.
Console
En tu Cloud Shell abierto, usa un SECRET de Kubernetes, como gke-alloydb-secret, para almacenar la información de conexión:
kubectl create secret generic SECRET \
--from-literal=database=DATABASE_NAME \
--from-literal=username=USERNAME \
--from-literal=password=DATABASE_PASSWORDgcloud
Usa un SECRET de Kubernetes, como gke-alloydb-secret, para almacenar la información de conexión:
kubectl create secret generic SECRET \
--from-literal=database=DATABASE_NAME \
--from-literal=username=USERNAME \
--from-literal=password=DATABASE_PASSWORDImplementa y ejecuta el proxy de AlloyDB en un patrón de archivo adicional
Te recomendamos que ejecutes AlloyDB Proxy en un patrón sidecar como un contenedor adicional que comparte un Pod con tu aplicación por los siguientes motivos:
- Evita que el tráfico de SQL se exponga de manera local. El proxy de AlloyDB proporciona encriptación en conexiones salientes, pero debes limitar la exposición para las conexiones entrantes.
- Evita un único punto de fallo. El acceso de cada aplicación a la base de datos es independiente de las demás, por lo que es más resistente.
- Limita el acceso al proxy de AlloyDB, lo que te permite usar permisos de IAM por aplicación, en lugar de exponer la base de datos a todo el clúster.
- Te permite definir el alcance de las solicitudes de recursos con mayor precisión. Debido a que el proxy de AlloyDB consume recursos de forma lineal según el uso, este patrón te permite definir el alcance y solicitar recursos con mayor precisión para que se ajusten a las aplicaciones a medida que se realiza el escalamiento.
- Te permite configurar tu aplicación para que se conecte con
127.0.0.1en el DB_PORT que especificaste en la sección de comandos.
Después de crear un clúster de GKE y compilar una imagen de contenedor para tu aplicación, implementa la aplicación alojada en contenedores en el clúster de GKE.
Console
En este instructivo, implementarás la aplicación web de ejemplo para recopilar votos, gke-alloydb-app, que usa AlloyDB como Datastore.
Obtén la conexión de instancia
INSTANCE_URIpara la instancia principal de AlloyDB:En la consola de Google Cloud , ve a la página Clústeres.
Para mostrar la página Descripción general del clúster, haz clic en su nombre.
En la tabla Instancias, haz clic en el nombre de tu instancia principal.
En el campo URI de la instancia de la página Descripción general, haz clic en Copiar al portapapeles.
Especifica este
INSTANCE_URIen el archivo de definiciónproxy_sidecar_deployment.yamlen el paso 2b de esta sección.En Cloud Shell, completa los siguientes pasos:
Abre
proxy_sidecar_deployment.yamlcon el editor que prefieras, por ejemplo, nano:nano proxy_sidecar_deployment.yamlEn el editor, pega el siguiente contenido:
apiVersion: apps/v1 kind: Deployment metadata: name: gke-alloydb spec: selector: matchLabels: app: SAMPLE_APPLICATION template: metadata: labels: app: SAMPLE_APPLICATION spec: serviceAccountName: KSA_NAME containers: - name: SAMPLE_APPLICATION # Replace <PROJECT_ID> and <REGION> with your project ID and region. image: REGION -docker.pkg.dev/PROJECT_ID /REPOSITORY_ID /SAMPLE_APPLICATION:latest imagePullPolicy: Always # This app listens on port 8080 for web traffic by default. ports: - containerPort: 8080 env: - name: PORT value: "8080" - name: INSTANCE_HOST value: "127.0.0.1" - name: DB_PORT value: "5432" - name: DB_USER valueFrom: secretKeyRef: name: SECRET key: username - name: DB_PASS valueFrom: secretKeyRef: name: SECRET key: password - name: DB_NAME valueFrom: secretKeyRef: name: SECRET key: database - name: alloydb-proxy # This uses the latest version of the AlloyDB Auth proxy image: gcr.io/alloydb-connectors/alloydb-auth-proxy:1.10.1 command: - "/alloydb-auth-proxy" #AlloyDB instance name as parameter for the AlloyDB proxy - "INSTANCE_URI " securityContext: runAsNonRoot: true resources: requests: memory: "2Gi" cpu: "1"Reemplaza
INSTANCE_URIpor la ruta de acceso que copiaste en el paso 1.Presiona Control+O, INTRO para guardar los cambios y, luego, Control+X para salir del editor.
Para implementar la aplicación
gke-alloydb-app, aplica el archivo de definición:kubectl apply -f proxy_sidecar_deployment.yamlPara verificar que la aplicación se esté ejecutando, ve a la página Cargas de trabajo en la consola de Google Cloud :
Verifica que el estado de la implementación de gke-alloydb sea OK.
Para conectarte a la aplicación de ejemplo con un balanceador de cargas externo, completa los siguientes pasos en tu Cloud Shell abierto:
Abre
service.yaml:nano service.yamlPega el siguiente contenido:
apiVersion: v1 kind: Service metadata: name: SAMPLE_APPLICATION spec: type: LoadBalancer selector: app: SAMPLE_APPLICATION ports: - port: 80 targetPort: 8080Reemplaza
SAMPLE_APPLICATIONpor el nombre de tu aplicación, comogke-alloydb-app.Guarda y cierra el editor, y luego aplica el servicio:
kubectl apply -f service.yaml
Para obtener la dirección IP externa de tu aplicación, ve a la página Ingress y Service en la consola de Google Cloud :
Usa el valor de la columna External endpoints para acceder a la aplicación en la siguiente URL:
http://EXTERNAL_IP
gcloud
En este instructivo, implementarás la aplicación web de ejemplo para recopilar votos, gke-alloydb-app, que usa AlloyDB como Datastore.
Obtén la conexión de instancia INSTANCE_URI para la instancia principal de AlloyDB a la que deseas que se conecte el proxy de AlloyDB:
gcloud alloydb instances describe INSTANCE_ID \ --cluster=CLUSTER_ID \ --region=REGION \ --format="value(name)"Reemplaza lo siguiente:
INSTANCE_ID: Es el nombre de la instancia, comoalloydb-primary.CLUSTER_ID: Es el nombre del clúster, comoalloydb-cluster.
El resultado contiene el INSTANCE_URI que especificas en el archivo de definición
proxy_sidecar_deployment.yamlen el paso 2b de esta sección.En el editor que prefieras, por ejemplo, nano, completa los siguientes pasos:
Abre
proxy_sidecar_deployment.yamlcon el editor que prefieras, por ejemplo, nano:nano proxy_sidecar_deployment.yamlEn el editor, pega el siguiente contenido:
apiVersion: apps/v1 kind: Deployment metadata: name: gke-alloydb spec: selector: matchLabels: app: SAMPLE_APPLICATION template: metadata: labels: app: SAMPLE_APPLICATION spec: serviceAccountName: KSA_NAME containers: - name: SAMPLE_APPLICATION # Replace <PROJECT_ID> and <REGION> with your project ID and region. image: REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY_ID/SAMPLE_APPLICATION:latest imagePullPolicy: Always # This app listens on port 8080 for web traffic by default. ports: - containerPort: 8080 env: - name: PORT value: "8080" # This project uses environment variables to determine # how you would like to run your application # To use the Go connector (recommended) - use INSTANCE NAME # To use TCP - Setting INSTANCE_HOST will use TCP (e.g., 127.0.0.1) - name: INSTANCE_HOST value: "127.0.0.1" - name: DB_PORT value: "5432" # To use Automatic IAM Authentication (recommended) # use DB_IAM_USER instead of DB_USER # you may also remove the DB_PASS environment variable - name: DB_USER valueFrom: secretKeyRef: name: SECRET key: username - name: DB_PASS valueFrom: secretKeyRef: name: SECRET key: password - name: DB_NAME valueFrom: secretKeyRef: name: SECRET key: database # If you are using the Go connector (recommended), you can # remove alloydb-proxy (everything below this line) - name: alloydb-proxy # This uses the latest version of the AlloyDB Auth proxy # It is recommended to use a specific version for production environments. # See: https://github.com/GoogleCloudPlatform/alloydb-auth-proxy image: gcr.io/alloydb-connectors/alloydb-auth-proxy:1.10.1 command: - "/alloydb-auth-proxy" #AlloyDB instance name as parameter for the AlloyDB proxy # Use <INSTANCE_URI> - "INSTANCE_URI" securityContext: # The default AlloyDB Auth proxy image runs as the # "nonroot" user and group (uid: 65532) by default. runAsNonRoot: true resources: requests: # The proxy's memory use scales linearly with the number of active # connections. Fewer open connections will use less memory. Adjust # this value based on your application's requirements. memory: "2Gi" # The proxy's CPU use scales linearly with the amount of IO between # the database and the application. Adjust this value based on your # application's requirements. cpu: "1"Reemplaza
INSTANCE_URIpor la ruta de acceso a tu instancia principal de AlloyDB del paso 1, comoprojects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID/instances/INSTANCE_ID.Presiona Control+O, INTRO para guardar los cambios y, luego, Control+X para salir del editor.
Para implementar la aplicación
gke-alloydb-app, aplica el archivo de definiciónproxy_sidecar_deployment.yamlque creaste en el paso anterior:kubectl apply -f proxy_sidecar_deployment.yamlVerifica que el estado de ambos contenedores en el Pod sea
running:kubectl get podsResultado de muestra:
NAME READY STATUS RESTARTS AGE gke-alloydb-8d59bb4cc-62xgh 2/2 Running 0 2m53sPara conectarte a la aplicación de ejemplo
gke-alloydb-app, usa un servicio, por ejemplo, un balanceador de cargas HTTP externo. En el editor que prefieras, sigue estos pasos:Abre
service.yamlcon nano, por ejemplo:nano service.yamlEn el editor nano, pega el siguiente contenido:
apiVersion: v1 kind: Service metadata: name: SAMPLE_APPLICATION spec: type: LoadBalancer selector: app: SAMPLE_APPLICATION ports: - port: 80 targetPort: 8080Reemplaza
SAMPLE_APPLICATIONpor el nombre de tu aplicación web de ejemplo, comogke-alloydb-app.Presiona Control+O, INTRO para guardar los cambios y, luego, Control+X para salir del editor.
Para implementar la aplicación de servicio
gke-alloydb-app, aplica el archivoservice.yaml:kubectl apply -f service.yamlPara obtener los detalles del servicio, incluida la dirección IP externa, usa el siguiente comando:
kubectl get serviceResultado de muestra:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE gke-alloydb-app LoadBalancer 34.118.229.246 35.188.16.172 80:32712/TCP 45s kubernetes ClusterIP 34.118.224.1 <none> 443/TCP 85mUsa el valor de la IP externa del paso anterior para acceder a la aplicación de ejemplo en la siguiente URL:
http://EXTERNAL-IP
Ejemplo de archivos de configuración
proxy_sidecar_deployment.yaml
service.yaml
service-account.yaml
Realiza una limpieza
Para evitar que se apliquen cargos a tu Google Cloud cuenta por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
Borra el proyecto
La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.
Para borrar el proyecto, haz lo siguiente:
En la Google Cloud consola, ve a la página Administrar recursos.
En la lista de proyectos, elige el proyecto que deseas borrar y haz clic en Borrar.
En el cuadro de diálogo, escribe tu
PROJECT_IDy, luego, haz clic en Cerrar para borrar el proyecto.
¿Qué sigue?
- Acerca del proxy de autenticación de AlloyDB
- Descripción general de la IP interna
- Documentación de Google Kubernetes Engine