Instancias múltiples declarativas con espacios de nombres de proyectos
En este instructivo, se muestra cómo usar el plano de espacio de nombres del proyecto con el controlador de configuración a fin de crear un espacio de nombres dedicado para administrar los recursos de Google Cloud en un proyecto específico. Continúa si eres un administrador de infraestructura y deseas permitir que tus usuarios internos administren de forma declarativa la configuración de su proyecto.
El controlador de configuración es un servicio alojado para aprovisionar y organizar recursos de Anthos y Google Cloud. Ofrece un extremo de API que puede aprovisionar, activar y organizar recursos de Google Cloud como parte de Anthos Config Management.
Los planos de KRM son una forma de empaquetar los recursos que se suelen usar juntos y codificar las prácticas recomendadas que puedes implementar en tu organización.
El plano de espacio de nombres del proyecto es un plano de KRM que incluye todos los recursos que necesitas para aprovisionar un espacio de nombres en el controlador de configuración en el que tú o un usuario pueden administrar los recursos del proyecto de Google Cloud. Puedes crear una instancia del plano varias veces para configurar varios espacios de nombres de proyecto.
El plano de espacio de nombres del proyecto facilita la administración de uno o más espacios de nombres del proyecto, pero si deseas ver los pasos manuales con Google Cloud CLI
, consulta Configura Config Connector para administrar recursos en tus espacios de nombres.
Objetivos
- Configura un espacio de nombres de proyecto en el controlador de configuración.
- Aplica la configuración mediante
kpt live apply
.
Costos
En este instructivo, se usan los siguientes componentes facturables de Google Cloud:
Para obtener una lista completa de los recursos incluidos en el plano del espacio de nombres del proyecto, consulta la sección Recursos del paquete del plano de espacio de nombres del proyecto.
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Cuando finalices este instructivo, puedes borrar los recursos creados para evitar que se te siga facturando. Para obtener más información, consulta Realiza una limpieza.
Requisitos
Debes tener una instancia del controlador de configuración.
Obtén más información para configurar el controlador de configuración.
Debes tener un proyecto de Google Cloud. Este es el proyecto de usuario que administrará el espacio de nombres de tu proyecto.
Debes tener habilitada la facturación para tu proyecto de usuario.
Descubre cómo confirmar que tienes habilitada la facturación en un proyecto.
Antes de comenzar
-
En Cloud Console, activa Cloud Shell.
En la parte inferior de Cloud Console, se inicia una sesión de Cloud Shell en la que se muestra una ventana de 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.
Ejecuta todos los comandos de este instructivo desde Cloud Shell.
Configure el entorno
En Cloud Shell, ejecute los siguientes comandos:
Instala
kubectl
, la interfaz principal de línea de comandos para Kubernetes:gcloud components install kubectl
Instala
kpt
, la interfaz principal de línea de comandos para los planos de KRM:gcloud components install kpt
Configura
kubectl
ykpt
para conectarte con el controlador de configuración:gcloud alpha anthos config controller get-credentials INSTANCE_NAME \ --location COMPUTE_REGION \ --project ADMIN_PROJECT_ID
Reemplaza lo siguiente:
INSTANCE_NAME
: el nombre de tu instancia de Config Controller.COMPUTE_REGION
: la región de tu instancia del controlador de configuración (por ejemplo,us-central1
).ADMIN_PROJECT_ID
: el ID del proyecto de tu clúster del controlador de configuración.
Habilita la API de Resource Manager:
Config Connector usa la API de Resource Manager para administrar la habilitación de otras API de servicio.
gcloud services enable cloudresourcemanager.googleapis.com \ --project TENANT_PROJECT_ID
Reemplaza
TENANT_PROJECT_ID
por el ID del proyecto de tu usuario.Instala la CRD de ResourceGroup, si aún no está instalada:
kpt live install-resource-group
Verifica que Config Connector esté configurado y en buen estado en el espacio de nombres del proyecto
config-control
:kubectl get ConfigConnectorContext -n config-control \ -o "custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name,HEALTHY:.status.healthy"
Resultado esperado:
NAMESPACE NAME HEALTHY config-control configconnectorcontext.core.cnrm.cloud.google.com true
Otorga permiso al controlador de configuración para que administre los recursos de Google Cloud en el proyecto del usuario:
export TENANT_PROJECT_ID=TENANT_PROJECT_ID export SA_EMAIL="$(kubectl get ConfigConnectorContext -n config-control \ -o jsonpath='{.items[0].spec.googleServiceAccount}' 2> /dev/null)" gcloud projects add-iam-policy-binding "${TENANT_PROJECT_ID}" \ --member "serviceAccount:${SA_EMAIL}" \ --role "roles/owner" \ --project "${TENANT_PROJECT_ID}"
Configura un espacio de nombres del proyecto
Para crear un espacio de nombres del proyecto en el que administrar recursos para otro proyecto, ejecuta los siguientes comandos.
Obtén el plano del espacio de nombres del proyecto con
kpt
desde el directorio de trabajo deseado:kpt pkg get \ https://github.com/GoogleCloudPlatform/blueprints.git/catalog/project/kcc-namespace@main \ TENANT_PROJECT_ID
Reemplaza
TENANT_PROJECT_ID
por el ID del proyecto de tu usuario.En este plano, el ID del proyecto también se usa como el nombre del espacio de nombres del proyecto.
Ingresa al directorio del paquete:
cd ./TENANT_PROJECT_ID/
Para configurar el paquete, modifica el archivo
setters.yaml
:cat > setters.yaml << EOF apiVersion: v1 kind: ConfigMap metadata: name: setters annotations: config.kubernetes.io/local-config: "true" data: project-id: TENANT_PROJECT_ID management-project-id: ADMIN_PROJECT_ID management-namespace: ADMIN_NAMESPACE projects-namespace: PROJECTS_NAMESPACE networking-namespace: NETWORKING_NAMESPACE EOF
Reemplaza lo siguiente:
ADMIN_PROJECT_ID
: el ID del proyecto que contiene tu clúster del controlador de configuración.El proyecto de administración se usará para iniciar la identidad de carga de trabajo de Config Connector.
ADMIN_NAMESPACE
: es el espacio de nombres que se usará para administrar los espacios de nombres del proyecto (por ejemplo,config-control
).El espacio de nombres de administrador se usará para iniciar la identidad de la carga de trabajo de Config Connector en el proyecto del administrador.
PROJECTS_NAMESPACE
: es el espacio de nombres que se usará para administrar los permisos del proyecto (por ejemplo,config-control
).El espacio de nombres del proyecto se usará para administrar cuestiones como la política de IAM, de modo que los usuarios con acceso al espacio de nombres del usuario no puedan escalar sus permisos.
Si usaste el plano de zona de destino, ya deberías tener un espacio de nombres
projects
para administrar proyectos. De lo contrario, configúralo comoconfig-control
.NETWORKING_NAMESPACE
es el espacio de nombres que se usa para administrar las VPC compartidas (por ejemplo,config-control
).Esto te permitirá usar referencias de recursos entre espacios de nombres cuando seleccionas qué red o subred usar.
Si usaste el plano de zona de destino, ya deberías tener un espacio de nombres
networking
para administrar las VPC compartidas. De lo contrario, configúralo comoconfig-control
.
Procesa los valores del modo set en los recursos con plantilla:
kpt fn render
Resultado de ejemplo:
Package "example-1234": [RUNNING] "gcr.io/kpt-fn/apply-setters:v0.1" [PASS] "gcr.io/kpt-fn/apply-setters:v0.1" Results: [INFO] set field value to "cnrm-network-viewer-example-1234" in file "kcc-namespace-viewer.yaml" in field "metadata.name" [INFO] set field value to "config-control" in file "kcc-namespace-viewer.yaml" in field "metadata.namespace" [INFO] set field value to "cnrm-controller-manager-example-1234" in file "kcc-namespace-viewer.yaml" in field "subjects[0].name" [INFO] set field value to "cnrm-project-viewer-example-1234" in file "kcc-namespace-viewer.yaml" in field "metadata.name" ...(20 line(s) truncated, use '--truncate-output=false' to disable) Successfully executed 1 function(s) in 1 package(s).
Configura los permisos de los usuarios
Para permitir que un usuario aprovisione los recursos del proyecto de Google Cloud en su proyecto de usuario, otórgale permiso para usar el espacio de nombres del proyecto de usuario con los siguientes comandos.
Crea un archivo
project-admin.yaml
con el siguienteRoleBinding
:cat > project-admin.yaml << EOF apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: project-admin namespace: TENANT_PROJECT_ID roleRef: kind: ClusterRole name: cnrm-admin apiGroup: rbac.authorization.k8s.io subjects: - kind: User name: TENANT_EMAIL apiGroup: rbac.authorization.k8s.io EOF
Reemplaza
TENANT_EMAIL
por el correo electrónico de la cuenta de usuario de Google Cloud de usuario (por ejemplo,janedoe@example.com
).La función
cnrm-admin
permitirá que la instancia cree recursos de Config Connector en el espacio de nombres del proyecto.Para obtener detalles sobre cómo autorizar un grupo o una cuenta de servicio, consulta Asigna funciones con RoleBindings o ClusterRoleBindings.
Aplica cambios de configuración
Los cambios locales en los pasos anteriores no afectan la nube hasta que se apliquen.
Para aplicar los cambios de configuración, ejecuta los siguientes comandos:
Inicializa el directorio de trabajo con kpt, que crea un recurso para realizar un seguimiento de los cambios:
kpt live init --namespace ADMIN_NAMESPACE
Reemplaza
ADMIN_NAMESPACE
por el espacio de nombres que se usa para administrar los espacios de nombres del proyecto (por ejemplo,config-control
).Obtén una vista previa de los recursos que se crearán:
kpt live apply --dry-run
Todos los recursos deben decir “fecha de creación (prueba de validación)”.
Resultado de ejemplo:
namespace/example-1234 created (dry-run) rolebinding.rbac.authorization.k8s.io/cnrm-network-viewer-example-1234 created (dry-run) rolebinding.rbac.authorization.k8s.io/cnrm-project-viewer-example-1234 created (dry-run) rolebinding.rbac.authorization.k8s.io/project-admin created (dry-run) configconnectorcontext.core.cnrm.cloud.google.com/configconnectorcontext.core.cnrm.cloud.google.com created (dry-run) iampartialpolicy.iam.cnrm.cloud.google.com/example-1234-sa-workload-identity-binding created (dry-run) iampartialpolicy.iam.cnrm.cloud.google.com/kcc-example-1234-owners-permissions created (dry-run) iamserviceaccount.iam.cnrm.cloud.google.com/kcc-example-1234 created (dry-run) 8 resource(s) applied. 8 created, 0 unchanged, 0 configured, 0 failed (dry-run) 0 resource(s) pruned, 0 skipped, 0 failed (dry-run)
Aplica los recursos con
kpt
:kpt live apply
Todos los recursos deben decir “creado”.
Resultado de ejemplo:
namespace/example-1234 created rolebinding.rbac.authorization.k8s.io/cnrm-network-viewer-example-1234 created rolebinding.rbac.authorization.k8s.io/cnrm-project-viewer-example-1234 created rolebinding.rbac.authorization.k8s.io/project-admin created configconnectorcontext.core.cnrm.cloud.google.com/configconnectorcontext.core.cnrm.cloud.google.com created iampartialpolicy.iam.cnrm.cloud.google.com/example-1234-sa-workload-identity-binding created iampartialpolicy.iam.cnrm.cloud.google.com/kcc-example-1234-owners-permissions created iamserviceaccount.iam.cnrm.cloud.google.com/kcc-example-1234 created 8 resource(s) applied. 8 created, 0 unchanged, 0 configured, 0 failed 0 resource(s) pruned, 0 skipped, 0 failed
Verifica el éxito
Para verificar que los cambios se apliquen y que se aprovisionen los recursos que especifiquen, ejecuta los comandos siguientes.
Espera hasta que los recursos estén listos:
kpt live status --output table --poll-until current
Este comando sondeará hasta que todos los recursos tengan el estado
Current
y una condición deReady
o<None>
(para recursos que no admiten la condición Listo). ElReady
será verde si Listo=verdadero y rojo si Listo=falso.Usa
ctrl-c
para interrumpir, si es necesario.Resultado de ejemplo:
NAMESPACE RESOURCE STATUS CONDITIONS AGE MESSAGE Namespace/example-1234 Current <None> 13s Resource is current config-con IAMPartialPolicy/example-1234-sa-workloa Current Ready 11s Resource is Ready config-con IAMPartialPolicy/kcc-example-1234-owners Current Ready 11s Resource is Ready config-con IAMServiceAccount/kcc-example-1234 Current Ready 11s Resource is Ready config-con RoleBinding/cnrm-network-viewer-example- Current <None> 13s Resource is current config-con RoleBinding/cnrm-project-viewer-example- Current <None> 12s Resource is current example-12 ConfigConnectorContext/configconnectorco Current <None> 12s Resource is current example-12 RoleBinding/project-admin Current <None> 12s Resource is current
En el caso de error, usa el resultado del evento predeterminado para ver los mensajes de error completos:
kpt live status
Realice una limpieza
Si decides dejar de usar el controlador de configuración, primero debes limpiar todos los recursos que creaste con él y, luego, borrarlo.
Borra los recursos con
kpt
, desde el directorio de trabajo:kpt live destroy
Espera hasta que se borren todos los recursos:
until [ -z "$(kubectl get -R -f . --ignore-not-found | tee /dev/fd/2)" ]; \ do sleep 1; done
Este comando sondeará hasta que todos los recursos tengan el estado
Deleted
.Usa
ctrl-c
para interrumpir, si es necesario.
¿Qué sigue?
- Explora el catálogo de planos de KRM.