Perfil de habilidades: ingeniero de implementaciones
Como operador, puedes crear una organización para proporcionar acceso a la infraestructura de la plataforma a los clientes. Para obtener los permisos que necesitas para crear una organización, pide a tu administrador de seguridad que te asigne el rol de administrador de la organización.
El recurso Organization es el nodo raíz de la jerarquía de recursos con air gap de Google Distributed Cloud (GDC). Todos los recursos que pertenecen a una organización se agrupan en el nodo de la organización. De esta forma, se obtiene una visibilidad y un control centralizados sobre todos los recursos que pertenecen a una organización.
Para obtener más información sobre las organizaciones, consulta el artículo Introducción a las organizaciones.
1.1. Antes de empezar
Asegúrate de que has instalado lo siguiente:
Un navegador en tu sistema.
La interfaz de línea de comandos (CLI) de Git.
La CLI de kubectl.
La CLI de gdcloud.
1.2. Crear un cliente de OIDC en OC IT ADFS
Consulta las instrucciones de configuración de OIDC de ADFS para crear un cliente OpenID Connect (OIDC) en ADFS y que el operador pueda acceder a la organización que vas a crear. Anota el ID de cliente y el secreto de cliente de OIDC. No debes reutilizar el cliente en conexiones a otros clústeres, como el clúster de administrador raíz y otros clústeres de administrador de organización, ni a servicios como ServiceNow.
Añade la siguiente URL de retrollamada de GKE Identity Service a la lista de permitidas del cliente OIDC de ADFS que has creado para la organización que vas a crear:
https://ais-core.ORG_NAME.GDC_URL.GDC_DOMAIN/finish-loginPor ejemplo:
- Nombre de la organización:
operations - Nombre de la instancia de Distributed Cloud:
google - Nombre de dominio de Distributed Cloud:
gdch.test
En este caso, la URL de retrollamada de GKE Identity Service es
https://ais-core.operations.google.gdch.test/finish-login.- Nombre de la organización:
Añade la siguiente URL de retrollamada del servicio de identidad de GKE a la lista de permitidas del cliente OIDC de ADFS que has creado para cada zona de tu universo de GDC:
https://ais-core.ORG_NAME.ZONE.GDC_URL.GDC_DOMAIN/finish-loginPor ejemplo:
- Nombre de la organización:
operations - Nombre de la zona:
zone-1 - Nombre de la instancia de Distributed Cloud:
google - Nombre de dominio de Distributed Cloud:
gdch.test
En este caso, la URL de retrollamada de GKE Identity Service es
https://ais-core.operations.zone-1.google.gdch.test/finish-login.- Nombre de la organización:
Define las siguientes variables para usarlas en las secciones posteriores:
export ADFS_CERT_BASE64=ADFS_CERT_BASE64 export ADFS_CLIENT_ID=ADFS_CLIENT_ID export ADFS_CLIENT_SECRET=ADFS_CLIENT_SECRET export ADFS_ISSUER_URI=ADFS_ISSUER_URISustituye las variables por los siguientes valores:
Variable Definición ADFS_CERT_BASE64El archivo adfs.pemcodificado en base64.ADFS_CLIENT_IDEl identificador de cliente de ADFS. ADFS_CLIENT_SECRETSecreto compartido del cliente de ADFS. ADFS_ISSUER_URIURI del emisor de ADFS. Para obtener el URI, comprueba la ruta /adfs/.well-known/openid-configurationdel servidor ADFS:
curl -s https://fs.opscenter.local/adfs/.well-known/openid-configuration | jq '.issuer' "https://fs.opscenter.local/adfs"
El valor suele serhttps://adfs.domain.com/adfs.
1.3. Crea subredes globales y divídelas para cada zona
Antes de crear una organización, debe crear las subredes raíz globales y dividirlas para cada zona con la subred de la API pública de gestión de direcciones IP (IPAM). Si vas a crear una organización de la versión 2 en una zona que ya tenía una organización de la versión 1, consulta la página de requisitos adicionales antes de crear tus subredes globales.
Las subredes raíz globales alojan el conjunto de direcciones IP raíz (CIDR) que se divide en cada zona para inicializar todos los clústeres de la organización de inquilinos, incluidos el clúster de infraestructura de la organización y las máquinas virtuales de carga de trabajo. También se pone a disposición de las subredes raíz una pequeña parte del intervalo de direcciones IP como grupo de direcciones IP de difusión general. Puedes asignar automáticamente CIDRs dedicados a cada zona mediante un controlador o puedes proporcionar CIDRs a cada zona manualmente.
Para iniciar una organización, necesitas el intervalo de direcciones IP internas que se indica en el cuestionario de entrada de la organización (OIQ). Debes usar esos intervalos de direcciones IP para crear la subred raíz global en el servidor de la API global.
Debes crear subredes raíz diferentes para cada servidor de API global. La asignación del campo OIQ, el nombre de la subred raíz global y el servidor de la API global se proporciona en la siguiente sección.
1.3.1. Definir el intervalo CIDR de OIQ
Los intervalos de CIDR no pueden solaparse entre sí ni con el zone-infra-cidr.
El zone-infra-cidr se encuentra en cada zona y se puede obtener del
cuestionario de información del cliente (CIQ)
si el cliente lo ha definido.
Para recuperar el zone-infra-cidr, ejecuta el siguiente comando:
kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get cidrclaim -n gpc-system zone-infra-cidr
A continuación, se muestra un ejemplo de la salida de YAML:
apiVersion: system.private.gdc.goog/v1alpha1
kind: CIDRClaim
metadata:
name: zone-infra-cidr
namespace: gpc-system
spec:
ipv4Spec:
staticCidrBlocks:
- 192.0.2.0/24
ipv6Spec:
staticCidrBlocks:
- 2001:db8::/32
status:
ipv4AllocationStatus:
cidrBlocks:
- 192.0.2.0/24
ipv6AllocationStatus:
cidrBlocks:
- 2001:db8::/32
En este ejemplo, zone-infra-cidr es 192.0.2.0/24, por lo que ningún campo de la OIQ debe solaparse con 192.0.2.0/24.
En la siguiente tabla se muestran los campos de OIQ y sus valores mínimos predeterminados correspondientes:
| Campo OIQ | Descripción | Tamaño mínimo requerido | Tamaño mínimo por zona de la organización | Nombre de la subred raíz global | Servidor de API global |
|---|---|---|---|---|---|
infraVPCCIDR |
Cargas de trabajo del sistema, como la consola de organización, las APIs de gestión y los servicios propios. | \( 15 - \lceil \log_2(ZoneNumber) \rceil \) | 16 | infra-vpc-root-cidr |
Raíz global |
defaultVPCCIDR |
Cargas de trabajo y endpoints de usuarios en la VPC predeterminada de todas las zonas. | \( 16 - \lceil \log_2(ZoneNumber) \rceil \) | 16 | default-vpc-root-cidr |
Organización mundial |
orgAdminExternalCIDR |
Cargas de trabajo y endpoints del clúster perimetral que gestionan el tráfico administrativo entre la red externa y la organización. | \( 22 - \lceil \log_2(ZoneNumber) \rceil \) | 23 | admin-external-root-cidr |
Raíz global |
orgDataExternalCIDR |
Cargas de trabajo y endpoints a los que los usuarios pueden acceder externamente, como balanceadores de carga externos y NATs de salida. | \( 22 - \lceil \log_2(ZoneNumber) \rceil \) | 23 | data-external-root-cidr |
Raíz global |
Si no tienes suficientes IPs como mínimo predeterminado sugerido, debes seguir el proceso de división manual para crear las subredes de cada zona.
Tenga en cuenta las siguientes limitaciones de los intervalos de subredes IPv4:
orgDataExternalCIDR,orgAdminExternalCIDR,infraVPCCIDRydefaultVPCCIDRno deben superponerse entre sí, con otros intervalos asignados de la organización ni con ningún intervalo IPv4 de las redes emparejadas. Los CIDRs de estos elementos proceden del espacio de direcciones privadas RFC 1918.Redes emparejadas: pueden ser subredes anunciadas con redes externas a través de adjuntos de interconexión o subredes emparejadas con otras VPCs de la misma organización.
Si las organizaciones comparten los mismos recursos de interconexión
AttachmentGroup, los valores deorgDataExternalCIDRyorgAdminExternalCIDRdeben ser únicos. De lo contrario, se permite la superposición con otras organizaciones.
1.3.2. Crear subredes globales en el servidor de la API de administrador raíz global
Antes de crear una organización, debes crear las siguientes subredes en el servidor de la API de administrador raíz global:
infra-vpc-root-cidradmin-external-root-cidrdata-external-root-cidr
Estas subredes son necesarias para iniciar la infraestructura de la organización en cada zona.
Debes tener un espacio de nombres con un nombre que coincida con el nombre de la organización que le vas a asignar. Confirma que este espacio de nombres existe:
kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG get namespaceSi este espacio de nombres no existe, créalo:
kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG create namespace ORG_NAMECrea el archivo YAML de la subred
infra-vpc-root-cidr, comoORG_NAME-infra-vpc-root-cidr.yaml:apiVersion: ipam.global.gdc.goog/v1 kind: Subnet metadata: labels: ipam.gdc.goog/vpc: infra-vpc ipam.gdc.goog/usage: network-root-range annotations: ipam.gdc.goog/pivot-destination: global-org name: infra-vpc-root-cidr namespace: ORG_NAME spec: ipv4Request: cidr: INFRA_VPC_CIDR type: RootCrea el archivo YAML de la subred
admin-external-root-cidr, comoORG_NAME-admin-external-root-cidr.yaml:apiVersion: ipam.global.gdc.goog/v1 kind: Subnet metadata: labels: ipam.gdc.goog/network-segment: admin ipam.gdc.goog/usage: network-root-range annotations: ipam.gdc.goog/pivot-destination: global-org name: admin-external-root-cidr namespace: ORG_NAME spec: ipv4Request: cidr: ORG_ADMIN_EXTERNAL_CIDR type: RootCrea el archivo YAML de la subred
data-external-root-cidr, comoORG_NAME-data-external-root-cidr.yaml:apiVersion: ipam.global.gdc.goog/v1 kind: Subnet metadata: labels: ipam.gdc.goog/network-segment: data ipam.gdc.goog/usage: network-root-range annotations: ipam.gdc.goog/pivot-destination: global-org name: data-external-root-cidr namespace: ORG_NAME spec: ipv4Request: cidr: ORG_DATA_EXTERNAL_CIDR type: RootCopia los archivos YAML de las subredes
infra-vpc-root-cidr,admin-external-root-cidrydata-external-root-cidren el repositorio de IaC de la organización raíz:cp YAML_FILE_PATH/ORG_NAME-infra-vpc-root-cidr.yaml \ IAC_REPO_PATH/iac/infrastructure/global/orgs/root/ cp YAML_FILE_PATH/ORG_NAME-admin-external-root-cidr.yaml \ IAC_REPO_PATH/iac/infrastructure/global/orgs/root/ cp YAML_FILE_PATH/ORG_NAME-data-external-root-cidr.yaml \ IAC_REPO_PATH/iac/infrastructure/global/orgs/root/Asegúrate de que el archivo
kustomization.yamlde la raíz de la organización tenga las definicionesSubnetrecién añadidas. ComprobarIAC_REPO_PATH/iac/infrastructure/global/orgs/root/kustomization.yaml:apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: global-root-kustomization resources: - ... # existing resource items - ORG_NAME-admin-external-root-cidr.yaml - ORG_NAME-data-external-root-cidr.yaml - ORG_NAME-infra-vpc-root-cidr.yamlAñade y confirma los archivos YAML de la subred:
git add "IAC_REPO_PATH/iac/infrastructure" git commitCrear solicitud de combinación:
git checkout -b ${USERNAME1}-branch git -c http.sslVerify=false push -o merge_request.create origin {USERNAME1}-branchEspera a que se revise el código y se combine.
1.3.3. Dividir las subredes raíz de las zonas
Las subredes raíz globales alojan el intervalo de direcciones IP raíz (CIDR) de todas las zonas. Para consumir el intervalo de direcciones IP de la zona, primero se deben dividir las subredes raíz globales en subredes más pequeñas que puedan consumir las zonas. Cada zona debe tener al menos un intervalo de direcciones IP raíz.
IPAM tiene un controlador global que divide automáticamente la subred raíz global en subredes más pequeñas para las zonas existentes. Los administradores pueden delegar en controladores de IPAM para dividir automáticamente la subred de la zona si no les importa el bloque CIDR exacto que utiliza una zona determinada. El controlador monitoriza la creación de la subred raíz global y crea una subred para cada zona con una longitud de prefijo predeterminada fija.
| Subred raíz de zona | Longitud de prefijo fija predeterminada |
|---|---|
defaultZoneInfraVPCSubnetSize |
16 |
defaultZoneAdminVRFSubnetSize |
23 |
defaultZoneDataVRFSubnetSize |
23 |
defaultZoneDefaultVPCSubnetSize |
16 |
defaultAnycastSubnetSize |
26 |
Las subredes raíz globales deben tener nombres fijos si quieres que los controladores de IPAM dividan automáticamente la subred de la zona:
infra-vpc-root-cidradmin-external-root-cidrdata-external-root-cidrdefault-vpc-root-cidr
Si defines la anotación ipam.gdc.goog/pause-auto-division: true para tus recursos Subnet, debes definir manualmente el bloque CIDR exacto que usa una zona determinada. Si creas las subredes raíz globales con nombres diferentes, la anotación ipam.gdc.goog/pause-auto-division no tendrá ningún efecto y las subredes globales no se dividirán automáticamente.
1.3.3.1. Dividir automáticamente las subredes raíz de las zonas
El controlador global divide automáticamente la subred raíz global en subredes más pequeñas para las zonas que ya existen. Por ejemplo, echa un vistazo al siguiente flujo de trabajo para entender cómo divide el controlador la subred raíz global en subredes más pequeñas para las zonas existentes:
Si hay dos zonas llamadas zone1 y zone2, un ejemplo de subred raíz global infra-vpc-root-cidr que usa infraVPCCIDR, como 10.0.0.0/16, del OIQ en el espacio de nombres org-1 tiene este aspecto:
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/vpc: infra-vpc
ipam.gdc.goog/usage: network-root-range
annotations:
ipam.gdc.goog/pivot-destination: global-org
name: infra-vpc-root-cidr
namespace: org-1
spec:
ipv4Request:
cidr: 10.0.0.0/14
type: Root
Cuando se implementa en la plataforma de GDC, el controlador crea automáticamente dos subredes secundarias llamadas infra-vpc-zone1-root-cidr y infra-vpc-zone2-root-cidr con la longitud de prefijo /16:
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/vpc: infra-vpc
ipam.gdc.goog/usage: zone-network-root-range
annotations:
ipam.gdc.goog/pivot-destination: global-org
name: infra-vpc-zone1-root-cidr
namespace: org-1
spec:
ipv4Request:
prefixLength: 16
zone: zone1
propagationStrategy: SingleZone
type: Branch
parentReference:
name: infra-vpc-root-cidr
namespace: org-1
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/vpc: infra-vpc
ipam.gdc.goog/usage: zone-network-root-range
annotations:
ipam.gdc.goog/pivot-destination: global-org
name: infra-vpc-zone2-root-cidr
namespace: org-1
spec:
ipv4Request:
prefixLength: 16
zone: zone2
propagationStrategy: SingleZone
type: Branch
parentReference:
name: infra-vpc-root-cidr
namespace: org-1
1.3.3.2. Dividir manualmente las subredes raíz de las zonas
En esta sección se da por hecho que has definido la anotación
ipam.gdc.goog/pause-auto-division: true cuando
has creado las subredes raíz globales en el servidor de la API de administrador raíz global.
Esta anotación pausa el controlador para reconciliar esas subredes raíz globales, lo que te permite crear manualmente la subred raíz y la subred de difusión Anycast de una zona.
Para dividir manualmente la subred raíz global en subredes más pequeñas para las zonas, haz lo siguiente:
Lista las zonas de tu universo:
kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG get zone -AConfirma el CIDR dedicado de la subred raíz que quieras aplicar a tu zona. Hazlo con cada zona de tu universo.
Asigna el CIDR dedicado a la subred de tu zona en un archivo YAML, como
ORG_NAME-infra-vpc-zone1-root-cidr.yaml:apiVersion: ipam.global.gdc.goog/v1 kind: Subnet metadata: labels: ipam.gdc.goog/vpc: infra-vpc ipam.gdc.goog/usage: zone-network-root-range annotations: ipam.gdc.goog/pivot-destination: global-org name: infra-vpc-zone1-root-cidr namespace: ORG_NAME spec: ipv4Request: cidr: ZONAL_CIDR zone: ZONE_NAME propagationStrategy: SingleZone type: Branch parentReference: name: infra-vpc-root-cidr namespace: ORG_NAMERepite este paso con cada zona de tu universo de GDC.
Confirma el CIDR dedicado de la subred raíz que quieras aplicar a la subred Anycast.
Asigna el CIDR dedicado a la subred de difusión simultánea en un archivo YAML, como
ORG_NAME-infra-vpc-anycast-cidr.yaml:apiVersion: ipam.global.gdc.goog/v1 kind: Subnet metadata: labels: ipam.gdc.goog/vpc: infra-vpc annotations: ipam.gdc.goog/pivot-destination: global-org name: infra-vpc-anycast-cidr namespace: ORG_NAME spec: ipv4Request: cidr: ANYCAST_CIDR propagationStrategy: None type: Branch parentReference: name: infra-vpc-root-cidr namespace: ORG_NAMECopia los archivos YAML de la subred zonal en el repositorio de IaC de la organización raíz. Por ejemplo, si tienes dos archivos YAML de subredes zonales:
cp YAML_FILE_PATH/ORG_NAME-infra-vpc-zone1-root-cidr.yaml \ IAC_REPO_PATH/iac/infrastructure/global/orgs/root/ cp YAML_FILE_PATH/ORG_NAME-infra-vpc-zone2-root-cidr.yaml \ IAC_REPO_PATH/iac/infrastructure/global/orgs/root/ cp YAML_FILE_PATH/ORG_NAME-infra-vpc-anycast-cidr.yaml \ IAC_REPO_PATH/iac/infrastructure/global/orgs/root/Asegúrate de que el archivo
kustomization.yamlde la raíz de la organización tenga las definicionesSubnetrecién añadidas. ComprobarIAC_REPO_PATH/iac/infrastructure/global/orgs/root/kustomization.yaml:apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: global-root-kustomization resources: - ... # existing resource items - ORG_NAME-infra-vpc-zone1-root-cidr.yaml - ORG_NAME-infra-vpc-zone2-root-cidr.yaml - ORG_NAME-infra-vpc-anycast-cidr.yamlAñade y confirma los archivos YAML de la subred:
git add "IAC_REPO_PATH/iac/infrastructure" git commitCrea la solicitud de combinación:
git checkout -b ${USERNAME1}-branch git -c http.sslVerify=false push -o merge_request.create origin {USERNAME1}-branchEspera a que se revise el código y se combine.
1.3.3.2.1. Ejemplo de división manual de subredes raíz de zonas para infra-vpc
Si hay dos zonas llamadas zone1 y zone2, una subred raíz global de ejemplo infra-vpc-root-cidr que use infraVPCCIDR, como 192.0.2.0/24, del OIQ en el espacio de nombres org-1 tiene este aspecto:
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/vpc: infra-vpc
ipam.gdc.goog/usage: network-root-range
annotations:
ipam.gdc.goog/pivot-destination: global-org
ipam.gdc.goog/pause-auto-division: "true"
name: infra-vpc-root-cidr
namespace: org-1
spec:
ipv4Request:
cidr: 192.0.2.0/24
type: Root
Crea manualmente la subred de cada zona llamada infra-vpc-zone1-root-cidr y infra-vpc-zone2-root-cidr, así como la subred de anycast infra-vpc-anycast-cidr con el CIDR dedicado que decidas:
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/vpc: infra-vpc
ipam.gdc.goog/usage: zone-network-root-range
annotations:
ipam.gdc.goog/pivot-destination: global-org
name: infra-vpc-zone1-root-cidr
namespace: org-1
spec:
ipv4Request:
cidr: 192.0.2.0/26
zone: zone1
propagationStrategy: SingleZone
type: Branch
parentReference:
name: infra-vpc-root-cidr
namespace: org-1
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/vpc: infra-vpc
ipam.gdc.goog/usage: zone-network-root-range
annotations:
ipam.gdc.goog/pivot-destination: global-org
name: infra-vpc-zone2-root-cidr
namespace: org-1
spec:
ipv4Request:
cidr: 192.0.2.64/26
zone: zone2
propagationStrategy: SingleZone
type: Branch
parentReference:
name: infra-vpc-root-cidr
namespace: org-1
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/vpc: infra-vpc
annotations:
ipam.gdc.goog/pivot-destination: global-org
name: infra-vpc-anycast-cidr
namespace: org-1
spec:
ipv4Request:
cidr: 192.0.2.128/26
propagationStrategy: None
type: Branch
parentReference:
name: infra-vpc-root-cidr
namespace: org-1
Asegúrate de añadir todos los archivos YAML de subred al repositorio de IaC.
1.3.3.2.2. Ejemplo de división manual de subredes raíz de zonas para un segmento de red de datos
Si hay dos zonas llamadas zone1 y zone2, una subred raíz global de ejemplo data-external-root-cidr que use orgDataExternalCIDR, como 10.0.0.0/24, del OIQ en el espacio de nombres org-1 tiene este aspecto:
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/network-segment: data
ipam.gdc.goog/usage: network-root-range
annotations:
ipam.gdc.goog/pivot-destination: global-org
ipam.gdc.goog/pause-auto-division: "true"
name: data-external-root-cidr
namespace: org-1
spec:
ipv4Request:
cidr: 10.0.0.0/24
type: Root
Crea manualmente la subred de cada zona llamada data-external-zone1-root-cidr y data-external-zone2-root-cidr, así como la subred de anycast data-global-anycast-cidr con el CIDR dedicado que decidas:
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/network-segment: data
ipam.gdc.goog/usage: zone-network-root-range
annotations:
ipam.gdc.goog/pivot-destination: global-org
name: data-external-zone1-root-cidr
namespace: org-1
spec:
ipv4Request:
cidr: 10.0.0.0/26
zone: zone1
propagationStrategy: SingleZone
type: Branch
parentReference:
name: data-external-root-cidr
namespace: org-1
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/network-segment: data
ipam.gdc.goog/usage: zone-network-root-range
annotations:
ipam.gdc.goog/pivot-destination: global-org
name: data-external-zone2-root-cidr
namespace: org-1
spec:
ipv4Request:
cidr: 10.0.0.64/26
zone: zone2
propagationStrategy: SingleZone
type: Branch
parentReference:
name: data-external-root-cidr
namespace: org-1
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/network-segment: data
annotations:
ipam.gdc.goog/pivot-destination: global-org
name: data-global-anycast-cidr
namespace: org-1
spec:
ipv4Request:
cidr: 10.0.0.128/26
propagationStrategy: None
type: Branch
parentReference:
name: data-external-root-cidr
namespace: org-1
Asegúrate de añadir todos los archivos YAML de subred al repositorio de IaC.
1.3.3.2.3. Ejemplo de división manual de subredes raíz de zonas para un segmento de red de administrador
Si hay dos zonas llamadas zone1 y zone2, una subred raíz global de ejemplo admin-external-root-cidr que usa el orgAdminExternalCIDR, como 192.168.1.0/24, del OIQ en el espacio de nombres org-1 tiene este aspecto:
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/network-segment: admin
ipam.gdc.goog/usage: network-root-range
annotations:
ipam.gdc.goog/pivot-destination: global-org
ipam.gdc.goog/pause-auto-division: "true"
name: admin-external-root-cidr
namespace: org-1
spec:
ipv4Request:
cidr: 192.168.1.0/24
type: Root
Crea manualmente la subred de cada zona llamada admin-external-zone1-root-cidr y admin-external-zone2-root-cidr, así como la subred de Anycast admin-global-anycast-cidr con el CIDR dedicado que decidas:
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/network-segment: admin
ipam.gdc.goog/usage: zone-network-root-range
annotations:
ipam.gdc.goog/pivot-destination: global-org
name: admin-external-zone1-root-cidr
namespace: org-1
spec:
ipv4Request:
cidr: 192.168.1.0/26
zone: zone1
propagationStrategy: SingleZone
type: Branch
parentReference:
name: admin-external-root-cidr
namespace: org-1
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/network-segment: admin
ipam.gdc.goog/usage: zone-network-root-range
annotations:
ipam.gdc.goog/pivot-destination: global-org
name: admin-external-zone2-root-cidr
namespace: org-1
spec:
ipv4Request:
cidr: 192.168.1.64/26
zone: zone2
propagationStrategy: SingleZone
type: Branch
parentReference:
name: admin-external-root-cidr
namespace: org-1
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/network-segment: data
annotations:
ipam.gdc.goog/pivot-destination: global-org
name: admin-global-anycast-cidr
namespace: org-1
spec:
ipv4Request:
cidr: 192.168.1.128/26
propagationStrategy: None
type: Branch
parentReference:
name: admin-external-root-cidr
namespace: org-1
Asegúrate de añadir todos los archivos YAML de subred al repositorio de IaC.
1.4. Crear una organización con IAC
Para crear una organización con IAC, siga estos pasos:
Genera una lista de los servidores y tipos de servidores disponibles:
kubectl get servers -n gpc-system -o jsonpath='{range .items[?(@.status.bareMetalHostStatus.provisionState=="available")]}{.metadata.name}{"\t"}{.spec.serverHardware.machineClassName}{"\t"}{.status.bareMetalHostStatus.provisionState}{"\n"}{end}'La salida de ejemplo es similar a la siguiente:
ag-aa-bm04 o1-standard1-64-gdc-metal available ag-ab-bm07 o1-standard1-64-gdc-metal available ag-ab-bm11 o1-highmem1-96-gdc-metal available ag-ab-bm12 o1-highmem1-96-gdc-metal available ag-ab-bm13 o1-highmem1-96-gdc-metal available ag-ab-bm14 o1-highgpu1-48-gdc-metal available ag-ab-bm15 o1-highgpu1-48-gdc-metal available ag-ab-bm16 o1-highgpu1-48-gdc-metal availableCuando especifiques
--server-quotay--admin-servermás adelante, asegúrate de tener suficientes servidoresavailablepara completar la solicitud.Ve al repositorio
iacy añade la estructura de directorios de la nueva organización:mkdir -p infrastructure/global/orgs/root/ORG_NAME/Crea un recurso personalizado
Organization:gdcloud organizations config create --name ORG_NAME \ --log-retention-policy LOG_RETENTION_POLICY \ --kms-root-key-type KMS_ROOT_KEY_TYPEPor ejemplo:
gdcloud organizations config create --name org-1 \ --log-retention-policy paAuditLogsRetentionTime=400,ioAuditLogsRetentionTime=2000,operationalLogsRetentionTime=90,metricsRetentionTime=90 \ --kms-root-key-type ctm-rootSustituye las siguientes variables:
Variable Definición ORG_NAMEEl nombre de la organización. El nombre de una organización debe cumplir los siguientes criterios:
- Tener entre 3 y 19 letras ASCII minúsculas, dígitos o guiones.
- y debe empezar por una letra.
- No deben terminar con guiones.
- No debe terminar con la cadena
-system.
LOG_RETENTION_POLICYConfiguración de los tiempos de conservación de los registros de auditoría, los registros operativos y las métricas en días. KMS_ROOT_KEY_TYPEEsta configuración contiene el tipo de clave raíz elegido para el KMS de una organización. Cada servicio de KMS tiene una clave raíz para cifrar las claves generadas por el KMS. De forma predeterminada, el KMS genera una clave raíz de CTM, una clave raíz almacenada en Thales CipherTrust Manager con una copia de seguridad en un HSM físico. También puedes elegir una clave raíz de software almacenada como secreto de Kubernetes. Transfiere ctm-rootolocal-rootparakmsRootKeyType.Un ejemplo del archivo YAML de
Organizationrecurso personalizado generado es similar al siguiente:apiVersion: resourcemanager.global.private.gdc.goog/v1alpha1 kind: Organization metadata: namespace: gpc-system name: org-1 spec: type: Tenant logRetentionPolicy: paAuditLogsRetentionTime: 400 ioAuditLogsRetentionTime: 2000 operationalLogsRetentionTime: 90 metricsRetentionTime: 90 securityConfig: kmsRootKeyType: "ctm-root"Opcional: En la versión 1.14.2 y posteriores, el cifrado IPsec de nodo a nodo está inhabilitado de forma predeterminada. Si se requiere este cifrado IPsec, puedes habilitar el cifrado IPsec de nodo a nodo editando el archivo YAML de recursos personalizados
Organizationy añadiendo una anotación:metadata: annotations: n2n.security.private.gdc.goog/node-to-node-encryption-disabled: "false"Si se asigna el valor
"false"a esta anotación, se habilita el cifrado.Crea un
OrganizationZonalConfigrecurso personalizado para cada zona de la implementación:gdcloud organizations zonal-configs create --name ORG_NAME \ --zones=ZONES \ --version GDC_VERSION \ --server-quota SERVER_QUOTA \ --storage-sku STORAGE_SIZE \ --admin-server ADMIN_SERVERPor ejemplo:
.gdcloud organizations zonal-configs create --name org-1 \ --zones=us-central1-a,us-central1-b \ --version 1.9.2-gdch.153 \ --server-quota o1-highmem1-40-gdc-metal=1,o1-standard1-64-gdc-metal=2,o1-highmem1-96-gdc-metal=3,o1-highmem1-104-gdc-metal=4,o1-highmem1-448-gdc-metal=5,o1-highgpu1-48-gdc-metal=6 \ --storage-sku block-standard=100Ti,file-standard=100Ti,object-standard=100Ti \ --admin-server o1-standard1-64-gdc-metal=3Sustituye las siguientes variables:
Variable Definición ORG_NAMEEl nombre de la organización. El nombre de una organización debe cumplir los siguientes criterios:
- Tener entre 3 y 30 letras ASCII minúsculas, dígitos o guiones.
- y debe empezar por una letra.
- No deben terminar con guiones.
- No debe terminar con la cadena
-system.
ZONESLos nombres de las zonas de la implementación. GDC_VERSIONVersión del sistema de GDC para la que se creará la organización. SERVER_QUOTALos servidores que se asignarán al clúster de administrador de la organización y al clúster del sistema cuando se generen automáticamente. Si tienes previsto ejecutar recursos de unidades de procesamiento gráfico (GPU) que sean cargas de trabajo basadas en máquinas virtuales, como APIs de inteligencia artificial y aprendizaje automático (IA/AA) preentrenadas, debes aprovisionar máquinas con GPU al crear una organización. Para obtener más información, consulta la sección Habilitar la compatibilidad con GPU para clústeres del sistema. ADMIN_SERVERUn par clave-valor del tipo de servidor y la cantidad de servidores de administrador de la organización que se deben asignar a ese tipo de servidor. No se admiten tipos mixtos en los servidores. El valor predeterminado es o1-standard1-64-gdc-metal: 3.STORAGE_SIZEEl tamaño de los distintos tipos de almacenamiento que se asignarán a la organización. El tamaño mínimo de almacenamiento en bloque de una organización es de 250 Gi, que se define con la marca BlockStandard.Un ejemplo del archivo YAML de
OrganizationZonalConfigrecurso personalizado generado es similar al siguiente:apiVersion: resourcemanager.global.private.gdc.goog/v1alpha1 kind: OrganizationZonalConfig metadata: namespace: gpc-system name: org-1-zone1-config spec: organizationRef: name: org-1 zone: zone1 version: 1.5.0-gdch.11 capacities: storage: block-standard: 10Ti file-standard: 10Ti object-nearline: 10Ti object-standard: 10Ti workloadServers: o1-highmem1-40-gdc-metal: 1Revisa los archivos YAML generados. Los archivos se encuentran en el directorio
HOME.Confirma el tipo de organización. Puedes aprovisionar dos tipos de organizaciones:
- Arquitectura de la organización v1 (organización v1)
- Arquitectura de la organización v2 (organización v2)
De forma predeterminada, las nuevas organizaciones se aprovisionan en función del tipo de implementación que hayas definido en los ajustes de la función de acceso:
- Las implementaciones de
PRODUCTIONgeneran organizaciones de la versión 2 de forma predeterminada. - Las implementaciones de
ACCREDITEDgeneran organizaciones de la versión 1 de forma predeterminada.
En el caso excepcional de que tengas que anular el tipo de organización predeterminado de tu tipo de implementación, actualiza el campo
spec.compatibilityOptions.architectureOverridePolicyde tu recurso personalizadoOrganizationgenerado aForceV1oForceV2, en función del tipo de organización que quieras usar. Por ejemplo, el siguiente fragmento de código fuerza la creación de una organización de la versión 2 en una implementación deACCREDITED:... spec: ... compatibilityOptions: architectureOverridePolicy: ForceV2 ...Confirma los ajustes restantes para asegurarte de que los componentes, como el almacenamiento y la potencia de cálculo, son suficientes para las necesidades de tu empresa.
Copia los recursos personalizados
OrganizationyOrganizationZonalConfigen el repositorio del directorio de la nueva organización:cp YAML_FILE_PATH/ORG_NAME.yaml IAC_REPO_PATH/iac/infrastructure/global/orgs/root/ORG_NAME/cp YAML_FILE_PATH/ORG_NAME-ZONE.yaml IAC_REPO_PATH/iac/infrastructure/global/orgs/root/ORG_NAME/Haz los cambios siguientes:
ORG_NAME: el nombre de la organización que has definido en el comandogdcloud organizations config createcon el parámetro--name.ZONE: el nombre de cada zona de la implementación. El nombre de la zona se deriva con el siguiente formato:{generalRegion}-{regionQualifier}{regionCounter}-{zoneLetter}. Por ejemplo,us-central1-b. Consulta la sección de zona del cuestionario de incorporación de clientes para ver las descripciones de los valores del atributo de zona.
Añade el archivo
kustomization.yamlde la nueva organización:cat > IAC_REPO_PATH/iac/infrastructure/global/orgs/root/ORG_NAME/kustomization.yaml << EOF apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: ORG_NAME-kustomization resources: - ORG_NAME.yaml - ORG_NAME-ZONE.yaml EOFAñade la nueva organización como recurso de la organización raíz:
Abre el archivo raíz global
kustomization.yaml:vim /iac/infrastructure/global/orgs/root/kustomization.yamlAñade el nuevo
Organizationcomo recurso al final de la lista de recursos:apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: global-root-kustomization resources: - ... # existing resource items - ORG_NAME
Añade y confirma el archivo YAML de la organización y los archivos de Kustomize:
git add "IAC_REPO_PATH/iac/infrastructure" git commitCrear solicitud de combinación:
git checkout -b ${USERNAME1}-branch git -c http.sslVerify=false push -o merge_request.create origin {USERNAME1}-branchEspera a que se revise el código y se combine.
Verifica que estén disponibles las configuraciones globales de la organización y de la zona:
Verifica que la organización global esté disponible en tu universo de GDC:
kubectl get organization -AEl resultado debería ser similar al siguiente:
NAMESPACE NAME AGE gpc-system org 34s gpc-system root 14hComprueba el estado de la organización global:
kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG \ get organization/ORG_NAME -n gpc-system -o yamlAsegúrate de que las condiciones
statusde la salida de YAML seanTrue.Comprueba el estado de la configuración de la organización en cada zona:
kubeconfig --kubeconfig ROOT_ADMIN_KUBECONFIG \ get organization/ORG_NAME -n gpc-system -o yamlPara cambiar de contexto zonal, usa la CLI de gdcloud para iniciar sesión en cada zona antes de comprobar el estado de la organización. Asegúrate de que las condiciones
statusde la salida de YAML de cada zona seanTrue.
1.5. Crear subredes globales en el servidor de la API de la organización global
Debes crear el default-vpc-root-cidr en el servidor de la API global de la organización dentro del espacio de nombres platform después de que se ejecute el servidor de la API global.
Esta subred raíz asigna la dirección IP de los clústeres de la organización del arrendatario, como los clústeres de usuarios, así como las direcciones IP de las cargas de trabajo de las máquinas virtuales.
Crea el archivo YAML de la subred
default-vpc-root-cidr, comodefault-vpc-root-cidr.yaml:apiVersion: ipam.global.gdc.goog/v1 kind: Subnet metadata: labels: ipam.gdc.goog/allocation-preference: default ipam.gdc.goog/vpc: default-vpc ipam.gdc.goog/usage: network-root-range name: default-vpc-root-cidr # don't change the name if you want IPAM controller to automatically divide the zone's subnet. namespace: platform spec: type: Root ipv4Request: cidr: DEFAULT_VPC_CIDRVe al repositorio
iacy añade la estructura de directorios de la organización global:cd iac; mkdir -p infrastructure/global/orgs/ORG_NAME/Copia el archivo YAML de la subred
default-vpc-root-cidren el repositorio de IaC del directorio de la nueva organización:cp YAML_FILE_PATH/default-vpc-root-cidr.yaml \ IAC_REPO_PATH/iac/infrastructure/global/orgs/ORG_NAME/Crea el archivo
kustomization.yamlen la carpeta de la organización con las definiciones deSubnetque acabas de añadir. ComprobarIAC_REPO_PATH /iac/infrastructure/global/orgs/ORG_NAME/kustomization.yaml:cat > infrastructure/global/orgs/ORG_NAME/kustomization.yaml << EOF apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: ORG_NAME-kustomization resources: - default-vpc-root-cidr.yaml EOFAñade y confirma el archivo YAML de la organización y los archivos de Kustomize:
git add "IAC_REPO_PATH/iac/infrastructure" git commitCrea la solicitud de combinación:
git checkout -b ${USERNAME1}-branch git -c http.sslVerify=false push -o merge_request.create origin {USERNAME1}-branchEspera a que se revise el código y se combine.
Al igual que las subredes globales del clúster de administrador raíz global, el default-vpc-root-cidr también se divide y se propaga a cada zona para que la organización zonal consuma direcciones IP.
1.7. Configurar NTPRelay de administrador de organización
Debes configurar manualmente la autenticación entre los NTPRelays de administrador raíz y de administrador de organización.
Sigue el procedimiento NTP-P0001.3 (Administrador raíz -> Administrador de organización -> Cifrado de NTPRelay) para configurar el cifrado de esta organización.
1.8. Conectar el proveedor de identidades de IO a la organización con IAC
Consulta la guía de ADFS para crear un cliente de OIDC en ADFS para la nueva organización y anota el ID de cliente y el secreto de cliente del cliente de OIDC.
Define el nombre de tu organización como una variable de entorno:
export ORG_NAME=ORG_NAMEVerifica que el
ORG_NAMEcoincida exactamente con el nombre de la organización.Exporta el archivo kubeconfig del clúster de administrador raíz y ejecuta los siguientes comandos
kubectlpara obtener los nombres del clúster y de la zona:export KUBECONFIG=ROOT_ADMIN_KUBECONFIG kubectl get clusters -A kubectl get zones -n mz-systemAñade el archivo
ioauthmethod.yamlde la organización:cat > infrastructure/global/orgs/${ORG_NAME}/ioauthmethod.yaml << EOF apiVersion: iam.global.private.gdc.goog/v1alpha1 kind: IOAuthMethod metadata: name: io-idp-authmethod namespace: gpc-system oidc: certificateAuthorityData: ADFS_CERT_BASE64 clientID: ADFS_ORG_CLIENT_ID clientSecret: ADFS_ORG_CLIENT_SECRET groupPrefix: gdch-infra-operator- groupsClaim: groups issuerURI: ADFS_ISSUER_URI scopes: openid email offline_access userClaim: email userPrefix: gdch-infra-operator- cloudConsoleRedirectURI: http://cloud.console.not.enabled kubectlRedirectURI: http://localhost:9879/callback EOFSustituye las siguientes variables:
Variable Definición ADFS_CERT_BASE64La codificación base64 del certificado que usa ADFS para autofirmarse, que requiere el servicio de identidad de GKE para establecer una conexión segura con una instancia interna de ADFS. ADFS_ORG_CLIENT_IDEl ID de OpenID Connect del cliente de la organización en ADFS. ADFS_ORG_CLIENT_SECRETEl secreto de OpenID Connect del cliente de la organización registrado en ADFS. ADFS_ISSUER_URIUn URI de emisor válido, que es necesario para que Identity Service for GKE permita solicitudes de inicio de sesión de redirección a ADFS. Añade el archivo
initial-admin.yamlde la organización:cat > infrastructure/global/orgs/${ORG_NAME}/initial-admin.yaml << EOF apiVersion: iam.private.gdc.goog/v1alpha1 kind: ExpirationClusterRoleBinding metadata: name: iac-binding-USER-org-iam-admin spec: expirationTimestamp: EXPIRATION roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: organization-iam-admin subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: gdch-infra-operator-USER@opscenter.local EOFSustituye las siguientes variables:
Variable Definición USEREl nombre de usuario con el prefijo de la IO para iniciar sesión en el clúster inicialmente. Recuerda añadir el prefijo al nombre de usuario. EXPIRATIONMarca de tiempo con formato RFC 3339 en la que el sistema revoca el acceso. Por ejemplo, "2020-11-14T00:20:12+00:00".Añade los archivos recién creados al archivo
kustomization.yamlenIAC_REPO_PATH /iac/infrastructure/global/orgs/ORG_NAME/kustomization.yaml:apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: ORG_NAME-kustomization resources: - ... # existing resource items - ioauthmethod.yaml - initial-admin.yamlAñade y confirma el archivo YAML de la organización y los archivos de Kustomize:
git add "infrastructure/global" git add "infrastructure/zonal" git commitEnvía la actualización a GitLab:
git -c http.sslVerify=false pushEspera a que se revise el código y se combine.
Para confirmar que el operador puede acceder a la organización, inicia sesión en la organización generada y ejecuta el siguiente comando para verificar que existe un proveedor de identidades (IdP) en el
ClientConfigde la organización:Define el archivo kubeconfig de tu clúster de administrador en función de la arquitectura de tu organización:
En una organización de la versión 1, ejecuta el siguiente comando:
export KUBECONFIG=ORG_ADMIN_CLUSTER_KUBECONFIGSustituye ORG_ADMIN_CLUSTER_KUBECONFIG por la ruta al archivo kubeconfig del clúster de administrador de la organización, como
/tmp/${ORG}-admin-kubeconfig.En una organización de la versión 2, ejecuta el siguiente comando:
export KUBECONFIG=ORG_INFRA_CLUSTER_KUBECONFIGSustituye ORG_INFRA_CLUSTER_KUBECONFIG por la ruta de acceso al archivo kubeconfig del clúster de infraestructura de la organización, como
/tmp/${ORG}-infra-kubeconfig.
Comprueba que haya un IdP en el
ClientConfigde la organización:kubectl get ClientConfig default -n kube-public -o yaml
En la versión 1.14.3, debe aplicar manualmente el rol
global-zone-viewerpara permitir que todos los usuarios autenticados vean las zonas de un universo mediante la CLI de gdcloud. Aplica los recursos de rol y vinculación de rol:kubectl --kubeconfig ORG_GLOBAL_API_SERVER_KUBECONFIG apply -f - <<EOF apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: global-zone-viewer namespace: mz-system rules: - apiGroups: - location.mz.global.private.gdc.goog resources: - zones verbs: - get - list --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: global-zone-viewer-binding namespace: mz-system roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: global-zone-viewer subjects: - apiGroup: rbac.authorization.k8s.io kind: Group name: system:authenticated EOFSustituye
ORG_GLOBAL_API_SERVER_KUBECONFIGpor el archivo kubeconfig del servidor de la API global de la organización. Para obtener más información, consulta Generar manualmente el archivo kubeconfig.
1.9. Conectar el proveedor de identidades del cliente con la organización
Para conectar un proveedor de identidades de cliente a la organización e iniciar sesión en la organización con sus identidades, sigue estos pasos:
Inicia sesión desde la CLI con la cuenta de administrador de IO inicial configurada durante la creación de la organización, que se vincula automáticamente a
org-iam-adminen el clúster de administrador de la organización.Pide al cliente que añada la siguiente URL de retrollamada global de AIS a la lista de permitidas en el cliente de OIDC o SAML que haya creado para la organización que vas a crear:
https://ais-core.ORG_NAME.GDC_URL/finish-loginPor ejemplo, si la URL raíz de GDC es
.google.gdch.testy el nombre de la organización esoperations, la URL de retrollamada de AIS global eshttps://ais-core.operations.google.gdch.test/finish-login.Si usas un cliente SAML, también debes añadir la siguiente URL de retrollamada global de AIS SAML a la lista de permitidos:
https://ais-core.ORG_NAME.GDC_URL/saml-callbackPide al cliente que añada la siguiente URL de retrollamada de AIS a la lista de permitidas en el cliente de OIDC o SAML que haya creado para cada zona. Por ejemplo, en un universo de tres zonas, las URLs de retrollamada de AIS zonales son similares a las siguientes:
https://ais-core.ORG_NAME.ZONE_1.GDC_URL/finish-login https://ais-core.ORG_NAME.ZONE_2.GDC_URL/finish-login https://ais-core.ORG_NAME.ZONE_3.GDC_URL/finish-loginSi la URL raíz de GDC es
.google.gdch.test, el nombre de la zona eszone-1y el nombre de la organización esoperations, la URL de retrollamada de AIS eshttps://ais-core.operations.zone-1.google.gdch.test/finish-login.Si usas un cliente SAML, también debes añadir las siguientes URLs de retrollamada de SAML de AIS a la lista de permitidos de cada zona:
https://ais-core.ORG_NAME.ZONE_1.GDC_URL/saml-callback https://ais-core.ORG_NAME.ZONE_2.GDC_URL/saml-callback https://ais-core.ORG_NAME.ZONE_3.GDC_URL/saml-callbackDefine el archivo kubeconfig de tu clúster de administrador en función de la arquitectura de tu organización. Si ya has definido la variable kubeconfig, sáltate este paso.
En una organización de la versión 1, ejecuta el siguiente comando:
export KUBECONFIG=ORG_ADMIN_CLUSTER_KUBECONFIGSustituye ORG_ADMIN_CLUSTER_KUBECONFIG por la ruta al archivo kubeconfig del clúster del administrador de la organización, como
/tmp/${ORG}-admin-kubeconfig.En una organización de la versión 2, ejecuta el siguiente comando:
export KUBECONFIG=MANAGEMENT_API_SERVER_KUBECONFIGSustituye MANAGEMENT_API_SERVER_KUBECONFIG por la ruta al archivo kubeconfig del servidor de la API Management, como
/tmp/${ORG}-management-kubeconfig.
En la incidencia de solicitud del cliente para una nueva organización, decide si el proveedor de identidades usa OIDC o SAML. Sigue la guía correspondiente al tipo de IdP:
Configuración con OIDC
Crea un archivo
identity-provider-config.yamly rellénalo consultando los valores del IdP de la cuenta de la PA en las incidencias de creación de la organización:cat << EOF > identity-provider-config.yaml apiVersion: iam.global.gdc.goog/v1 kind: IdentityProviderConfig metadata: name: pa-idp-oidc namespace: platform spec: oidc: certificateAuthorityData: "PA_IDP_BASE64_ENCODED_CERTIFICATE" clientID: PA_IDP_CLIENT_ID clientSecret: PA_IDP_CLIENT_SECRET groupPrefix: PA_IDP_GROUP_CLAIM groupsClaim: PA_IDP_PREFIX issuerURI: PA_IDP_ISSUER_URI scopes: openid email profile userClaim: PA_IDP_USER_CLAIM userPrefix: PA_IDP_PREFIX EOFA continuación, se describen los campos en detalle:
Atributo Tipo de atributo Descripción certificateAuthorityDataObligatorio Un certificado de autoridad de certificación estándar codificado en Base64 y con formato PEM para el proveedor de OIDC. clientIDObligatorio ID de la aplicación cliente que envía solicitudes de autenticación al proveedor de OpenID. clientSecretObligatorio Secreto compartido entre la aplicación cliente de OIDC y el proveedor de OIDC. extraParamsOpcional Lista separada por comas de pares clave-valor que se codifican como consulta y se envían con la solicitud del endpoint de autenticación. groupPrefixOpcional El prefijo que se debe añadir al principio de la reclamación de grupos para evitar conflictos con los grupos ya existentes. Se suele usar al configurar varios proveedores de identidades.
Debes incluir el prefijo del grupo antes de todos los nombres de grupo. Por ejemplo, si tienesmyprefix-como prefijo de grupo y un grupo llamadogroupAen tu proveedor de identidades, cuando añadas una política o una vinculación, debes vincularmyprefix-groupA. El nombre del grupo se define en el campogroupsClaim.groupsClaimOpcional Nombre de la reclamación del token de ID de OIDC que contiene la información de los grupos del usuario. Este nombre debe ser el mismo que el del reivindicación que contiene información sobre la pertenencia a grupos en tu proveedor de OIDC. issuerURIObligatorio La URL a la que se envían las solicitudes de autorización a tu proveedor de OIDC. Este URI debe apuntar al nivel dentro de .well-known/openid-configuration.scopesOpcional Lista de identificadores separados por comas para especificar qué privilegios de acceso se solicitan además del ámbito openid.userClaimObligatorio Nombre de la reclamación del token de ID de OIDC que contiene el nombre de usuario. Por ejemplo, si la reclamación de usuario es email, los usuarios se identifican por el campo de usuario del token de OIDC.
Si falta en el token de ID, la autenticación falla.userPrefixOpcional Prefijo que se antepone a las reclamaciones de usuario para evitar conflictos con los nombres de usuario que ya existen. Se suele usar al configurar varios proveedores de identidades.
Por ejemplo, si la reclamación del usuario esemaily el prefijo del usuario esprefix-, los usuarios se identifican comoprefix-sally@example.com. El usuario essally@example.comy el prefijo,prefix-, se añade al usuario para distinguir entre diferentes proveedores de identidad.
Se recomienda insertar un separador al final del prefijo, tal como se ha descrito anteriormente en esta tabla para el ajustegroupPrefix.Opcional: Si tu proveedor de identidades usa atributos personalizados, primero configura los atributos en tu IdP. A continuación, añade los pares clave-valor correspondientes en la sección
oidcdel archivoidentity-provider-config.yamlpara incluir más reclamaciones sobre los usuarios o grupos, como su departamento o fecha de nacimiento. Cuando apliques los cambios en la configuración del proveedor de identidades, GKE Identity Service reconocerá los atributos personalizados. Aquí tienes un ejemplo de atributos personalizados:"attributeMapping": { "attribute.birthday": "assertion.birthday", "attribute.department": "assertion.department" }Configura la configuración del proveedor de identidades:
kubectl apply -f identity-provider-config.yamlEspera a que se vuelvan a configurar los distintos componentes del sistema.
Verifica la configuración abriendo la consola de la interfaz de usuario de administrador de la plataforma en un navegador web. Seleccione Iniciar sesión con pa-idp-oidc en la página de redirección. Si se te redirige a la instancia del proveedor de identidades de la cuenta de administrador de la plataforma y, después de iniciar sesión con la instancia del proveedor de identidades de la cuenta de administrador de la plataforma, se te redirige a la página de la consola de la interfaz de usuario del administrador de la plataforma, la configuración se habrá realizado correctamente. De lo contrario, comprueba los valores de
identity-provider-config.yamly vuelve a aplicar el paso anterior.
Configuración con SAML
Crea un archivo
identity-provider-config.yamly rellénalo consultando los tickets de creación de la organización para obtener los valores del IdP de la cuenta del administrador principal:cat << EOF > identity-provider-config.yaml apiVersion: iam.global.gdc.goog/v1 kind: IdentityProviderConfig metadata: name: pa-idp-saml namespace: platform spec: saml: idpEntityID: PA_IDP_ISSUER_URI idpSingleSignOnURI: PA_IDP_SSO_URI groupPrefix: PA_IDP_PREFIX groupsAttribute: PA_IDP_GROUPS_ATTRIBUTE idpCertificateDataList: [PA_IDP_SAML_CERT] userAttribute: PA_IDP_USER_ATTRIBUTE userPrefix: PA_IDP_PREFIX EOFA continuación, se describen los campos en detalle:
.Atributo Tipo de atributo Descripción idpCertificateDataListObligatorio Los certificados del proveedor de identidades que se usan para verificar la respuesta SAML. Estos certificados deben estar codificados en Base64 estándar y en formato PEM. Solo se admiten dos certificados como máximo para facilitar la rotación de certificados del IdP. idpEntityIDObligatorio El ID de entidad SAML del proveedor de SAML, especificado en formato URI. Por ejemplo, https://www.idp.com/saml. idpSingleSignOnURIObligatorio El URI del endpoint de SSO del proveedor de SAML. Por ejemplo, `https://www.idp.com/saml/sso`. groupPrefixOpcional Prefijo opcional que se antepondrá a cada nombre de grupo. userPrefixOpcional Prefijo opcional que se antepone al nombre de usuario. userAttributeOpcional Nombre del atributo de la respuesta SAML que contiene el nombre de usuario. Si falta este atributo en la respuesta SAML, la autenticación falla. groupsAttributeOpcional Nombre del atributo de la respuesta SAML que contiene los grupos del usuario. Opcional: Si tu proveedor de identidades usa atributos personalizados, primero configura los atributos en tu IdP. A continuación, añade los pares clave-valor correspondientes en la sección
samldel archivoidentity-provider-config.yamlpara incluir más reclamaciones sobre los usuarios o grupos, como su departamento o fecha de nacimiento. Cuando apliques los cambios en la configuración del proveedor de identidades, GKE Identity Service reconocerá los atributos personalizados. Aquí tienes un ejemplo de atributos personalizados:"attributeMapping": { "attribute.birthday": "assertion.birthday", "attribute.department": "assertion.department" }Configura el parche de configuración del proveedor de identidades:
kubectl apply -f identity-provider-config.yamlEspera a que se vuelvan a configurar los distintos componentes del sistema.
Verifica la configuración abriendo la consola de la interfaz de usuario de administrador de la plataforma en un navegador web. Seleccione Iniciar sesión con pa-idp-oidc en la página de redirección. Si se te redirige a la instancia del proveedor de identidades de la cuenta de administrador de la plataforma y, después de iniciar sesión con la instancia del proveedor de identidades de la cuenta de administrador de la plataforma, se te redirige a la página de la consola de la interfaz de usuario del administrador de la plataforma, la configuración se habrá realizado correctamente. De lo contrario, comprueba los valores de
identity-provider-config.yamly vuelve a aplicar el paso anterior.
Prefijo de usuario y grupo
Los prefijos de usuarios y grupos deben definirse para cada IdP de Distributed Cloud para evitar conflictos de nombres entre cuentas de diferentes IdPs. El prefijo se usa con el nombre de usuario y de grupo para concatenar el nombre del asunto en las vinculaciones de roles del clúster. Por ejemplo, si el nombre de un usuario es jack@example.com y el prefijo de usuario del proveedor de identidades es example-org-idp-, el nombre de asunto del usuario en el clúster sería example-org-idp-jack@example.com.
Para decidir el valor del prefijo, sigue estos pasos:
- Incluye el nivel de jerarquía (raíz, organización o proyecto).
- Incluye el nombre del IdP (adfs, keycloak).
- Te recomendamos que añadas un carácter separador, como
-, como sufijo, ya que no se añade ningún separador entre el prefijo y el nombre de usuario.
Asignar un administrador inicial
Para conceder acceso inicial a la cuenta de PA a la organización, se le debe asignar el rol de administrador de la organización. Para asignar la cuenta de administrador principal como administrador inicial, crea un IAMRoleBinding en el servidor de la API global:
kubectl apply -f --kubeconfig=GLOBAL_API_SERVER_KUBECONFIG - <<EOF
apiVersion: iam.global.gdc.goog/v1
kind: IAMRoleBinding
metadata:
name: PA_INITIAL_ADMIN_EMAIL-binding
namespace: platform
spec:
roleRef:
apiGroup: iam.global.gdc.goog
kind: IAMRole
name: organization-iam-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: PA_IDP_PREFIXPA_INITIAL_ADMIN_EMAIL
EOF
1.10. Establecer la conectividad de red de la organización
Una organización recién creada está aislada y no se puede acceder a ella desde ninguna red externa. Para que la organización funcione, debes conectarla a una o varias redes externas mediante el servicio Interconnect.
Este proceso implica configurar un conjunto de recursos personalizados que definen la conexión lógica. A continuación, se describen dos situaciones habituales para proporcionar conectividad a una nueva organización.
Situación 1: Asociar una organización a una interconexión compartida
Si ya tienes una interconexión para una red compartida, solo tienes que
actualizar AttachmentGroup y RoutePolicy para incluir la nueva organización.
Actualiza el
AttachmentGroup: unAttachmentGroupespecifica qué organizaciones pueden usar un conjunto de adjuntos de VLAN. Edita el archivoAttachmentGroupYAML y añade la nueva organización a la listaspec.entities. En el caso de las organizaciones de la versión 2, debes especificar la reddomainType(OrgAdmin,OrgDataoOrgMixed) a la que te quieres conectar.Ejemplo de actualización de
AttachmentGroup:apiVersion: system.private.gdc.goog/v1alpha1 kind: AttachmentGroup metadata: name: attachment-group-shared namespace: gpc-system spec: identifier: shared-network entities: - orgName: existing-org-1 # Existing organization domainType: OrgMixed - orgName: new-customer-org # Add the new organization domainType: OrgMixedActualiza la
RoutePolicy: UnaRoutePolicydefine qué prefijos de IP se anuncian. Edita la política y añade las subredes IP externas de la nueva organización a laspec.out.ipPrefixList. De esta forma, el tráfico entrante puede llegar a la organización.Ejemplo de actualización de
RoutePolicy:apiVersion: system.private.gdc.goog/v1alpha1 kind: RoutePolicy metadata: name: shared-routepolicy namespace: gpc-system spec: # ... other fields ... out: asPathAccessList: - action: Permit asPathRegex: ".*" ipPrefixList: - action: Permit ipPrefix: EXTERNAL_SUBNET_OF_EXISTING_ORG_1 - action: Permit ipPrefix: EXTERNAL_SUBNET_OF_NEW_CUSTOMER_ORG # Add new prefix # ... deny rules ...Aplica los cambios con
kubectl applymediante tu proceso de infraestructura como código (IaC).
Situación 2: Crear una interconexión dedicada
Para una conexión dedicada, debes crear un nuevo conjunto de recursos de interconexión. El proceso completo implica crear cinco recursos personalizados en orden.
- Crea un
InterconnectLinkpor cada nueva conexión física. - Crea un
InterconnectGrouppara agrupar las vinculaciones físicas y permitir la nueva organización. - Crea un
AttachmentGroupy especifica la nueva organización en la listaentities. - Crea un
RoutePolicyque permita los prefijos de IP entrantes y salientes de esta conexión dedicada. - Crea uno o varios recursos
InterconnectAttachmentpara definir las VLANs y las sesiones de BGP.
Para ver ejemplos completos y los pasos detallados de cada uno de estos recursos, consulta la documentación sobre cómo configurar una interconexión.
1.11 Configurar el webhook de Alertmanager para conectarse a ServiceNow
Sigue los pasos que se indican en MON-T0016 para conectar el webhook de Alertmanager a ServiceNow y crear incidentes.
1.12 Configurar la hoja de precios de facturación de una organización
El subcomponente de facturación de una organización requiere que los productos o servicios que se van a facturar se configuren con el recurso personalizado SKUDescription. Un solo SKUDescription describe un producto o servicio que se va a facturar junto con su precio. Por lo tanto, una colección de SKUDescription
objetos se puede considerar la hoja de precios de una organización. En los pasos siguientes se configura la hoja de precios de la organización en IAC.
1.12.1 Obtener la hoja de precios
Si aún no tienes los recursos de la SKUDescription hoja de precios de una organización, ponte en contacto con la oficina de gestión de programas (PMO) para obtenerla. La hoja de precios debe ser una serie de archivos YAML que contengan recursos SKUDescription.
1.12.2. Determinar si la hoja de precios se ha compartido o no
La hoja de precios se puede compartir en todas las organizaciones o se puede configurar en cada organización. El gestor de la oficina de proyectos puede informarte de si la hoja de precios se ha compartido o no.
1.12.2.1 Hoja de precios compartida
Si la hoja de precios se comparte, colóquela en la carpeta common-data
compartida de IAC.
Si esta organización no es la primera que se crea, es posible que la hoja de precios ya esté en la carpeta compartida
common-data. Si la hoja de precios existe, compruebe que se han seguido los pasos del 2 al 4 y vaya al paso 5.Crea la carpeta compartida para la hoja de precios.
mkdir -p IAC_REPO_PATH/iac/infrastructure/common-data/bil/skudescriptions/Sustituye IAC_REPO_PATH por la ruta al repositorio de IAC.
Guarda los recursos YAML de la hoja de precios de
SKUDescriptionen esta carpeta. Después, la carpetaskudescriptionsdebe contener archivos YAML separados por áreas. Configura la estructura de carpetas y los archivos YAML para que se ajusten a tu caso práctico de facturación:Facturación gestionada por el partner: Google cobra al partner. Coloca los
SKUDescriptionrecursos en el espacio de nombrespartner-billing-system.Facturación del cliente: el partner cobra al usuario final. Coloca los
SKUDescriptionrecursos en el espacio de nombresbilling-system.
En los siguientes ejemplos se muestran las estructuras de archivos de los modelos de facturación de clientes y de socios. En cada modelo, verás dos servicios (computación y almacenamiento) con dos archivos YAML por servicio:
Facturación de cliente:
├── customer ├── compute │ ├── compute-sku1.yaml │ └── compute-sku2.yaml └── storage ├── storage-sku1.yaml └── storage-sku2.yamlFacturación gestionada por el partner:
├── partner ├── compute │ ├── partner-compute-sku1.yaml │ └── partner-compute-sku2.yaml └── storage ├── partner-storage-sku1.yaml └── partner-storage-sku2.yamlComprueba que haya un archivo
kustomization.yamlen el directorio que incluya todos los archivos YAML de la hoja de preciosSKUDescription.touch IAC_REPO_PATH/iac/infrastructure/common-data/bil/skudescriptions/kustomization.yaml cd IAC_REPO_PATH/iac/infrastructure/common-data/bil/skudescriptions/ kustomize edit add resource */*.yamlExporta la variable de entorno
ORG_CLUSTER:En una organización de la versión 1, ejecuta el siguiente comando:
export ORG_CLUSTER=ORG_ADMIN_CLUSTER_NAMEEn una organización de la versión 2, ejecuta el siguiente comando:
export ORG_CLUSTER=ORG_INFRA_CLUSTER_NAME
Crea el directorio de facturación
skudescriptionsen la organización:En una organización de la versión 1:
mkdir -p IAC_REPO_PATH/iac/infrastructure/zonal/zones/ZONE_NAME/ORG_CLUSTER_NAME/bil/skudescriptionsEn una organización de la versión 2:
mkdir -p IAC_REPO_PATH/iac/infrastructure/zonal/zones/ZONE_NAME/ORG_CLUSTER_NAME-management/bil/skudescriptions
Sustituye ORG_CLUSTER_NAME por el nombre del clúster de administrador de la organización, en función del tipo de versión de tu organización.
Incluye la hoja de precios habitual en la organización:
En una organización de la versión 1:
cat > IAC_REPO_PATH/iac/infrastructure/zonal/zones/ZONE_NAME/ORG_CLUSTER_NAME/bil/skudescriptions/kustomization.yaml << EOF apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - ../../../../common-data/bil/skudescriptions EOFEn una organización de la versión 2:
cat > IAC_REPO_PATH/iac/infrastructure/zonal/zones/ZONE_NAME/ORG_CLUSTER_NAME-management/bil/skudescriptions/kustomization.yaml << EOF apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - ../../../../common-data/bil/skudescriptions EOF
Añade y confirma el archivo YAML, y personaliza los archivos:
cd IAC_REPO_PATH git add "iac" git commitEnvía la actualización a GitLab:
git -c http.sslVerify=false pushEspera a que se revise el código y se combine.
Verifica que los objetos
SKUDescriptionexistan en el clúster correspondiente a tu modelo de facturación.Exporta el valor
KUBECONFIGsegún el tipo de organización.En una organización de la versión 1, ejecuta el siguiente comando:
export KUBECONFIG=ORG_ADMIN_CLUSTER_KUBECONFIGSustituye ORG_ADMIN_CLUSTER_KUBECONFIG por la ruta al archivo kubeconfig del clúster de administrador de la organización, como
/tmp/${ORG}-admin-kubeconfig.En una organización de la versión 2, ejecuta el siguiente comando:
export KUBECONFIG=MANAGEMENT_API_SERVER_KUBECONFIGSustituye MANAGEMENT_API_SERVER_KUBECONFIG por la ruta al archivo kubeconfig del servidor de la API Management, como
/tmp/${ORG}-management-kubeconfig.
Ejecuta la CLI
kubectl:Para la facturación de clientes:
kubectl get SKUDescription -n billing-systemPara la facturación de partners:
kubectl get SKUDescription -n partner-billing-system
1.12.2.2. Hoja de precios específica de la organización
Si la hoja de precios es específica de una organización, debe colocarla en la carpeta del clúster de la organización.
Crea el directorio de facturación
skudescriptionsen el clúster de la organización:En una organización de la versión 1:
mkdir -p IAC_REPO_PATH/iac/infrastructure/zonal/zones/ZONE_NAME/ORG_CLUSTER_NAME/bil/skudescriptionsEn una organización de la versión 2:
mkdir -p IAC_REPO_PATH/iac/infrastructure/zonal/zones/ZONE_NAME/ORG_CLUSTER_NAME-management/bil/skudescriptions
Guarda los recursos YAML de la hoja de precios de
SKUDescriptionen esta carpeta. Después, la carpetaskudescriptionsdebe tener archivos YAML separados por áreas. En el ejemplo siguiente, se muestran dos servicios (compute y storage) con dos archivos YAML cada uno:. ├── compute │ ├── compute-sku1.yaml │ └── compute-sku2.yaml └── storage ├── storage-sku1.yaml └── storage-sku2.yamlAsegúrese de que haya un archivo
kustomization.yamlen el directorio que incluya todos los archivos YAML de la hoja de preciosSKUDescription.En una organización de la versión 1:
touch IAC_REPO_PATH/iac/infrastructure/zonal/zones/ZONE_NAME/ORG_CLUSTER_NAME/bil/skudescriptions/kustomization.yaml cd IAC_REPO_PATH/iac/infrastructure/zonal/zones/ZONE_NAME/ORG_CLUSTER_NAME/bil/skudescriptions/ kustomize edit add resource */*.yamlEn una organización de la versión 2:
touch IAC_REPO_PATH/iac/infrastructure/zonal/zones/ZONE_NAME/ORG_CLUSTER_NAME-management/bil/skudescriptions/kustomization.yaml cd IAC_REPO_PATH/iac/infrastructure/zonal/zones/ZONE_NAME/ORG_CLUSTER_NAME-management/bil/skudescriptions/ kustomize edit add resource */*.yaml
Asegúrate de que el archivo
kustomization.yamlde la raíz de la organización tenga la carpetabil/skudescriptionsrecién añadida. ConsultaIAC_REPO_PATH/iac/infrastructure/zonal/zones/ZONE_NAME/ORG_CLUSTER_NAME/kustomization.yamlpara una organización de la versión 1 yIAC_REPO_PATH/iac/infrastructure/zonal/zones/ZONE_NAME/ORG_CLUSTER_NAME-management/kustomization.yamlpara una organización de la versión 2 :apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - ... # existing resource items - bil/skudescriptionsFasea y confirma el archivo YAML y los archivos kustomize:
cd IAC_REPO_PATH git add "iac" git commitEnvía la actualización a GitLab:
git -c http.sslVerify=false pushEspera a que se revise el código y se combine.
Verifica que los objetos
SKUDescriptionexisten en el clúster indicado:En una organización de la versión 1, ejecuta el siguiente comando:
export KUBECONFIG=ORG_ADMIN_CLUSTER_KUBECONFIG kubectl get SKUDescription -n billing-systemSustituye ORG_ADMIN_CLUSTER_KUBECONFIG por la ruta al archivo kubeconfig del clúster de administrador de la organización, como
/tmp/${ORG}-admin-kubeconfig.En una organización de la versión 2, ejecuta el siguiente comando:
export KUBECONFIG=MANAGEMENT_API_SERVER_KUBECONFIG kubectl get SKUDescription -n billing-systemSustituye MANAGEMENT_API_SERVER_KUBECONFIG por la ruta al archivo kubeconfig del servidor de la API Management, como
/tmp/${ORG}-management-kubeconfig. .
1.13 Crear usos periódicos de facturación
Distributed Cloud ofrece códigos de mantenimiento en almacén (SKU) que generan cargos periódicos. Sin embargo, Distributed Cloud no registra los costes de uso de determinados SKUs. Para gestionar esta información, usa el recurso RecurringUsage. Para obtener más información e instrucciones sobre cómo crear usos periódicos, consulta el artículo Crear usos periódicos.
1.14 Configurar la facturación de una organización
El subcomponente de facturación no empieza a calcular los costes de una organización hasta que se alcanza la hora de inicio de la facturación. La hora de inicio de la facturación tiene el valor predeterminado 9999-01-01T00:00:00-07:00. Por lo tanto, cuando se considera que una organización está lista, el IO anula la hora de inicio de la facturación para iniciar el flujo de trabajo de facturación.
1.14.1. Obtener la hora de inicio de la facturación
La hora de inicio de la facturación debe ser el principio del periodo de cumplimiento, que se indica en el contrato. Si aún no tienes la hora de inicio de la facturación de una organización, ponte en contacto con la oficina de gestión de programas (PMO) para obtener la información.
1.14.2. Asocia una cuenta de pagos de facturación a una organización
Los entornos aislados de Google Distributed Cloud (GDC) requieren una cuenta de facturación para hacer un seguimiento de los costes de los proyectos y las organizaciones. Si no vinculas una cuenta de facturación a una organización o un proyecto, perderás los datos de costes asociados al recurso.
Para cobrar al cliente por el uso del servicio, todas las cuentas de facturación de una organización deben usar una única hoja de precios.
1.14.2.1. Antes de empezar
Antes de continuar, pide a tu administrador de seguridad que te conceda los siguientes roles obligatorios. Estos roles se vinculan al espacio de nombres del proyecto para la facturación a nivel de proyecto o al espacio de nombres de la plataforma para la facturación a nivel de organización:
Administrador de la cuenta de facturación de la organización: crea, gestiona y vincula el recurso
BillingAccount. Pide a tu administrador de seguridad que te conceda el rolorganization-billing-account-admin.Usuario de cuenta de facturación de organización: lee, enumera y vincula el recurso
BillingAccount. Pide a tu administrador de seguridad que te conceda el rolorganization-billing-account-user.Gestor de cuentas de facturación de la organización: puede leer, enumerar, crear y actualizar el recurso
BillingAccountBinding. Pide a tu administrador de seguridad que te conceda el rolorganization-billing-manager.
1.14.2.2. Crear una cuenta de facturación
Una cuenta de facturación se identifica de forma única por su name y su namespace. Para crear una cuenta de facturación, usa un recurso personalizado para establecer name y namespace:
Crea un archivo YAML y añade el recurso personalizado
BillingAccounty el siguiente contenido:apiVersion: billing.gdc.goog/v1 kind: BillingAccount metadata: namespace: platform name: BIL_ACCOUNT_NAME spec: displayName: BIL_DISPLAY_NAME paymentSystemConfig: cloudBillingConfig: accountID: "012345-6789AB-CDEF01"Sustituye las siguientes variables:
- BIL_ACCOUNT_NAME: el nombre de la cuenta de facturación. Por ejemplo.
test-billing-account. - BIL_DISPLAY_NAME: el nombre visible de la cuenta de facturación. Por ejemplo.
"Test Billing Account".
- BIL_ACCOUNT_NAME: el nombre de la cuenta de facturación. Por ejemplo.
Verifica el tipo de configuración de pago. Las cuentas de facturación de Distributed Cloud deben tener una de las siguientes configuraciones de pago:
cloudBillingConfig: la configuración de pago predeterminada. Esta configuración almacena un ID de cuenta de facturación de Cloud.customConfig: una configuración personalizada para que los partners almacenen su configuración de pago para facturar a la organización.customConfigadmite un diccionario de cadenas clave-valor con una clave obligatoriapayment-config-type.
En los siguientes ejemplos se muestran fragmentos de archivos
BillingAccountYAML para diferentes configuraciones de pago:cloudBillingConfigspec: paymentSystemConfig: cloudBillingConfig: accountID: CLOUD_BILLING_ACCOUNT_IDSustituye
CLOUD_BILLING_ACCOUNT_IDpor elGoogle Cloud ID de tu cuenta de facturación.customConfigspec: paymentSystemConfig: customConfig: "payment-config-type": PAYMENT_CONFIG_TYPESustituye
PAYMENT_CONFIG_TYPEpor el tipo de configuración de pago que hayas elegido para tu configuración de facturación personalizada.Si no tienes la información de la configuración de tu organización, introduce los siguientes datos:
customConfigspec: paymentSystemConfig: customConfig: "payment-config-type": "N/A"En el siguiente archivo YAML se muestra un recurso
BillingAccountcompleto con la configuración decloudBillingConfig:apiVersion: billing.gdc.goog/v1 kind: BillingAccount metadata: namespace: platform name: test-billing-account spec: displayName: "Test Billing Account" paymentSystemConfig: cloudBillingConfig: accountID: "012345-6789AB-CDEF01"Guarda el archivo YAML del recurso personalizado. Ejecuta la CLI de
kubectlpara aplicar el recurso en el clúster de la organización o el proyecto específicos que quieras facturar:kubectl --kubeconfig $ORG_KUBECONFIG apply -f billingaccount.yaml
1.14.2.3. Vincular una organización a una cuenta de facturación
Para vincular una organización a un BillingAccount, sigue estos pasos:
Añade el siguiente contenido al archivo YAML
billingaccountbinding.yaml:- En la sección
billingAccountRef, rellena el camponamecon el contenido del camponamedelBillingAccountque quieras vincular. - En la sección
metadata, rellena el camponamespacecon el contenido del campo idéntico del recursoBillingAccount. En este ejemplo, el espacio de nombres de la organización esplatform:
apiVersion: billing.gdc.goog/v1 kind: BillingAccountBinding metadata: name: billing namespace: platform spec: billingAccountRef: name: BIL_ACCOUNT_NAME namespace: platform- En la sección
Aplica el archivo
billingaccountbinding.yaml:kubectl --kubeconfig $ORG_KUBECONFIG apply -f billingaccountbinding.yaml
1.14.3 Antes de empezar
Antes de continuar, pide a tu administrador de seguridad que te conceda el rol Bil Monitor (bil-monitor) en el clúster de administrador de la organización para el espacio de nombres billing-system.
Este permiso te permite leer recursos relacionados para la validación.
1.14.4. Anular la hora de inicio de la facturación
Crea dos archivos YAML con las siguientes rutas:
infrastructure/zonal/zones/ZONE_NAME/root-admin/components/bil/ORG_NAME/bil-monetizer-override.yaml.infrastructure/zonal/zones/ZONE_NAME/root-admin/components/bil/ORG_NAME/bil-invoice-override.yaml.- Crea las subcarpetas necesarias para cada archivo si faltan.
Añade el recurso
SubcomponentOverridey el siguiente contenido a cada archivo:Para la facturación de clientes:
Archivo
bil-monetizer-override.yaml:apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: bil-monetizer namespace: ORG_NAME spec: subComponentRef: bil-monetizer backend: operableParameters: billingStartTime: BILLING_START_TIME billingTimezone: BILLING_TIMEZONEArchivo
bil-invoice-override.yaml:apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: bil-invoice namespace: ORG_NAME spec: subComponentRef: bil-invoice backend: operableParameters: billingStartTime: BILLING_START_TIME billingTimezone: BILLING_TIMEZONE
Para la facturación gestionada por el partner:
Añade la marca
enablePartnerBilling: trueal final de cada archivo YAML:Archivo
bil-monetizer-override.yaml:apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: bil-monetizer namespace: ORG_NAME spec: subComponentRef: bil-monetizer backend: operableParameters: billingStartTime: BILLING_START_TIME billingTimezone: BILLING_TIMEZONE enablePartnerBilling: trueArchivo
bil-invoice-override.yaml:apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: bil-invoice namespace: ORG_NAME spec: subComponentRef: bil-invoice backend: operableParameters: billingStartTime: BILLING_START_TIME billingTimezone: BILLING_TIMEZONE enablePartnerBilling: true
Sustituye las siguientes variables:
ORG_NAME: el nombre de la organización. Por ejemplo:
org-1.BILLING_START_TIME: marca de tiempo para iniciar el flujo de trabajo de facturación.La marca de tiempo debe seguir el formato RFC 3339. Por ejemplo, si el flujo de trabajo de facturación empieza el 01/01/2024 con la zona horaria del horario estándar del Pacífico de EE. UU. y Canadá (UTC-8), añade el valor de la marca de tiempo como
2024-01-01T00:00:00-08:00.BILLING_TIMEZONE: la zona horaria del flujo de trabajo de facturación. La zona horaria debe seguir el formato RFC 3339. Por ejemplo, si la zona horaria de facturación es la hora estándar del Pacífico de EE. UU. y Canadá (UTC-8), añade el valor de la zona horaria como
PST8PDT.
Archivo
bil-monetizer-override-mp.yaml:apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: bil-monetizer namespace: ORG_NAME-mp spec: subComponentRef: bil-monetizer backend: operableParameters: billingStartTime: BILLING_START_TIME billingTimezone: BILLING_TIMEZONE enablePartnerBilling: trueArchivo
bil-invoice-override-mp.yaml:apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: bil-invoice namespace: ORG_NAME-mp spec: subComponentRef: bil-invoice backend: operableParameters: billingStartTime: BILLING_START_TIME billingTimezone: BILLING_TIMEZONE enablePartnerBilling: true
Guarda y almacena los archivos YAML en la carpeta
infrastructure/zonal/zones/ZONE_NAME/root-admin/components/bil/ORG_NAME.Crea una solicitud de extracción que contenga los archivos YAML junto con el archivo de personalización necesario.
1.14.5 Valida la hora de inicio de la facturación
Verifica que has anulado la hora de inicio de la facturación del monetizador y la generación de facturas:
kubectl --kubeconfig ORG_ADMIN_KUBECONFIG \
get deployment billing-monetizer -n billing-system \
-o jsonpath='{.spec.template.spec.containers[0].args}{"\n"}'
kubectl --kubeconfig ORG_ADMIN_KUBECONFIG \
get cronjob billing-ig-job -n billing-system \
-o jsonpath='{.spec.jobTemplate.spec.template.spec.containers[0].args}{"\n"}'
1.15 Configurar la política de red del proxy de almacenamiento de objetos en el clúster de administración de la organización
1.15.1 Crear el archivo YAML de la política de red
Crea el archivo YAML de la política de red allow-obs-system-ingress-traffic, como networkpolicy.yaml:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
annotations:
policy.network.gke.io/enable-logging: "true"
resourcemanager.gdc.goog/propagated-name: allow-obs-system-ingress-traffic
name: allow-obs-system-ingress-traffic
namespace: obj-system
spec:
ingress:
- from:
- namespaceSelector:
matchLabels:
resourcemanager.gdc.goog/project-name: obs-system
podSelector: {}
policyTypes:
- Ingress
1.15.2. Aplica la política de red al clúster de administrador de la organización
kubectl --kubeconfig ORG_ADMIN_KUBECONFIG apply -f networkpolicy.yaml
1.16. Crear un sitio de copia de seguridad
Si aprovechas la asistencia de recuperación tras fallos, debes volver a completar los pasos anteriores para el sitio de copia de seguridad. Si no tienes habilitada la recuperación ante desastres, sáltate esta sección.
- Sigue las instrucciones de la sección 1.4. - 1.9. para crear otra organización para el sitio de copia de seguridad.
1.17. Solucionar problemas de creación de organizaciones
1.17.1. Confirma que todos los recursos implementados estén en buen estado y presentes
El proceso de creación de la organización crea varios recursos en diferentes clústeres de Kubernetes. Primero, comprueba los recursos implementados y asegúrate de que estén en buen estado. En las siguientes secciones se describen los recursos creados para una organización llamada operations.
1.17.2. Confirmar todos los recursos implementados en el clúster de administrador raíz
Sigue estos pasos para confirmar que todos los recursos del clúster de administrador raíz están en buen estado y presentes:
Para obtener la configuración de kubeconfig necesaria para el clúster de administrador raíz, sigue las instrucciones de IAM-R0004. Asegúrate de definir las siguientes variables de entorno y alias para estas instrucciones de verificación:
export KUBECONFIG=ROOT_ADMIN_KUBECONFIG export ORG="ORG_NAME" alias k=kubectlConfirma que los recursos del cortafuegos están disponibles:
Establece una conexión SSH con el cortafuegos y confirma que se ha creado un nuevo
vsys:show config running | match 'vsys[0-9] 'El resultado debería ser similar al siguiente:
vsys1 { vsys2 {Consulta el recurso
FirewallVirtualSystem:k get firewallvirtualsystem -n gpc-systemEl resultado debería ser similar al siguiente:
NAME AGE kb-ab-fw01-internal-vsys2-operations 4d19h kb-ab-fw01-vsys-root-admin 13d kb-ac-fw01-internal-vsys2-operations 4d19h kb-ac-fw01-vsys-root-admin 13d
Confirma que los recursos de almacenamiento están disponibles:
Consulta el recurso
StorageVirtualMachine:k get StorageVirtualMachine -n gpc-systemEl resultado debería ser similar al siguiente:
NAME STORAGEORG MGMTIP READY AGE operations-admin operations 10.0.2.10 True 5d22h operations-user operations 10.0.2.18 True 5d22h root-admin root 10.0.2.2 True 13d
Confirma que los recursos de HSM están disponibles:
Comprueba los HSMs:
k get hsms -n gpc-systemEl resultado debería ser similar al siguiente:
NAMESPACE NAME AGE IP READY REASON gpc-system zk-aa-hsm01 2h 198.51.100.192 True ReconcileHSMSuccess gpc-system zk-aa-hsm02 2h 198.51.100.193 True ReconcileHSMSuccess gpc-system zk-ab-hsm01 2h 198.51.100.194 True ReconcileHSMSuccessComprueba el clúster de HSM:
k get hsmcluster -n gpc-systemEl resultado debería ser similar al siguiente:
NAMESPACE NAME AGE READY REASON gpc-system hsmcluster 38h True ReconcileHSMClusterSuccessComprueba el tenant del HSM:
k get hsmtenant -AEl resultado debería ser similar al siguiente:
NAMESPACE NAME AGE READY REASON gpc-system root 13d True ReconcileHSMTenantSuccess operations operations 5d22h True ReconcileHSMTenantSuccess
Confirma que los recursos de la máquina y del nodo están disponibles:
Consulta los
AddressPoolClaimrecursos:k get addresspoolclaims -AEl resultado debería ser similar al siguiente:
NAMESPACE NAME AGE operations admin-control-plane-node-pool 5d23h operations operations-admin-dns-default-ipv4-ipc 5d23h operations operations-admin-load-balancer-default-ipv4-ipc 5d23hConsulta los
NodePoolClaimrecursos:k get nodepoolclaims -AEl resultado debería ser similar al siguiente:
NAMESPACE NAME AGE operations admin-control-plane-node-pool 5d23h root root-admin-control-plane 13dConsulta los
NodePoolrecursos:k get nodepool -AEl resultado debería ser similar al siguiente:
NAMESPACE NAME READY RECONCILING STALLED UNDERMAINTENANCE UNKNOWN operations admin-control-plane-node-pool 3 0 0 0 0 root root-admin-control-plane 3 0 0 0 0Comprueba los clústeres de Bare Metal:
k get baremetalclusters -AEl resultado debería ser similar al siguiente:
NAMESPACE NAME CLUSTER READY operations operations-admin operations-admin true root root-admin root-admin trueComprueba las máquinas físicas:
k get baremetalmachines -AEl resultado debería ser similar al siguiente:
NAMESPACE NAME CLUSTER READY INSTANCEID MACHINE operations 10.251.82.28 operations-admin true baremetal://10.251.82.28 10.251.82.28 operations 10.251.82.29 operations-admin true baremetal://10.251.82.29 10.251.82.29 operations 10.251.82.30 operations-admin true baremetal://10.251.82.30 10.251.82.30 root 10.251.80.2 root-admin true baremetal://10.251.80.2 10.251.80.2 root 10.251.80.3 root-admin true baremetal://10.251.80.3 10.251.80.3 root 10.251.80.4 root-admin true baremetal://10.251.80.4 10.251.80.4Comprueba los servidores. Están en estado
provisioned:k get servers -n gpc-system | grep provisionedEl resultado debería ser similar al siguiente:
kb-aa-bm01 13d o1-highmem1-40-gdc-metal 10.251.252.61 10.251.80.2 10.251.252.62 provisioned true kb-aa-bm02 13d o1-standard1-64-gdc-metal 10.251.252.63 10.251.82.28 10.251.252.64 provisioned true kb-aa-bm03 13d o1-standard1-64-gdc-metal 10.251.252.65 10.251.82.29 10.251.252.66 provisioned true kb-aa-bm04 13d o1-standard1-64-gdc-metal 10.251.252.67 10.251.82.30 10.251.252.68 provisioned true kb-aa-bm08 13d o1-highmem1-96-gdc-metal 10.251.252.75 10.0.35.2 10.251.252.76 provisioned true kb-aa-bm10 13d o1-highmem1-96-gdc-metal 10.251.252.79 10.0.35.4 10.251.252.80 provisioned true kb-aa-bm14 13d o1-highgpu1-48-gdc-metal 10.251.252.87 10.0.35.9 10.251.252.88 provisioned true kb-aa-bm15 13d o1-highgpu1-48-gdc-metal 10.251.252.89 10.0.35.10 10.251.252.90 provisioned true kb-aa-bm16 13d o1-highgpu1-48-gdc-metal 10.251.252.91 10.0.35.11 10.251.252.92 provisioned true kb-ab-bm01 13d o1-highmem1-40-gdc-metal 10.251.253.61 10.251.80.3 10.251.253.62 provisioned true kb-ac-bm01 13d o1-highmem1-40-gdc-metal 10.251.254.61 10.251.80.4 10.251.254.62 provisioned trueComprueba el clúster de Kubernetes:
k get cluster -AEl resultado debería ser similar al siguiente:
NAMESPACE NAME AGE operations operations-admin 5d23h root root-admin 13dComprueba los secretos de kubeconfig:
k get secrets -A | grep kubeconfigEl resultado debería ser similar al siguiente:
operations operations-admin-kubeconfig Opaque 1 5d22h root root-admin-kubeconfig Opaque 1 13d
1.17.3. Confirmar todos los recursos implementados en los clústeres de organización de la versión 1
Sigue estos pasos para confirmar que todos los recursos del clúster de administrador de la organización y del clúster del sistema de una organización v1 están en buen estado y presentes. Si tienes una organización de la versión 2, ve a la siguiente sección.
1.17.3.1. Confirmar todos los recursos implementados en un clúster de administrador de organización
Para obtener la configuración de kubeconfig necesaria para el clúster de administrador raíz, sigue las instrucciones de IAM-R0004. Asegúrate de definir las siguientes variables de entorno y alias para estas instrucciones de verificación:
export ORG="ORG_NAME" export KUBECONFIG=ROOT_ADMIN_KUBECONFIG k get secrets -n ${ORG} ${ORG}-admin-kubeconfig -o jsonpath='{.data.value}' \ | base64 -d > /tmp/${ORG}-admin-kubeconfig export ORG_ADMIN_KUBECONFIG=/tmp/${ORG}-admin-kubeconfig alias ka="kubectl --kubeconfig ${ORG_ADMIN_KUBECONFIG}"Confirma que los recursos de la máquina y del nodo están disponibles:
Comprueba los clústeres de Bare Metal:
ka get baremetalclusters -AEl resultado debería ser similar al siguiente:
NAMESPACE NAME CLUSTER READY operations-system-cluster operations-system operations-system trueComprueba las máquinas físicas:
ka get baremetalmachines -AEl resultado debería ser similar al siguiente:
NAMESPACE NAME CLUSTER READY INSTANCEID MACHINE operations-system-cluster 10.0.35.10 operations-system true baremetal://10.0.35.10 10.0.35.10 operations-system-cluster 10.0.35.11 operations-system true baremetal://10.0.35.11 10.0.35.11 operations-system-cluster 10.0.35.2 operations-system true baremetal://10.0.35.2 10.0.35.2 operations-system-cluster 10.0.35.3 operations-system true baremetal://10.0.35.3 10.0.35.3 operations-system-cluster 10.0.35.4 operations-system true baremetal://10.0.35.4 10.0.35.4 operations-system-cluster 10.0.35.9 operations-system true baremetal://10.0.35.9 10.0.35.9 operations-system-cluster 10.251.82.205 operations-system true baremetal://10.251.82.205 10.251.82.205 operations-system-cluster 10.251.82.206 operations-system true baremetal://10.251.82.206 10.251.82.206 operations-system-cluster 10.251.82.207 operations-system true baremetal://10.251.82.207 10.251.82.207 operations-system-cluster 10.251.82.232 operations-system true baremetal://10.251.82.232 10.251.82.232Comprueba las máquinas:
ka get machines -AEl resultado debería ser similar al siguiente:
NAMESPACE NAME NODEPOOL operations-system-cluster 10.0.35.10 worker-node-pool-o1-highgpu1-48-gdc-metal operations-system-cluster 10.0.35.11 worker-node-pool-o1-highgpu1-48-gdc-metal operations-system-cluster 10.0.35.2 worker-node-pool-o1-highmem1-96-gdc-metal operations-system-cluster 10.0.35.3 worker-node-pool-o1-highmem1-96-gdc-metal operations-system-cluster 10.0.35.4 worker-node-pool-o1-highmem1-96-gdc-metal operations-system-cluster 10.0.35.9 worker-node-pool-o1-highgpu1-48-gdc-metal operations-system-cluster 10.251.82.205 control-plane-node-pool operations-system-cluster 10.251.82.206 control-plane-node-pool operations-system-cluster 10.251.82.207 control-plane-node-pool operations-system-cluster 10.251.82.232 control-plane-node-poolConsulta los
VirtualmachinesInstancerecursos:ka get virtualmachineinstances -AEl resultado debería ser similar al siguiente:
NAMESPACE NAME AGE PHASE IP NODENAME READY operations-system-cluster vm-19753801 2d16h Running 10.251.82.207 kb-aa-bm02 True operations-system-cluster vm-3661f750 4d19h Running 10.251.82.232 kb-aa-bm03 True operations-system-cluster vm-3c77c480 5d20h Running 10.251.82.206 kb-aa-bm04 TrueConsulta los
NodePoolrecursos:ka get nodepools -AEl resultado debería ser similar al siguiente:
NAMESPACE NAME READY RECONCILING STALLED UNDERMAINTENANCE UNKNOWN operations-system-cluster control-plane-node-pool 3 0 0 0 0 operations-system-cluster worker-node-pool-o1-highgpu1-48-gdc-metal 3 0 0 0 0 operations-system-cluster worker-node-pool-o1-highmem1-96-gdc-metal 2 0 0 0 0Comprueba los clústeres de Kubernetes:
ka get clusters -AEl resultado debería ser similar al siguiente:
NAMESPACE NAME AGE operations-system-cluster operations-system 5d20hComprueba los nodos:
ka get nodes -AEl resultado debería ser similar al siguiente:
NAME STATUS ROLES AGE VERSION kb-aa-bm02 Ready control-plane,master 5d23h v1.23.5-gke.1505 kb-aa-bm03 Ready control-plane,master 5d23h v1.23.5-gke.1505 kb-aa-bm04 Ready control-plane,master 5d23h v1.23.5-gke.1505Comprueba los secretos de kubeconfig:
ka get secret -n ${ORG}-system-cluster ${ORG}-system-kubeconfigEl resultado debería ser similar al siguiente:
NAME TYPE DATA AGE operations-system-kubeconfig Opaque 1 5d20h
1.17.3.2. Confirma todos los recursos implementados en el clúster de usuarios del sistema
Sigue estos pasos para confirmar que todos los recursos del clúster del sistema están en buen estado y presentes:
Para obtener la configuración de kubeconfig necesaria para el clúster de administrador raíz, sigue las instrucciones de IAM-R0004. Asegúrate de definir las siguientes variables de entorno y alias para estas instrucciones de verificación:
export ORG="ORG_NAME" export KUBECONFIG=ROOT_ADMIN_KUBECONFIG k get secrets -n ${ORG} ${ORG}-admin-kubeconfig -o jsonpath='{.data.value}' \ | base64 -d > /tmp/${ORG}-admin-kubeconfig export ORG_ADMIN_KUBECONFIG=/tmp/${ORG}-admin-kubeconfig alias ka="kubectl --kubeconfig ${ORG_ADMIN_KUBECONFIG}" ka get secret -n ${ORG}-system-cluster ${ORG}-system-kubeconfig -o jsonpath='{.data.value}' \ | base64 -d > /tmp/${ORG}-system-kubeconfig export SYSTEM_KUBECONFIG=/tmp/${ORG}-system-kubeconfig alias ku="kubectl --kubeconfig ${SYSTEM_KUBECONFIG}"Confirma que los recursos de la máquina y del nodo están disponibles:
Consulta el recurso
VirtualmachineInstance:ku get vmi -AEl resultado es similar al siguiente (si se ha creado un clúster de usuarios):
NAMESPACE NAME AGE PHASE IP NODENAME READY gdc-vm-infra vm-61aa554d 3d21h Running 10.0.35.6 kb-aa-bm10 True gdc-vm-infra vm-b627da1f 3d21h Running 10.0.35.5 kb-aa-bm08 TrueComprueba los nodos:
ku get nodesEl resultado debería ser similar al siguiente:
NAME STATUS ROLES AGE VERSION kb-aa-bm10 Ready worker 5d20h v1.23.5-gke.1505 kb-aa-bm14 Ready worker 38h v1.23.5-gke.1505 kb-aa-bm15 Ready worker 38h v1.23.5-gke.1505 kb-aa-bm16 Ready worker 38h v1.23.5-gke.1505 vm-19753801 Ready control-plane,master 5d21h v1.23.5-gke.1505 vm-3661f750 Ready control-plane,master 4d20h v1.23.5-gke.1505 vm-3c77c480 Ready control-plane,master 5d20h v1.23.5-gke.1505Comprueba las asignaciones de GPU:
ku get gpuallocations -AEl resultado debería ser similar al siguiente:
NAMESPACE NAME ALLOCATED DEVICEMODEL vm-system kb-aa-bm14 true A100 PCIe 40GB vm-system kb-aa-bm15 true A100 PCIe 40GB vm-system kb-aa-bm16
1.17.4. Confirmar todos los recursos implementados en los clústeres de organización de la versión 2
Sigue estos pasos para confirmar que todos los recursos del clúster de infraestructura de la organización de una organización de la versión 2 están en buen estado y presentes. Si tienes una organización de la versión 1, omite esta sección.
Para obtener la configuración de kubeconfig necesaria para el clúster de administrador raíz, sigue las instrucciones de IAM-R0004. Asegúrate de definir las siguientes variables de entorno y alias para estas instrucciones de verificación:
export ORG="ORG_NAME" export KUBECONFIG=ROOT_ADMIN_KUBECONFIG k get secrets -n ${ORG} ${ORG}-admin-kubeconfig -o jsonpath='{.data.value}' \ | base64 -d > /tmp/${ORG}-admin-kubeconfig export ORG_ADMIN_KUBECONFIG=/tmp/${ORG}-admin-kubeconfig alias ka="kubectl --kubeconfig ${ORG_ADMIN_KUBECONFIG}"Confirma que los nodos y los servidores de la API estén en buen estado:
Comprueba los nodos:
ka get nodes -AEl resultado debería ser similar al siguiente:
NAME STATUS ROLES AGE VERSION kb-aa-bm02 Ready control-plane,master 5d23h v1.23.5-gke.1505 kb-aa-bm03 Ready control-plane,master 5d23h v1.23.5-gke.1505 kb-aa-bm04 Ready control-plane,master 5d23h v1.23.5-gke.1505 kb-aa-bm05 Ready worker 5d23h v1.23.5-gke.1505 kb-aa-bm06 Ready worker 5d23h v1.23.5-gke.1505 kb-aa-bm07 Ready worker 5d23h v1.23.5-gke.1505Comprueba los secretos de kubeconfig:
ka get secret -n management-kube-system kube-admin-remote-kubeconfigEl resultado debería ser similar al siguiente:
NAME TYPE DATA AGE kube-admin-remote-kubeconfig Opaque 1 5d20h
Comprueba las asignaciones de GPU para confirmar que los recursos de GPU están listos, si procede:
ka get gpuallocations -AEl resultado debería ser similar al siguiente:
NAMESPACE NAME ALLOCATED DEVICEMODEL vm-system kb-aa-bm14 true A100 PCIe 40GB vm-system kb-aa-bm15 true A100 PCIe 40GB vm-system kb-aa-bm16
1.17.5. Confirmar que todos los recursos de la organización se han conciliado
Sigue estos pasos para confirmar que todos los recursos relacionados con la organización del clúster de administrador raíz global y zonal están en buen estado y presentes, suponiendo que el objetivo sea crear una organización operations con dos zonas: zone-1 y zone-2.
Sigue los pasos que se indican en Acceder a la API de administrador raíz global para acceder al servidor de la API global y usa el siguiente alias para la API kubectl de administrador raíz global.
alias kga='kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG export ORG="ORG_NAME"Confirma que los recursos de organización globales están disponibles:
Consulta los recursos globales de
Organization:kga get organization -AEl resultado debería ser similar al siguiente:
NAMESPACE NAME READY gpc-system operations gpc-system rootConsulta los recursos globales de
OrganizationReplica:kga get organizationreplica -AEl resultado debería ser similar al siguiente:
NAMESPACE NAME AGE gpc-system operations-zone1 3d16h gpc-system operations-zone2 3d16h gpc-system root-zone1 3d17h gpc-system root-zone2 3d16hConsulta los recursos globales de
OrganizationZonalConfig:kga get organizationzonalconfig -AEl resultado debería ser similar al siguiente:
NAMESPACE NAME AGE gpc-system operations-zone1-config 3d16h gpc-system operations-zone2-config 3d16hConsulta los recursos globales de
OrganizationZonalConfigReplica:kga get organizationzonalconfigreplica -AEl resultado debería ser similar al siguiente:
NAMESPACE NAME AGE gpc-system operations-zone1-config-zone1 3d16h gpc-system operations-zone1-config-zone2 3d16h gpc-system operations-zone2-config-zone1 3d16h gpc-system operations-zone2-config-zone2 3d16h
Define el alias de configuración de kubeconfig del clúster de administrador raíz zonal:
alias ka='kubectl --kubeconfig /root/GDC_VERSION/root-admin/root-admin-kubeconfig'Confirma que los recursos de organización zonales están disponibles:
Consulta los
Organizationrecursos:ka get organization -AEl resultado debería ser similar al siguiente:
NAMESPACE NAME READY gpc-system operations True gpc-system root TrueConsulta los
OrganizationReplicarecursos:ka get organizationreplica -AEl resultado debería ser similar al siguiente:
NAMESPACE NAME AGE gpc-system operations 3d16h gpc-system root 3d17hConsulta los
OrganizationZonalConfigReplicarecursos:ka get organizationzonalconfigreplica -AEl resultado debería ser similar al siguiente:
NAMESPACE NAME AGE gpc-system operations-zone1-config 3d16h gpc-system operations-zone2-config 3d16h
Sigue los pasos que se indican en Permitir que cualquier dirección acceda a una organización para permitir el tráfico de DCI en los clústeres de administrador de la organización desde el sitio de origen hasta el sitio de copia de seguridad.