Perfil de habilidad: ingeniero de implementación
Como operador, puedes crear una organización para brindar acceso a los clientes a la infraestructura de la plataforma. Para obtener los permisos que necesitas para crear una organización, pídele a tu administrador de seguridad que te otorgue el rol de administrador de la organización.
El recurso Organization es el nodo raíz de la jerarquía de recursos aislados de Google Distributed Cloud (GDC), y todos los recursos que pertenecen a una organización se agrupan en el nodo de organización. Esto proporciona visibilidad central y control sobre cada recurso que pertenece a una organización.
Para obtener más información sobre las organizaciones, consulta la Descripción general de la organización.
1.1. Antes de comenzar
Asegúrate de haber instalado lo siguiente:
Un navegador en tu sistema
La interfaz de línea de comandos (CLI) de Git
La CLI de kubectl
Es la CLI de gcloud.
1.2. Crea un cliente de OIDC en OC IT ADFS
Consulta las instrucciones de configuración de OIDC de ADFS para crear un cliente de OpenID Connect (OIDC) en ADFS para que el operador acceda a la organización que crearás. Registra el ID de cliente y el secreto del 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 la organización, o servicios como ServiceNow.
Agrega la siguiente URL de devolución de llamada de GKE Identity Service a la lista de entidades permitidas en el cliente de OIDC de ADFS que creaste 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 devolución de llamada de GKE Identity Service es
https://ais-core.operations.google.gdch.test/finish-login.- Nombre de la organización:
Agrega la siguiente URL de devolución de llamada de GKE Identity Service a la lista de entidades permitidas en el cliente de OIDC de ADFS que creaste 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 devolución de llamada de GKE Identity Service es
https://ais-core.operations.zone-1.google.gdch.test/finish-login.- Nombre de la organización:
Configura 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_URIReemplaza las variables por los siguientes valores:
Variable Definición ADFS_CERT_BASE64Es el archivo adfs.pemcodificado en base64.ADFS_CLIENT_IDEs el identificador del cliente de ADFS. ADFS_CLIENT_SECRETEs el secreto compartido del cliente de ADFS. ADFS_ISSUER_URIEs el URI de la entidad emisora de ADFS. Para obtener el URI, verifica la ruta de acceso /adfs/.well-known/openid-configurationdel servidor de 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, debes crear las subredes raíz globales y dividirlas para cada zona con la subred de la API pública de administración de direcciones IP (IPAM). Si creas una organización de la versión 2 nueva en una zona que antes tenía una organización de la versión 1, asegúrate de consultar la página de requisitos previos adicionales antes de crear tus subredes globales.
Las subredes raíz globales alojan el grupo de rangos de direcciones IP raíz (CIDR) que se divide en cada zona para iniciar todos los clústeres dentro de la organización del arrendatario, incluido el clúster de infraestructura de la organización y las VMs de carga de trabajo. Una pequeña parte del rango de direcciones IP también está disponible para las subredes raíz como el grupo de direcciones IP de difusión para todos. Puedes asignar automáticamente CIDR dedicados a cada zona con un controlador o proporcionar CIDR a cada zona de forma manual.
Para iniciar una organización, necesitas el rango de direcciones IP internas que se ingresa en el Cuestionario de entrada de la organización (OIQ). Debes usar esos rangos de direcciones IP para crear la subred raíz global en el servidor de la API global.
Debes crear diferentes subredes raíz 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 proporcionan en la siguiente sección.
1.3.1. Define el rango de CIDR para OIQ
Los rangos de CIDR no pueden superponerse entre sí ni con zone-infra-cidr.
El zone-infra-cidr existe en cada zona y se puede recuperar del Cuestionario de admisión del cliente (CIQ) si el cliente lo definió.
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 del resultado 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, el zone-infra-cidr es 192.0.2.0/24, por lo que ningún campo del OIQ debe superponerse con 192.0.2.0/24.
En la siguiente tabla, se muestran los campos del OIQ y sus valores mínimos predeterminados correspondientes:
| Campo de OIQ | Descripción | Tamaño mínimo requerido | Tamaño mínimo por zona para la organización | Nombre de la subred raíz global | Servidor de la API global |
|---|---|---|---|---|---|
infraVPCCIDR |
Cargas de trabajo del sistema, incluidas la consola de la organización, las APIs de administración y los servicios propios. | \( 15 - \lceil \log_2(ZoneNumber) \rceil \) | 16 | infra-vpc-root-cidr |
Raíz global |
defaultVPCCIDR |
Cargas de trabajo y extremos del usuario en la VPC predeterminada en todas las zonas. | \( 16 - \lceil \log_2(ZoneNumber) \rceil \) | 16 | default-vpc-root-cidr |
Organización global |
orgAdminExternalCIDR |
Son las cargas de trabajo y los extremos del clúster perimetral que controlan 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 extremos a los que los usuarios pueden acceder de forma externa, como los balanceadores de cargas externos y los NAT de salida. | \( 22 - \lceil \log_2(ZoneNumber) \rceil \) | 23 | data-external-root-cidr |
Raíz global |
Si no tienes suficiente IP como el mínimo sugerido predeterminado, debes seguir el proceso de división manual para crear las subredes de cada zona.
Ten en cuenta las siguientes limitaciones para los rangos de subredes IPv4:
orgDataExternalCIDR,orgAdminExternalCIDR,infraVPCCIDRydefaultVPCCIDRno deben superponerse entre sí, con otros rangos asignados dentro de la organización ni con ningún rango IPv4 en las redes interconectadas. Los CIDR de estos rangos provienen del espacio de direcciones privadas de RFC 1918.Redes con intercambio de tráfico: Pueden ser cualquier subred anunciada con redes externas a través de adjuntos de interconexión o subredes que tengan intercambio de tráfico con otras VPC en 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. Crea subredes globales en el servidor de la API del 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 el clúster de 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 asignarás a tu organización. Confirma que este espacio de nombres exista:
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, por ejemplo,ORG_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, por ejemplo,ORG_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, por ejemplo,ORG_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 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.yamlen la raíz de la organización tenga las definicionesSubnetagregadas recientemente. VerificaIAC_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.yamlConfirma y prepara los archivos YAML de la subred:
git add "IAC_REPO_PATH/iac/infrastructure" git commitCrea una solicitud de combinación:
git checkout -b ${USERNAME1}-branch git -c http.sslVerify=false push -o merge_request.create origin {USERNAME1}-branchEspera la revisión de código y la combinación.
1.3.3. Divide las subredes raíz para las zonas
Las subredes raíz globales alojan el rango de direcciones IP raíz (CIDR) para todas las zonas. Para consumir el rango de direcciones IP en la zona, primero se deben dividir las subredes raíz globales en subredes más pequeñas para que las zonas las puedan consumir. Cada zona debe tener al menos un rango 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 los controladores de IPAM para que dividan automáticamente la subred de la zona si no les importa el bloque CIDR exacto que usa una zona determinada. El controlador supervisa 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 la zona | Longitud de prefijo fijo predeterminada |
|---|---|
defaultZoneInfraVPCSubnetSize |
16 |
defaultZoneAdminVRFSubnetSize |
23 |
defaultZoneDataVRFSubnetSize |
23 |
defaultZoneDefaultVPCSubnetSize |
16 |
defaultAnycastSubnetSize |
26 |
Las subredes raíz globales deben tener nombres fijos si deseas 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 configuras 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. Divide automáticamente las subredes raíz para las zonas
El controlador global divide automáticamente la subred raíz global en subredes más pequeñas para las zonas existentes. Por ejemplo, considera el siguiente flujo de trabajo para comprender cómo el controlador divide 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 se ve de la siguiente manera:
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. Divide manualmente las subredes raíz para las zonas
En esta sección, se supone que estableciste la anotación ipam.gdc.goog/pause-auto-division: true cuando creaste las subredes raíz globales en el servidor de la API de administrador raíz global.
Esta anotación pausa el controlador para conciliar esas subredes raíz globales, lo que te permite crear manualmente la subred raíz de una zona y la subred de difusión para todos.
Para dividir manualmente la subred raíz global en subredes más pequeñas para las zonas, completa los siguientes pasos:
Enumera las zonas de tu universo:
kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG get zone -AConfirma el CIDR dedicado de la subred raíz que deseas aplicar a tu zona. Haz esto para 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 para cada zona de tu universo de GDC.
Confirma el CIDR dedicado de la subred raíz que deseas aplicar a la subred de difusión para todos.
Asigna el CIDR dedicado a la subred de difusión por Anycast 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 tuvieras 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.yamlen la raíz de la organización tenga las definicionesSubnetagregadas recientemente. VerificaIAC_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.yamlConfirma y prepara 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 la revisión de código y la combinación.
1.3.3.2.1. Ejemplo de división manual de subredes raíz para zonas en infra-vpc
Si hay dos zonas llamadas zone1 y zone2, un ejemplo de subred raíz global infra-vpc-root-cidr que usa infraVPCCIDR, como 192.0.2.0/24, del OIQ en el espacio de nombres org-1 se ve de la siguiente manera:
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 para cada zona llamada infra-vpc-zone1-root-cidr y infra-vpc-zone2-root-cidr, y la subred de difusión por 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 agregar todos los archivos YAML de subred al repositorio de IaC.
1.3.3.2.2. Ejemplo de división manual de subredes raíz para zonas en el segmento de red de datos
Si hay dos zonas llamadas zone1 y zone2, un ejemplo de subred raíz global data-external-root-cidr que usa orgDataExternalCIDR, como 10.0.0.0/24, del OIQ en el espacio de nombres org-1 se ve de la siguiente manera:
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 para cada zona llamada data-external-zone1-root-cidr y data-external-zone2-root-cidr, y la subred de difusión por 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 agregar todos los archivos YAML de subred al repositorio de IaC.
1.3.3.2.3. Ejemplo de división manual de subredes raíz para zonas en el segmento de red de administración
Si hay dos zonas llamadas zone1 y zone2, un ejemplo de subred raíz global admin-external-root-cidr que usa orgAdminExternalCIDR, como 192.168.1.0/24, del OIQ en el espacio de nombres org-1 se ve de la siguiente manera:
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 para cada zona llamada admin-external-zone1-root-cidr y admin-external-zone2-root-cidr, y la subred de difusión a cualquier dirección 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 agregar todos los archivos YAML de subred al repositorio de IaC.
1.4. Crea una organización con IAC
Usa la IAC para crear una organización:
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}'El ejemplo de salida es similar al 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 satisfacer la solicitud.Navega al repositorio
iacy agrega la estructura de directorios para 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-rootReemplaza las siguientes variables:
Variable Definición ORG_NAMEEs el nombre de la organización. El nombre de una organización debe cumplir con los siguientes criterios:
- Debe tener entre 3 y 19 letras ASCII en minúscula, dígitos o guiones.
- Comienza con una letra.
- No deben tener guiones finales.
- No debe terminar con la cadena
-system.
LOG_RETENTION_POLICYEs la configuración de los tiempos de retención para 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 encriptar las claves que genera el KMS. De forma predeterminada, el KMS genera una clave raíz de CTM, una clave raíz almacenada en Thales CipherTrust Manager respaldada por un HSM físico. También puedes elegir una clave raíz de software almacenada como un secreto de Kubernetes. Pasa ctm-rootolocal-rootparakmsRootKeyType.Un ejemplo del archivo YAML del recurso personalizado
Organizationgenerado 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, la encriptación IPsec de nodo a nodo está inhabilitada de forma predeterminada. Si se requiere esta encriptación IPsec, puedes habilitar la encriptación IPsec de nodo a nodo editando el archivo YAML de recursos personalizados
Organizationy agregando una anotación:metadata: annotations: n2n.security.private.gdc.goog/node-to-node-encryption-disabled: "false"El valor
"false"para esta anotación habilita el encriptado.Crea un recurso personalizado
OrganizationZonalConfigpara 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=3Reemplaza las siguientes variables:
Variable Definición ORG_NAMEEs el nombre de la organización. El nombre de una organización debe cumplir con los siguientes criterios:
- Debe tener entre 3 y 30 letras ASCII en minúscula, dígitos o guiones.
- Comienza con una letra.
- No deben tener guiones finales.
- No debe terminar con la cadena
-system.
ZONESNombres de las zonas en la implementación. GDC_VERSIONEs la versión del sistema de GDC para la que se creará la organización. SERVER_QUOTASon los 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 planeas ejecutar recursos de unidades de procesamiento de gráficos (GPU) que sean cargas de trabajo basadas en VM, como APIs de inteligencia artificial y aprendizaje automático (IA/AA) previamente entrenadas, debes aprovisionar máquinas con GPU cuando crees una organización. Para obtener más información, consulta la sección Cómo habilitar la compatibilidad con GPU para clústeres del sistema. ADMIN_SERVEREs un par clave-valor del tipo de servidor y la cantidad de servidores de administrador de la organización que se asignarán para ese tipo de servidor. No se admiten tipos mixtos para los servidores. El valor predeterminado es o1-standard1-64-gdc-metal: 3.STORAGE_SIZEEs el tamaño de los diferentes tipos de almacenamiento que se asignarán a la organización. El tamaño mínimo de almacenamiento en bloque para una organización es de 250 GiB, que se establece con la marca BlockStandard.Un ejemplo del archivo YAML del recurso personalizado
OrganizationZonalConfiggenerado 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 organizaciones nuevas se aprovisionan según el tipo de implementación que se establece en la configuración de la puerta de funciones:
- 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 poco frecuente en que debas anular el tipo de organización predeterminado para tu tipo de implementación, actualiza el campo
spec.compatibilityOptions.architectureOverridePolicyen tu recurso personalizadoOrganizationgenerado aForceV1oForceV2, según el tipo de organización que desees usar. Por ejemplo, el siguiente fragmento fuerza la creación de una organización de la versión 2 en una implementación deACCREDITED:... spec: ... compatibilityOptions: architectureOverridePolicy: ForceV2 ...Confirma los parámetros de configuración restantes para asegurarte de que los componentes, como el almacenamiento y la potencia de procesamiento, sean 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/Reemplaza lo siguiente:
ORG_NAME: Es el nombre de la organización que definiste en el comandogdcloud organizations config createcon el parámetro--name.ZONE: Es el nombre de cada zona en 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 Zona del cuestionario de admisión de clientes para obtener descripciones de los valores del atributo de zona.
Agrega el archivo
kustomization.yamlpara 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 EOFAgrega la nueva organización como recurso de la organización raíz:
Abre el archivo
kustomization.yamlraíz global:vim /iac/infrastructure/global/orgs/root/kustomization.yamlAgrega el nuevo
Organizationcomo un recurso al final de la lista de recursos existente:apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: global-root-kustomization resources: - ... # existing resource items - ORG_NAME
Agrega y confirma el archivo YAML de la organización y los archivos de Kustomize:
git add "IAC_REPO_PATH/iac/infrastructure" git commitCrea una solicitud de combinación:
git checkout -b ${USERNAME1}-branch git -c http.sslVerify=false push -o merge_request.create origin {USERNAME1}-branchEspera la revisión de código y la combinación.
Verifica que estén disponibles la organización global y las configuraciones zonales:
Verifica que la organización global esté disponible en tu universo de GDC:
kubectl get organization -AEl resultado es similar a este:
NAMESPACE NAME AGE gpc-system org 34s gpc-system root 14hVerifica 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
statusen el resultado de YAML seanTrue.Verifica 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 acceder a cada zona antes de verificar el estado de la organización. Asegúrate de que las condiciones
statusen el resultado de YAML para cada zona seanTrue.
1.5. Crea 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 para los clústeres dentro de la organización del arrendatario, como los clústeres de usuario, así como las direcciones IP para las cargas de trabajo de VM.
Crea el archivo YAML de la subred
default-vpc-root-cidr, por ejemplo,default-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_CIDRNavega al repositorio
iacy agrega la estructura de directorios para 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 en el 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 deSubnetrecién agregadas. VerificaIAC_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 EOFAgrega 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 la revisión de código y la combinación.
Al igual que las subredes globales en el clúster de administrador raíz global, la default-vpc-root-cidr también se divide y propaga a cada zona para que la organización zonal consuma direcciones IP.
1.7. Configura org-admin NTPRelay
Debes configurar manualmente la autenticación entre los objetos NTPRelay de root-admin y org-admin.
Sigue NTP-P0001.3 (Administrador raíz -> Administrador de la organización: Encriptación de NTPRelay) para configurar la encriptación de esta organización.
1.8. Conecta el proveedor de identidad 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 del cliente de OIDC.
Establece el nombre de tu organización como una variable de entorno:
export ORG_NAME=ORG_NAMEVerifica que el
ORG_NAMEcoincida con el nombre exacto de la organización.Exporta el archivo kubeconfig del clúster de administrador raíz y ejecuta los siguientes comandos de
kubectlpara obtener los nombres del clúster y la zona:export KUBECONFIG=ROOT_ADMIN_KUBECONFIG kubectl get clusters -A kubectl get zones -n mz-systemAgrega el archivo
ioauthmethod.yamlpara 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 EOFReemplaza las siguientes variables:
Variable Definición ADFS_CERT_BASE64Es la codificación en base64 del certificado que usa ADFS para autofirmar, que GKE Identity Service requiere para establecer una conexión segura con una instancia interna de ADFS. ADFS_ORG_CLIENT_IDEs el ID de OpenID Connect para el cliente de la organización en ADFS. ADFS_ORG_CLIENT_SECRETEl secreto de OpenID Connect para el cliente de la organización registrado en ADFS. ADFS_ISSUER_URIUn URI de emisor válido, que GKE Identity Service requiere para permitir solicitudes de acceso con redireccionamiento a ADFS. Agrega el archivo
initial-admin.yamlpara 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 EOFReemplaza las siguientes variables:
Variable Definición USERNombre de usuario con el prefijo de la IO para acceder al clúster inicialmente. Recuerda agregar el prefijo al nombre de usuario. EXPIRATIONEs la marca de tiempo con formato RFC 3339 en la que el sistema revoca el acceso. Por ejemplo: "2020-11-14T00:20:12+00:00".Agrega 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.yamlAgrega 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 la revisión de código y la combinación.
Para confirmar que el operador puede acceder a la organización, accede a la organización generada y ejecuta el siguiente comando para verificar que exista un proveedor de identidad (IdP) en el
ClientConfigde la organización:Configura el archivo kubeconfig del clúster de administrador según la arquitectura de tu organización:
Para una organización de la versión 1, ejecuta lo siguiente:
export KUBECONFIG=ORG_ADMIN_CLUSTER_KUBECONFIGReemplaza ORG_ADMIN_CLUSTER_KUBECONFIG por la ruta de acceso al archivo kubeconfig del clúster de administrador de la organización, como
/tmp/${ORG}-admin-kubeconfig.Para una organización de la versión 2, ejecuta lo siguiente:
export KUBECONFIG=ORG_INFRA_CLUSTER_KUBECONFIGReemplaza 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.
Verifica que exista un IdP en el
ClientConfigde la organización:kubectl get ClientConfig default -n kube-public -o yaml
En la versión 1.14.3, debes aplicar manualmente el rol
global-zone-viewerpara permitir que todos los usuarios autenticados vean las zonas en un universo con 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 EOFReemplaza
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 Cómo generar manualmente el archivo kubeconfig.
1.9. Conecta el proveedor de identidad del cliente a la organización
Para conectar un proveedor de identidad (IdP) del cliente a la organización y acceder a ella con sus identidades, completa los siguientes pasos:
Accede desde la CLI con la cuenta de administrador de IO inicial establecida 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.Pídele al cliente que agregue la siguiente URL de devolución de llamada global de la AIS a la lista de entidades permitidas en el cliente de OIDC o SAML que creó 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 devolución de llamada global de la AIS eshttps://ais-core.operations.google.gdch.test/finish-login.Si usas un cliente de SAML, también debes agregar la siguiente URL de devolución de llamada de SAML global de AIS a la lista de entidades permitidas:
https://ais-core.ORG_NAME.GDC_URL/saml-callbackPídele al cliente que agregue la siguiente URL de devolución de llamada de la AIS a la lista de entidades permitidas en el cliente de OIDC o SAML que creó para cada zona. Por ejemplo, para un universo de tres zonas, las URLs de devolución de llamada de la 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 devolución de llamada de AIS eshttps://ais-core.operations.zone-1.google.gdch.test/finish-login.Si usas un cliente de SAML, también debes agregar las siguientes URLs de devolución de llamada de SAML de la AIS a la lista de entidades permitidas para 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-callbackConfigura el archivo kubeconfig del clúster de administrador según la arquitectura de tu organización. Si ya configuraste tu variable kubeconfig, omite este paso.
Para una organización de la versión 1, ejecuta lo siguiente:
export KUBECONFIG=ORG_ADMIN_CLUSTER_KUBECONFIGReemplaza ORG_ADMIN_CLUSTER_KUBECONFIG por la ruta de acceso al archivo kubeconfig del clúster de administrador de la organización, como
/tmp/${ORG}-admin-kubeconfig.Para una organización de la versión 2, ejecuta lo siguiente:
export KUBECONFIG=MANAGEMENT_API_SERVER_KUBECONFIGReemplaza MANAGEMENT_API_SERVER_KUBECONFIG por la ruta de acceso al kubeconfig del servidor de la API de Management, como
/tmp/${ORG}-management-kubeconfig.
En el ticket de solicitud del cliente para una organización nueva, decide si el IdP usa OIDC o SAML. Sigue la guía que se asigna al tipo de IdP determinado:
Configuración con OIDC
Crea un archivo
identity-provider-config.yamly complétalo consultando los tickets de creación de la organización para obtener los valores del IdP de la cuenta del PA: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 incluyen las descripciones detalladas de los campos:
Atributo Tipo de atributo Descripción certificateAuthorityDataObligatorio Un certificado de autoridad certificadora con formato PEM y codificado en base64 estándar para el proveedor de OIDC. clientIDObligatorio Es el ID de la aplicación cliente que realiza solicitudes de autenticación al proveedor de OpenID. clientSecretObligatorio Es el secreto compartido entre la aplicación cliente de OIDC y el proveedor de OIDC. extraParamsOpcional Una lista separada por comas de pares clave-valor que se codifican como consulta y se envían con la solicitud del extremo de autenticación. groupPrefixOpcional Es el prefijo que se antepone al reclamo de grupos para evitar conflictos con los grupos existentes. Por lo general, se usa cuando se configuran varios proveedores de identidad.
Debes incluir el prefijo de grupo antes de todos los nombres de grupos. Por ejemplo, si tienesmyprefix-como prefijo de grupo y un grupo llamadogroupAen tu proveedor de identidad, cuando agregues una política o una vinculación, debes vincularmyprefix-groupA. El nombre del grupo se establece en el campogroupsClaim.groupsClaimOpcional Es el nombre de la reclamación en el token de ID de OIDC que contiene la información de los grupos del usuario. Este nombre debe ser el mismo que el de la reclamación que contiene información sobre la membresía de grupo en tu proveedor de OIDC. issuerURIObligatorio Es 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 Es una lista de identificadores separados por comas para especificar qué privilegios de acceso se solicitan, además del permiso openid.userClaimObligatorio Nombre de la reclamación en el token de ID de OIDC que contiene el nombre de usuario. Por ejemplo, si la reclamación del usuario es email, los usuarios se identifican por el campo de usuario en el token de OIDC.
Si esto falta en el token de ID, la autenticación fallará.userPrefixOpcional Es el prefijo que se antepone a las reclamaciones de usuario para evitar conflictos con los nombres de usuario existentes. Por lo general, se usa cuando se configuran varios proveedores de identidad.
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 usa para distinguir entre diferentes proveedores de identidad.
Se recomienda insertar un separador al final del prefijo, como se describió anteriormente en esta tabla para establecergroupPrefix.Opcional: Si tu proveedor de identidad usa atributos personalizados, primero configura los atributos en tu IdP. Luego, agrega los pares clave-valor correspondientes en la sección
oidcdel archivoidentity-provider-config.yamlpara incluir declaraciones adicionales sobre los usuarios o grupos, como su departamento o cumpleaños. Cuando aplicas los cambios a la configuración del proveedor de identidad, GKE Identity Service reconoce los atributos personalizados. A continuación, se muestra un ejemplo de atributos personalizados:"attributeMapping": { "attribute.birthday": "assertion.birthday", "attribute.department": "assertion.department" }Configura el proveedor de identidad:
kubectl apply -f identity-provider-config.yamlEspera a que se vuelvan a configurar los diversos componentes del sistema.
Para verificar la configuración, abre la consola de la IU del administrador de la plataforma en un navegador web. En la página de redireccionamiento, selecciona Log in with pa-idp-oidc. Si se te redirecciona a la instancia del IdP de la cuenta de PA y, luego, se te redirecciona a la página de la consola de la IU del administrador de la plataforma después de acceder con la instancia del IdP de la cuenta de PA, la configuración se realizó correctamente. De lo contrario, verifica los valores en
identity-provider-config.yamly vuelve a aplicar el paso anterior.
Configuración con SAML
Crea un archivo
identity-provider-config.yamly complétalo consultando los tickets de creación de la organización para obtener los valores del IdP de la cuenta de la PA: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 incluyen las descripciones detalladas de los campos:
.Atributo Tipo de atributo Descripción idpCertificateDataListObligatorio Son los certificados del IdP que se usan para verificar la respuesta de SAML. Estos certificados deben estar codificados en base64 estándar y tener el formato PEM. Solo se admite un máximo de dos certificados para facilitar la rotación de certificados del IdP. idpEntityIDObligatorio El ID de la entidad SAML para el proveedor de SAML, especificado en un formato de URI. Por ejemplo, https://www.idp.com/saml. idpSingleSignOnURIObligatorio Es el URI del extremo de SSO del proveedor de SAML. Por ejemplo, `https://www.idp.com/saml/sso`. groupPrefixOpcional Es el prefijo opcional que se antepone a cada nombre de grupo. userPrefixOpcional Es el prefijo opcional que se antepone al nombre de usuario. userAttributeOpcional Nombre del atributo en la respuesta de SAML que contiene el nombre de usuario. Si falta este atributo en la respuesta de SAML, falla la autenticación. groupsAttributeOpcional Nombre del atributo en la respuesta de SAML que contiene los grupos del usuario. Opcional: Si tu proveedor de identidad usa atributos personalizados, primero configura los atributos en tu IdP. Luego, agrega los pares clave-valor correspondientes en la sección
samldel archivoidentity-provider-config.yamlpara incluir declaraciones adicionales sobre los usuarios o grupos, como su departamento o cumpleaños. Cuando aplicas los cambios a la configuración del proveedor de identidad, GKE Identity Service reconoce los atributos personalizados. A continuación, se muestra un ejemplo de atributos personalizados:"attributeMapping": { "attribute.birthday": "assertion.birthday", "attribute.department": "assertion.department" }Configura el parche de configuración del proveedor de identidad:
kubectl apply -f identity-provider-config.yamlEspera a que se vuelvan a configurar los diversos componentes del sistema.
Para verificar la configuración, abre la consola de la IU del administrador de la plataforma en un navegador web. Selecciona Log in with pa-idp-oidc en la página de redireccionamiento. Si se te redirecciona a la instancia del IdP de la cuenta de PA y, luego, se te redirecciona a la página de la consola de la IU del administrador de la plataforma después de acceder con la instancia del IdP de la cuenta de PA, la configuración se realizó correctamente. De lo contrario, verifica los valores en
identity-provider-config.yamly vuelve a aplicar el paso anterior.
Prefijo de usuario y grupo
Los prefijos de usuario y grupo se deben establecer para cada IdP en Distributed Cloud para evitar conflictos de nombres entre las cuentas de diferentes IdPs. El prefijo se usa con el nombre del usuario y del grupo para concatenar el nombre del sujeto en las vinculaciones de roles del clúster. Por ejemplo, para un usuario con el nombre jack@example.com y el prefijo de usuario del IdP es example-org-idp-, el nombre del sujeto en el clúster sería example-org-idp-jack@example.com.
Para decidir el valor del prefijo, haz lo siguiente:
- Incluye el nivel de la jerarquía (raíz, organización, proyecto).
- Incluye el nombre del IdP (adfs, keycloak).
- Se recomienda agregar un carácter separador, como
-, como sufijo, ya que no se agrega ningún separador entre el prefijo y el nombre de usuario.
Asigna un administrador inicial
Para otorgarle acceso inicial a la organización, se le debe asignar el rol de administrador de la organización. Para asignar la PA 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 Establece la conectividad de red para 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 esté operativa, debes conectarla a una o más redes externas con el servicio de Interconnect.
Este proceso implica configurar un conjunto de recursos personalizados que definen la conexión lógica. A continuación, se describen dos situaciones comunes para proporcionar conectividad a una organización nueva.
Caso 1: Cómo adjuntar una organización a una interconexión compartida existente
Si tienes una interconexión existente para una red compartida, solo debes 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 archivo YAMLAttachmentGroupy agrega la nueva organización a la listaspec.entities. En el caso de una organización de la versión 2, debes especificar la reddomainType(OrgAdmin,OrgDataoOrgMixed) a la que deseas conectarte.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
RoutePolicy: UnRoutePolicydefine qué prefijos de IP se anuncian. Edita la política y agrega las subredes de IP externas de la organización nueva aspec.out.ipPrefixList. Esto permite que el tráfico entrante llegue 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 applyen tu proceso de infraestructura como código (IaC).
Situación 2: Cómo crear una interconexión dedicada nueva
En el caso de 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 elemento
InterconnectLinkpara cada conexión física nueva. - Crea un
InterconnectGrouppara agrupar los vínculos físicos y permitir la nueva organización. - Crea un
AttachmentGroupy especifica la organización nueva en la listaentities. - Crea un objeto
RoutePolicyque permita los prefijos de IP entrantes y salientes para esta conexión dedicada. - Crea uno o más recursos
InterconnectAttachmentpara definir las VLAN 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 Configura 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 Configura la hoja de precios de facturación para la organización
El subcomponente de facturación de una organización requiere que los productos o servicios que se facturarán se configuren con el recurso personalizado SKUDescription. Un solo SKUDescription describe un producto o servicio único que se facturará junto con su precio. Por lo tanto, una colección de objetos SKUDescription se puede considerar la hoja de precios de una organización. En los siguientes pasos, se configura la hoja de precios para la organización en IAC.
1.12.1 Obtén la hoja de precios
Si aún no tienes los recursos de la hoja de precios SKUDescription para una organización, comunícate con la Oficina de Administración de Programas (PMO) para obtener la hoja de precios. La hoja de precios debe ser una serie de archivos YAML que contengan recursos SKUDescription.
1.12.2 Determina si la hoja de precios se comparte o no
La hoja de precios se puede compartir con todas las organizaciones o se puede configurar para cada organización. La PMO puede informarte si la hoja de precios se comparte o no.
1.12.2.1 Hoja de precios compartida
Si se comparte la hoja de precios, colócala en la carpeta compartida de common-data de la IAC.
Si esta organización no es la primera que se crea, es posible que la hoja de precios ya exista en la carpeta compartida
common-data. Si existe, verifica que se hayan seguido los pasos del 2 al 4 y continúa con el paso 5.Crea la carpeta compartida para la hoja de precios.
mkdir -p IAC_REPO_PATH/iac/infrastructure/common-data/bil/skudescriptions/Reemplaza IAC_REPO_PATH por la ruta de acceso al repositorio de IAC.
Guarda los recursos YAML de la hoja de precios
SKUDescriptionen esta carpeta. Luego, la carpetaskudescriptionsdebe contener archivos YAML separados por área. Configura la estructura de carpetas y los archivos YAML para que se alineen con tu caso de uso de facturación:Facturación operada por el socio: Google le cobra al socio. Coloca los recursos de
SKUDescriptionen el espacio de nombrespartner-billing-system.Facturación del cliente: El socio cobra al usuario final. Coloca los recursos de
SKUDescriptionen el espacio de nombresbilling-system.
En los siguientes ejemplos, se muestran las estructuras de archivos de los modelos de facturación para clientes y para socios. Para cada modelo, verás dos servicios, procesamiento y almacenamiento, con dos archivos YAML para cada servicio:
Facturación del cliente:
├── customer ├── compute │ ├── compute-sku1.yaml │ └── compute-sku2.yaml └── storage ├── storage-sku1.yaml └── storage-sku2.yamlFacturación operada por el socio:
├── partner ├── compute │ ├── partner-compute-sku1.yaml │ └── partner-compute-sku2.yaml └── storage ├── partner-storage-sku1.yaml └── partner-storage-sku2.yamlVerifica 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:Para una organización de la versión 1, ejecuta lo siguiente:
export ORG_CLUSTER=ORG_ADMIN_CLUSTER_NAMEPara una organización de la versión 2, ejecuta lo siguiente:
export ORG_CLUSTER=ORG_INFRA_CLUSTER_NAME
Crea el directorio de facturación
skudescriptionsen la organización:Para una organización de la versión 1, haz lo siguiente:
mkdir -p IAC_REPO_PATH/iac/infrastructure/zonal/zones/ZONE_NAME/ORG_CLUSTER_NAME/bil/skudescriptionsPara una organización de la versión 2, haz lo siguiente:
mkdir -p IAC_REPO_PATH/iac/infrastructure/zonal/zones/ZONE_NAME/ORG_CLUSTER_NAME-management/bil/skudescriptions
Reemplaza ORG_CLUSTER_NAME por el nombre del clúster de administrador de la organización, según el tipo de versión de tu organización.
Incluye la hoja de precios común en la organización:
Para una organización de la versión 1, haz lo siguiente:
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 EOFPara una organización de la versión 2, haz lo siguiente:
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
Agrega 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 la revisión de código y la combinación.
Verifica que los objetos
SKUDescriptionexistan en el clúster determinado para tu modelo de facturación correspondiente.Exporta el valor de
KUBECONFIGsegún el tipo de organización.Para una organización de la versión 1, ejecuta lo siguiente:
export KUBECONFIG=ORG_ADMIN_CLUSTER_KUBECONFIGReemplaza ORG_ADMIN_CLUSTER_KUBECONFIG por la ruta de acceso al archivo kubeconfig del clúster de administrador de la organización, como
/tmp/${ORG}-admin-kubeconfig.Para una organización de la versión 2, ejecuta lo siguiente:
export KUBECONFIG=MANAGEMENT_API_SERVER_KUBECONFIGReemplaza MANAGEMENT_API_SERVER_KUBECONFIG por la ruta de acceso al kubeconfig del servidor de la API de Management, como
/tmp/${ORG}-management-kubeconfig.
Ejecuta la CLI de
kubectl:Para la facturación del cliente:
kubectl get SKUDescription -n billing-systemPara la facturación de socios:
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 para una organización, debes 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:Para una organización de la versión 1, haz lo siguiente:
mkdir -p IAC_REPO_PATH/iac/infrastructure/zonal/zones/ZONE_NAME/ORG_CLUSTER_NAME/bil/skudescriptionsPara una organización de la versión 2, haz lo siguiente:
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. Luego, la carpetaskudescriptionsdebe tener archivos YAML separados por área. En el siguiente ejemplo, 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úrate de que haya un archivo
kustomization.yamlen el directorio que incluya todos los archivos YAML de la hoja de preciosSKUDescription.Para una organización de la versión 1, haz lo siguiente:
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 */*.yamlPara una organización de la versión 2, haz lo siguiente:
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.yamlen la raíz de la organización tenga la carpetabil/skudescriptionsagregada recientemente. VerificaIAC_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/skudescriptionsAgrega y confirma el archivo YAML y los archivos de Kustomize:
cd IAC_REPO_PATH git add "iac" git commitEnvía la actualización a GitLab:
git -c http.sslVerify=false pushEspera la revisión de código y la combinación.
Verifica que los objetos
SKUDescriptionexistan en el clúster determinado:Para una organización de la versión 1, ejecuta lo siguiente:
export KUBECONFIG=ORG_ADMIN_CLUSTER_KUBECONFIG kubectl get SKUDescription -n billing-systemReemplaza ORG_ADMIN_CLUSTER_KUBECONFIG por la ruta de acceso al archivo kubeconfig del clúster de administrador de la organización, como
/tmp/${ORG}-admin-kubeconfig.Para una organización de la versión 2, ejecuta lo siguiente:
export KUBECONFIG=MANAGEMENT_API_SERVER_KUBECONFIG kubectl get SKUDescription -n billing-systemReemplaza MANAGEMENT_API_SERVER_KUBECONFIG por la ruta de acceso al kubeconfig del servidor de la API de Management, como
/tmp/${ORG}-management-kubeconfig. .
1.13 Crea usos recurrentes de facturación
Distributed Cloud ofrece unidades de mantenimiento de inventario (SKU) que generan cargos recurrentes. Sin embargo, Distributed Cloud no realiza un seguimiento de los costos de uso de ciertos SKU. Para administrar esa información, usa el recurso RecurringUsage. Para obtener detalles e instrucciones sobre cómo crear usos recurrentes, consulta Crea usos recurrentes.
1.14 Configura la facturación para una organización
El subcomponente de facturación no comienza a calcular el costo 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 un valor predeterminado de 9999-01-01T00:00:00-07:00. Por lo tanto, después de que se considera que una organización está lista, el IO anula la hora de inicio de la facturación para comenzar el flujo de trabajo de facturación.
1.14.1 Obtén la hora de inicio de la facturación
La hora de inicio de la facturación debe ser al comienzo del período de ejecución, que está disponible en tu contrato. Si aún no tienes la fecha de inicio de la facturación de una organización, comunícate con la Oficina de Administración de Programas (PMO) para obtener la información.
1.14.2 Asocia una cuenta de pago 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 costos 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 costos asociados al recurso.
Para cobrarle al cliente el uso del servicio, todas las cuentas de facturación de una organización usan una sola hoja de precios.
1.14.2.1 Antes de comenzar
Antes de continuar, pídele a tu administrador de seguridad que te otorgue los siguientes roles obligatorios. Estos roles se vinculan al espacio de nombres del proyecto para la facturación a nivel del proyecto o al espacio de nombres de la plataforma para la facturación a nivel de la organización:
Administrador de la cuenta de facturación de la organización: Crea, administra y vincula el recurso
BillingAccount. Pídele a tu administrador de seguridad que te otorgue el rol deorganization-billing-account-admin.Usuario de la cuenta de facturación de la organización: Puede leer, enumerar y vincular el recurso
BillingAccount. Pídele a tu administrador de seguridad que te otorgue el rol deorganization-billing-account-user.Administrador de cuentas de facturación de la organización: Puede leer, enumerar, crear y actualizar el recurso
BillingAccountBinding. Pídele a tu administrador de seguridad que te otorgue el rol deorganization-billing-manager.
1.14.2.2 Crea una cuenta de facturación nueva
Una cuenta de facturación se identifica de forma única por su name y namespace. Para crear una cuenta de facturación, usa un recurso personalizado para establecer name y namespace:
Crea un archivo YAML y agrega 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"Reemplaza las siguientes variables:
- BIL_ACCOUNT_NAME: Es el nombre de la cuenta de facturación. Por ejemplo:
test-billing-account. - BIL_DISPLAY_NAME: Es el nombre visible de la cuenta de facturación. Por ejemplo:
"Test Billing Account".
- BIL_ACCOUNT_NAME: Es el nombre de la cuenta de facturación. Por ejemplo:
Verifica el tipo de configuración de pagos. Las cuentas de facturación de Distributed Cloud deben tener una de las siguientes configuraciones de pago:
cloudBillingConfig: Es la configuración de pago predeterminada. Esta configuración almacena un ID de cuenta de Facturación de Cloud.customConfig: Es una configuración personalizada para que los socios almacenen su configuración de pagos y facturen 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 YAML de
BillingAccountpara diferentes configuraciones de pago:cloudBillingConfigspec: paymentSystemConfig: cloudBillingConfig: accountID: CLOUD_BILLING_ACCOUNT_IDReemplaza
CLOUD_BILLING_ACCOUNT_IDpor el ID de tu cuenta de facturación deGoogle Cloud .customConfigspec: paymentSystemConfig: customConfig: "payment-config-type": PAYMENT_CONFIG_TYPEReemplaza
PAYMENT_CONFIG_TYPEpor el tipo de configuración de pagos que elegiste para tu configuración de facturación personalizada.Si no tienes la información de configuración de
customConfigde tu organización, ingresa los siguientes detalles:spec: paymentSystemConfig: customConfig: "payment-config-type": "N/A"En el siguiente archivo YAML, se muestra un recurso
BillingAccountcompleto con la configuracióncloudBillingConfig: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 para la organización o el proyecto específicos que deseas facturar:kubectl --kubeconfig $ORG_KUBECONFIG apply -f billingaccount.yaml
1.14.2.3 Vincula una organización a una cuenta de facturación
Para vincular una organización a un BillingAccount, haz lo siguiente:
Agrega el siguiente contenido al archivo YAML
billingaccountbinding.yaml:- En la sección
billingAccountRef, completa el camponamecon el contenido del camponameen elBillingAccountque deseas vincular. - En la sección
metadata, completa el camponamespacecon el contenido del campo idéntico en el 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 comenzar
Antes de continuar, pídele a tu administrador de seguridad que te otorgue el rol de 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 Anula la hora de inicio de la facturación
Crea dos archivos YAML con las siguientes rutas de acceso:
infrastructure/zonal/zones/ZONE_NAME/root-admin/components/bil/ORG_NAME/bil-monetizer-override.yamlinfrastructure/zonal/zones/ZONE_NAME/root-admin/components/bil/ORG_NAME/bil-invoice-override.yaml- Crea los subdirectorios necesarios para cada archivo si faltan.
Agrega el recurso
SubcomponentOverridey el siguiente contenido a cada archivo:Para la facturación del cliente:
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 operada por el socio:
Agrega 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
Reemplaza las siguientes variables:
ORG_NAME: Es el nombre de la organización. Por ejemplo:
org-1.BILLING_START_TIME: Es la 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 comienza el 1/1/2024 con la zona horaria del horario estándar del Pacífico de EE.UU. y Canadá (UTC-8), agrega el valor de la marca de tiempo como
2024-01-01T00:00:00-08:00.BILLING_TIMEZONE: Es 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), agrega 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 hayas anulado la hora de inicio de la facturación para el 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 Configura la política de red del proxy de almacenamiento de objetos en el clúster de administrador de la organización
1.15.1 Crea 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. Crea un sitio de copia de seguridad
Si aprovechas la asistencia para la recuperación ante desastres, debes completar los pasos anteriores nuevamente para el sitio de copia de seguridad. Si no tienes habilitada la recuperación ante desastres, omite esta sección.
- Sigue las instrucciones de la sección 1.4. - 1.9. Crear otra organización para el sitio de copia de seguridad
1.17. Soluciona 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, verifica 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. Confirma todos los recursos implementados en el clúster de administrador raíz
Completa los siguientes pasos para confirmar que todos los recursos del clúster de administrador raíz estén en buen estado y presentes:
Sigue IAM-R0004 para obtener la configuración de kubeconfig requerida para el clúster de administrador raíz. Asegúrate de configurar las siguientes variables de entorno y el alias para estas instrucciones de verificación:
export KUBECONFIG=ROOT_ADMIN_KUBECONFIG export ORG="ORG_NAME" alias k=kubectlConfirma que los recursos de firewall estén disponibles:
Establece una conexión SSH con el firewall y confirma que se creó un nuevo
vsys:show config running | match 'vsys[0-9] 'El resultado es similar a este:
vsys1 { vsys2 {Verifica el recurso
FirewallVirtualSystem:k get firewallvirtualsystem -n gpc-systemEl resultado es similar a este:
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:
Verifica el recurso
StorageVirtualMachine:k get StorageVirtualMachine -n gpc-systemEl resultado es similar a este:
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 del HSM estén disponibles:
Verifica los HSM:
k get hsms -n gpc-systemEl resultado es similar a este:
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 ReconcileHSMSuccessVerifica el clúster del HSM:
k get hsmcluster -n gpc-systemEl resultado es similar a este:
NAMESPACE NAME AGE READY REASON gpc-system hsmcluster 38h True ReconcileHSMClusterSuccessVerifica el usuario del HSM:
k get hsmtenant -AEl resultado es similar a este:
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 el nodo estén disponibles:
Verifica los recursos
AddressPoolClaim:k get addresspoolclaims -AEl resultado es similar a este:
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 5d23hVerifica los recursos
NodePoolClaim:k get nodepoolclaims -AEl resultado es similar a este:
NAMESPACE NAME AGE operations admin-control-plane-node-pool 5d23h root root-admin-control-plane 13dVerifica los recursos
NodePool:k get nodepool -AEl resultado es similar a este:
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 0Verifica los clústeres de equipos físicos:
k get baremetalclusters -AEl resultado es similar a este:
NAMESPACE NAME CLUSTER READY operations operations-admin operations-admin true root root-admin root-admin trueVerifica las máquinas Bare Metal:
k get baremetalmachines -AEl resultado es similar a este:
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.4Verifica los servidores. Se encuentran en estado
provisioned:k get servers -n gpc-system | grep provisionedEl resultado es similar a este:
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 trueVerifica el clúster de Kubernetes:
k get cluster -AEl resultado es similar a este:
NAMESPACE NAME AGE operations operations-admin 5d23h root root-admin 13dVerifica los Secrets del archivo kubeconfig:
k get secrets -A | grep kubeconfigEl resultado es similar a este:
operations operations-admin-kubeconfig Opaque 1 5d22h root root-admin-kubeconfig Opaque 1 13d
1.17.3. Confirma todos los recursos implementados en los clústeres de la organización de la versión 1
Completa los siguientes pasos para confirmar que todos los recursos del clúster de administrador de la organización y del clúster del sistema en una organización de la versión 1 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. Confirma todos los recursos implementados en un clúster de administrador de la organización
Sigue IAM-R0004 para obtener la configuración de kubeconfig requerida para el clúster de administrador raíz. Asegúrate de configurar las siguientes variables de entorno y el 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 el nodo estén disponibles:
Verifica los clústeres de equipos físicos:
ka get baremetalclusters -AEl resultado es similar a este:
NAMESPACE NAME CLUSTER READY operations-system-cluster operations-system operations-system trueVerifica las máquinas Bare Metal:
ka get baremetalmachines -AEl resultado es similar a este:
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.232Verifica las máquinas:
ka get machines -AEl resultado es similar a este:
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-poolVerifica los recursos
VirtualmachinesInstance:ka get virtualmachineinstances -AEl resultado es similar a este:
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 TrueVerifica los recursos
NodePool:ka get nodepools -AEl resultado es similar a este:
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 0Verifica los clústeres de Kubernetes:
ka get clusters -AEl resultado es similar a este:
NAMESPACE NAME AGE operations-system-cluster operations-system 5d20hVerifica los nodos:
ka get nodes -AEl resultado es similar a este:
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.1505Verifica los Secrets del archivo kubeconfig:
ka get secret -n ${ORG}-system-cluster ${ORG}-system-kubeconfigEl resultado es similar a este:
NAME TYPE DATA AGE operations-system-kubeconfig Opaque 1 5d20h
1.17.3.2. Confirma todos los recursos implementados en el clúster de usuario del sistema
Completa los siguientes pasos para confirmar que todos los recursos del clúster del sistema estén en buen estado y presentes:
Sigue IAM-R0004 para obtener la configuración de kubeconfig requerida para el clúster de administrador raíz. Asegúrate de configurar las siguientes variables de entorno y el 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 el nodo estén disponibles:
Verifica el recurso
VirtualmachineInstance:ku get vmi -AEl resultado es similar al siguiente (si se creó un clúster de usuario):
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 TrueVerifica los nodos:
ku get nodesEl resultado es similar a este:
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.1505Verifica las asignaciones de GPU:
ku get gpuallocations -AEl resultado es similar a este:
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. Confirma todos los recursos implementados en los clústeres de la organización de la versión 2
Completa los siguientes pasos para confirmar que todos los recursos del clúster de infraestructura de la organización en 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.
Sigue IAM-R0004 para obtener la configuración de kubeconfig requerida para el clúster de administrador raíz. Asegúrate de configurar las siguientes variables de entorno y el 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:
Verifica los nodos:
ka get nodes -AEl resultado es similar a este:
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.1505Verifica los Secrets del archivo kubeconfig:
ka get secret -n management-kube-system kube-admin-remote-kubeconfigEl resultado es similar a este:
NAME TYPE DATA AGE kube-admin-remote-kubeconfig Opaque 1 5d20h
Si corresponde, verifica las asignaciones de GPU para confirmar que los recursos de GPU estén listos:
ka get gpuallocations -AEl resultado es similar a este:
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. Confirma que todos los recursos de la organización se hayan conciliado
Completa los siguientes pasos para confirmar que todos los recursos relacionados con la organización en el clúster raíz de administrador global y zonal estén en buen estado y presentes, suponiendo que el objetivo es crear una organización operations con dos zonas: zone-1 y zone-2.
Sigue los pasos que se indican en Accede a la API de administrador raíz global para acceder al servidor de la API global y usa el siguiente alias para la API de administrador raíz global de kubectl.
alias kga='kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG export ORG="ORG_NAME"Confirma que los recursos de organización globales estén disponibles:
Verifica los recursos
Organizationglobales:kga get organization -AEl resultado es similar a este:
NAMESPACE NAME READY gpc-system operations gpc-system rootVerifica los recursos
OrganizationReplicaglobales:kga get organizationreplica -AEl resultado es similar a este:
NAMESPACE NAME AGE gpc-system operations-zone1 3d16h gpc-system operations-zone2 3d16h gpc-system root-zone1 3d17h gpc-system root-zone2 3d16hVerifica los recursos
OrganizationZonalConfigglobales:kga get organizationzonalconfig -AEl resultado es similar a este:
NAMESPACE NAME AGE gpc-system operations-zone1-config 3d16h gpc-system operations-zone2-config 3d16hVerifica los recursos
OrganizationZonalConfigReplicaglobales:kga get organizationzonalconfigreplica -AEl resultado es similar a este:
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
Establece 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:
Verifica los recursos
Organization:ka get organization -AEl resultado es similar a este:
NAMESPACE NAME READY gpc-system operations True gpc-system root TrueVerifica los recursos
OrganizationReplica:ka get organizationreplica -AEl resultado es similar a este:
NAMESPACE NAME AGE gpc-system operations 3d16h gpc-system root 3d17hVerifica los recursos
OrganizationZonalConfigReplica:ka get organizationzonalconfigreplica -AEl resultado es similar a este:
NAMESPACE NAME AGE gpc-system operations-zone1-config 3d16h gpc-system operations-zone2-config 3d16h
Sigue los pasos en Permite 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 al sitio de copia de seguridad.