Tempo estimado para a conclusão: 60 minutos
Proprietário do componente operacional: IACPerfil de habilidade: engenheiro de implantação
A Infraestrutura como código (IaC) no Google Distributed Cloud (GDC) com isolamento físico consiste em dois sistemas:
O Config Sync é um componente usado na infraestrutura como código (IaC) do Distributed Cloud para gerenciar recursos no nível do cluster e serviços compartilhados.
O GitLab hospeda um repositório Git que serve como fonte da verdade (SoT, na sigla em inglês) para o Config Sync. Um cluster de destino é um cluster que o Config Sync gerencia da SoT no repositório.
- O GitLab inclui um sistema de revisão de código para implementar a aprovação de várias partes (MPA, na sigla em inglês) em mudanças de política e configuração.
Os dois tipos de zonas a seguir estão envolvidos em uma implantação:
- Zona de ancoragem: a zona que já faz parte do plano de controle global. A primeira zona é a zona de ancoragem de uma implantação.
- Zona de junção: a zona que está entrando no plano de controle global.
O Config Sync gerencia objetos do Kubernetes nos clusters root-admin e
organization-admin. Ele está configurado para ler do repositório de IaC do Distributed Cloud fornecido pelo GitLab no cluster root-admin principal.
O Distributed Cloud instala a IaC durante a inicialização. Execute as etapas manuais a seguir para concluir a configuração da IaC.
23.1. Configurar a primeira IaC de zona
Esta seção inclui etapas para configurar a IaC na primeira zona de implantação.
23.2. Pré-requisitos
- Inicializou o cluster de administrador raiz.
- Crie um cliente SAML na instância do Active Directory Federation Services (ADFS) da OC IT como o cliente de federação de identidade no GitLab.
23.3. Acesso ao GitLab no dia 0
Abra o console da Web do GitLab em
https://iac.GDC_URL.GDC_URLé o domínio especificado na CIQ.# Use the root kubeconfig of the root admin cluster. export ANCHOR_KUBECONFIG=ANCHOR_ZONE_KUBECONFIG echo https://$(kubectl --kubeconfig $ANCHOR_KUBECONFIG get dnsregistrations \ -n gitlab-system iac -o jsonpath='{.status.fqdn}')Use o nome de usuário do dia 0:
ioadmin.Execute o comando a seguir para receber a senha:
export IO_ADMIN_PWD=$(kubectl --kubeconfig $ANCHOR_KUBECONFIG \ get secret gitlab-basic-users -n gitlab-system \ -o jsonpath='{.data.admin}' | base64 -d)Faça login e acesse Menu > Projetos > Explorar projetos gdch / iac para verificar se o repositório Git
iacfoi criado.
23.4. Criar usuários administradores
- Crie usuários administradores dedicados no ADFS. Não use esses cookies para fins não administrativos, e eles precisam ter uma extensão "-ga". Os usuários administradores iniciais PRECISAM usar o mesmo
emailaqui que usam nos Serviços de Federação do Active Directory (ADFS). Execute o comando a seguir para criar um novo usuário:
export NEW_USER_NAME=NEW_USER_NAME export NEW_USER_USERNAME=NEW_USERNAME export NEW_USER_PWD=NEW_USER_PWD export NEW_USER_EMAIL=NEW_USER_EMAIL export GDC_URL=GDC_URL export TOKEN=$(curl -X POST https://iac.$GDC_URL/oauth/token \ -d "grant_type=password&username=ioadmin&password=${IO_ADMIN_PWD}" \ | jq -r '.access_token') USERID=$(curl -X GET https://iac.$GDC_URL/api/v4/users \ -d access_token=${TOKEN} -d username=ioadmin |\ sed -E 's/.*"id":"?([^,"]*)"?.*/\1/') curl -X POST https://iac.$GDC_URL/api/v4/users \ -d username=${NEW_USER_USERNAME} -d password=${NEW_USER_PWD} -d name=${NEW_USER_NAME} \ -d email=${NEW_USER_EMAIL} -d admin=true -d access_token=${TOKEN} curl -X POST https://iac.$GDC_URL/oauth/revoke \ -d client_id=${USERID} -d "token=${TOKEN}"
23.5. Atualizar a licença do GitLab
Muitos recursos do GitLab exigem uma licença "Ultimate" para funcionar. Nesta etapa, você vai substituir a licença temporária enviada com o GDC pela licença do site. Ativar o GitLab EE com um arquivo de licença ou chave contém todos os detalhes.
A chave de licença do site que você recebeu é um arquivo de texto ASCII codificado em base64 com uma extensão .gitlab-license. Você vai usar essa chave para ativar o GitLab.
- Faça login no console da Web do GitLab como
ioadmin. - Na barra de navegação, selecione Menu e depois Administrador.
- No menu de navegação, selecione Configurações e depois Geral.
- Na área "Adicionar licença", faça upload do arquivo ou insira a chave.
- Marque a caixa de seleção dos Termos de Serviço.
- Selecione "Adicionar licença".
23.6. Configurar o repositório do GitLab
O ConfigSync gerencia objetos do Kubernetes no cluster root-admin e nos clusters org-admin e está configurado para ler do repositório de IaC do Distributed Cloud fornecido pelo GitLab no cluster root-admin.
Precisamos configurar as pastas iniciais do GitLab para que o Configsync consuma as configurações e as aplique ao cluster do Kubernetes necessário.
infrastructure
│ └── zonal
│ └── zones
│ ├── ${anchor_zone_name}
│ ├── root-admin
│ ├── kustomization.yaml
│ └── global
│ └── orgs
│ ├── root
│ ├── kustomization.yaml
Siga as etapas para criar a estrutura de arquivos inicial:
Abra o repositório
iacem "Menu -> Explorar projetos".Abra a "Web IDE".
Crie um arquivo em
/infrastructure/zonal/zones/${anchor_zone_name}/root-admin/kustomization.yamlcom o seguinte conteúdo:apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: root-admin-kustomizationClique no botão "Confirmar".
Selecione "Confirmar na ramificação principal" e confirme.
23.7. Configurar a aprovação de outra parte (MPA)
Use esta seção para configurar o sistema de modo que seja necessária a aprovação de todas as solicitações de mesclagem no repositório
iac e impedir commits diretos (sem criar uma solicitação de mesclagem) na
ramificação main para aplicar a aprovação por várias partes (MPA).
23.7.1. Ativar a aprovação de solicitação de mesclagem no GitLab
Navegue até o repositório
iac.Use o IDE da Web para criar um arquivo chamado
CODEOWNERSna pasta raiz e adicione o grupo do Distributed Cloud como proprietário do repositório como primeira etapa:[Repository Owners] * @gdchSomente os usuários adicionados ao arquivo
CODEOWNERSpodem aprovar solicitações de fusão no repositórioiac. Esse arquivo genérico é apenas para fins de configuração. Instruções mais detalhadas sobre permissões de aprovação refinadas estão em IAC-R0007.Clique no botão Confirmar.
Selecione Fazer commit na ramificação principal e confirme.
Para adicionar mais usuários ao arquivo
CODEOWNERS, crie uma solicitação de mesclagem para ser aprovada pelos usuários atuais emCODEOWNERS.
23.8. Conectar os Serviços de Federação do Active Directory (ADFS) ao GitLab
É possível conectar o ADFS ao GitLab com um cliente SAML usando o framework Auth do GitLab.
Se você estiver usando uma autoridade de certificação particular para seu provedor de identidade, adicione-a à instância do GitLab. Extraia a versão base64 do certificado da CA do ADFS e coloque-a em um secret.
cat <<EOF > adfs-ca-cert-secret.yaml
apiVersion: v1
data:
tls.crt: ADFS_CA_CERTIFICATE_BASE64
kind: Secret
metadata:
name: adfs-ca-cert-secret
namespace: gitlab-system
type: Opaque
EOF
kubectl apply -f adfs-ca-cert-secret.yaml
23.8.1. Configurar o ADFS para autenticação SAML
Antes de conectar o GitLab ao ADFS usando a configuração do Helm, o ADFS precisa criar um cliente SAML. Na sua instância do Windows, siga estas etapas:
Execute o app Gerenciamento do AD FS como administrador.
No diretório AD FS, clique na pasta Relying Party Trust. No painel Ações, clique em Adicionar confiança de terceiros confiáveis.

O Assistente para adicionar relação de confiança com terceira parte confiável é aberto. Na primeira etapa, selecione Claims aware e clique em Start.

Selecione Inserir dados sobre terceiros confiáveis manualmente e clique em Próxima.

Insira algumas informações reconhecíveis sobre a instância do ADFS nos campos Nome de exibição e Observações. Clique em Next.

Pule a etapa Configurar certificado clicando em Próxima.
Clique na caixa de seleção Ativar suporte para o protocolo WebSSO do SAML 2.0. No campo URL de serviço de SSO do SAML 2.0 de terceiros, digite o seguinte:
https://iac.GDC_URL/users/auth/saml/callback.Substitua GDC_URL pelo URL da organização no GDC.

Dê um nome para a IaC e adicione o seguinte:
https://iac.GDC_URL.sesame.street https://iac.GDC_URL.sesame.street/users/auth/saml/callbackClique em Próxima nas etapas Configurar identificadores, Escolher política de controle de acesso e Pronto para adicionar confiança para concluir o assistente.
# Replace GDC_URL with the cells URL, for example, bert.sesame.street https://iac.GDC_URL https://iac.GDC_URL/users/auth/saml/callbackA tela é atualizada com a relação de confiança com a parte confiável recém-criada. Clique com o botão direito do mouse no item e selecione Editar política de emissão de declarações.
Clique no botão Adicionar regra. Na etapa Escolher tipo de regra, selecione o Modelo de regra de declaração de Enviar atributos LDAP como declarações. Clique em Próxima.
Na etapa Configurar regra de declaração, preencha os seguintes parâmetros:
- No campo Nome da regra de declaração, insira
Email. - Na lista Armazenamento de atributos, selecione Active Directory.
- Na tabela Mapeamento de atributos LDAP para tipos de declaração de saída, na coluna Atributo LDAP, selecione ou digite
E-Mail-Addresses. Na coluna Tipo de reivindicação de saída da tabela, selecione ou digite
E-Mail Address.
Conclua o assistente.
- No campo Nome da regra de declaração, insira
Clique no botão Adicionar regra.
Clique com o botão direito do mouse no item e clique em Editar política de emissão de declaração novamente.
Na etapa Escolher tipo de regra, selecione o Modelo de regra de declaração de Transformar uma reivindicação recebida. Clique em Avançar.
Na etapa Configurar regra de declaração, preencha os seguintes parâmetros:
- No campo Nome da regra de declaração, insira
Transform email to nameid. - No campo Tipo de declaração de entrada, selecione ou digite
E-Mail Address. - No campo Tipo de reivindicação de saída, selecione ou digite
Name ID. - No campo Formato do ID do nome de saída, selecione ou digite
Persistent Identifier. Selecione a opção Passar por todos os valores de reivindicação.

Conclua o assistente.
- No campo Nome da regra de declaração, insira
23.8.2. Adicionar configuração SAML ao GitLab
Nesta seção, mostramos as etapas para adicionar a configuração do SAML ao GitLab.
23.8.2.1. Registrar o GitLab no provedor de identidade
Abra a configuração do cliente SAML no ADFS. O GitLab exige os seguintes valores para integração com seu IdP:
assertion_customer_service_url: o IdP redireciona para esse URL depois de autenticar o usuário. Defina como
https://iac.GDC_URL/users/auth/saml/callback.Substitua GDC_URL pelo URL da organização no GDC.
idp_cert_fingerprint: o GitLab usa essa impressão digital para verificar o certificado de uma mensagem SAML recebida. Para encontrar o
idp_cert_fingerprintno ADFS, siga estas etapas:Execute o app
AD FS Managementcomo administrador.Na árvore de diretórios AD FS > Serviço > Certificados, clique na pasta Certificados. Você vai encontrar um certificado na seção Token-signing. Clique com o botão direito do mouse no certificado e selecione Exibir certificado.
Na janela Certificado, acesse a guia
Details. Role a lista até encontrar um item chamadoThumbprint. Clique no item e copie o conteúdo exibido no console.
idp_sso_target_url: o GitLab vai segmentar esse endpoint ao autenticar por SAML. Para encontrar oidp_sso_target_urlno ADFS, siga estas etapas:Execute o app Gerenciamento do AD FS como administrador.
Clique na pasta Endpoints na árvore de diretórios AD FS > Service.
Endpoints.
Na tela central, procure uma linha com o tipo SAML 2.0/WS-Federation. O endpoint de destino é o URL do ADFS e o endpoint de destino. Por exemplo, se o nome de domínio da instância for
https://ocit.gdch.test/e o endpoint de destino for/adfs/ls, oidp_sso_target_urlseráhttps://ocit.gdch.test/adfs/ls.
issuer: o URL que o GitLab usa para se identificar. Usehttps://iac.GDC_URL.Prepare os valores de IdP anteriores e grave-os em uma configuração personalizada chamada
custom_saml.yaml. Edite esse arquivo YAML para receber a configuração necessária para seu cliente SAML.cat <<EOF > custom_saml.yaml name: saml label: "ADFS SAML" # This is the label the login button will use. args: assertion_consumer_service_url: "https://iac.GDC_URL/users/auth/saml/callback" idp_cert_fingerprint: "ADFS_IDP_CERT_FINGERPRINT" idp_sso_target_url: "ADFS_IDP_SSO_TARGET_URL" issuer: "https://iac.GDC_URL" # These parameters are necessary for ADFS to connect to GitLab. Do not change unless you are sure of what you're doing. name_identifier_format: "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" attribute_statements: { email: ['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress'] } EOFQuando estiver tudo pronto, aplique a configuração como um secret chamado
custom-gitlab-saml-provider.cat <<EOF > custom-gitlab-saml-provider.yaml apiVersion: v1 data: provider: | $(cat custom_saml.yaml | base64 -w 0) kind: Secret metadata: name: custom-gitlab-saml-provider namespace: gitlab-system annotations: "helm.sh/hook": post-install,post-upgrade "helm.sh/hook-weight": "-5" EOF kubectl apply -f custom-gitlab-saml-provider.yamlÉ possível usar o secret ao criar
subcomponentoverride.yaml. Saiba mais sobre variáveis na documentação do GitLab (em inglês).cat <<EOF > subcomponentoverride.yaml apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: iac-gitlab namespace: root spec: subComponentRef: "iac-gitlab" backend: operableParameters: omniauth: enabled: true providers: - secret: custom-gitlab-saml-provider certificates: customCAs: - secret: adfs-ca-cert-secret - configMap: trust-store-root-ext EOF kubectl apply -f subcomponentoverride.yaml
Isso cria a substituição do subcomponente. Para verificar se a configuração foi criada, execute:
sh
kubectl get subcomponentoverride -n root
O resultado será assim:
NAME AGE
iac-gitlab 1s
23.8.2.2. Inicializar o primeiro usuário SAML conectado
A ativação do SAML remove o login local. Os usuários precisam seguir os procedimentos de acesso de emergência para reativar o login local e recuperar o acesso ao ioadmin.
Os primeiros administradores inicializados criados em Criar usuários administradores vão funcionar sem mais modificações. Eles não podem ter acesso ao projeto. Para adicionar usuários ao projeto do Distributed Cloud, siga as etapas em Integrar um novo usuário do ADFS.
23.8.3. Verificar a conexão do ADFS
Verifique o status dos pods
webservicedo GitLab:kubectl --kubeconfig $KUBECONFIG get pod -l app=webservice,release=gitlab -n gitlab-systemNOME READY STATUS REINICIALIZAÇÕES IDADE gitlab-webservice-default-5d99b4d7c7-9fmln 2/2 Em execução 0 4m6s gitlab-webservice-default-5d99b4d7c7-w99p4 2/2 Em execução 0 96s gitlab-webservice-default-7884d4c8b9-qjhtv 2/2 Encerrando 0 18h Acesse
https://iac.GDC_URLe verifique se a tela exibida tem o botão SAML do ADFS para usar o login por SSO e não tem campos de nome de usuário e senha de login direto.Clique em SAML do ADFS. Verifique se você precisa fazer login no ADFS.
Depois de fazer login no ADFS, verifique se você também fez login no GitLab e se já pode interagir com o aplicativo.
23.9. Bloquear a conta de administrador do Dia 0
Depois que o SAML for ativado, desative a autenticação por senha na interface da Web e redefina a
senha de ioadmin, já que o acesso à API persiste.
Execute o script a seguir.
export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig export PWD=$(kubectl get secret gitlab-basic-users -n gitlab-system -o yaml \ | grep admin | head -n1 | awk '{print $2}' | xargs echo | base64 -d) export TOKEN=$(curl -X POST https://iac.GDC_URL/oauth/token \ -d "grant_type=password&username=ioadmin&password=${PWD}" \ | jq -r '.access_token') curl -X PUT https://iac.GDC_URL/api/v4/application/settings \ -d access_token=${TOKEN} \ -d password_authentication_enabled_for_web=false NEWPASS=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1) USERID=$(curl -X GET https://iac.GDC_URL/api/v4/users \ -d access_token=${TOKEN} -d username=ioadmin |\ jq -r '.[] | .id') curl -X PUT https://iac.GDC_URL/api/v4/users/${USERID} \ -d access_token=${TOKEN} -d username=ioadmin \ -d "password=${NEWPASS}" \ -d user_id=${USERID} curl -X POST https://iac.GDC_URL/oauth/revoke \ -d client_id=${USERID} -d "token=${TOKEN}"Armazene a nova senha no secret
gitlab-basic-users.kubectl patch secret gitlab-basic-users -n gitlab-system --type=json -p'[{"op": "replace", "path": "/data/admin", "value": '"$(echo $NEWPASS | base64 -w0)"'}]'
Use contas no OI ADFS para fazer login.
23.10. Configurar a IaC da zona de junção
Nesta seção, descrevemos as etapas para configurar a IaC na zona de junção da implantação.
23.11. Pré-requisitos
Antes de configurar a zona de junção, é necessário fazer o bootstrap do cluster de administrador raiz.
23.12. Configurar credencial do configsync
Siga estas etapas para configurar as credenciais do Config Sync:
Conecte-se ao cluster de administrador raiz da zona de ancoragem.
Recupere as credenciais do Config Sync:
kubectl --kubeconfig $ANCHOR_KUBECONFIG get secret -n config-management-system iac-creds-replica -o json |\ jq 'del(.metadata.creationTimestamp, .metadata.resourceVersion, .metadata.uid)' > iac-creds-replica.jsonCopie o arquivo
iac-creds-replica.json.Conecte-se ao cluster de administrador raiz da zona de junção.
Cole o arquivo
iac-creds-replica.json.Aplique as credenciais do Config Sync ao cluster de administrador raiz:
# Use the root kubeconfig of the root admin cluster. export JOINING_KUBECONFIG=JOINING_ZONE_KUBECONFIG kubectl --kubeconfig $JOINING_KUBECONFIG apply -f iac-creds-replica.jsonVerifique se a credencial do Config Sync está configurada:
kubectl --kubeconfig $JOINING_KUBECONFIG get secret -n config-management-system \ iac-creds-replica -o yaml
23.13. Configurar a fonte de verdade do Config Sync
Siga estas etapas para configurar a fonte da verdade do Config Sync:
Conecte-se ao cluster de administrador raiz da zona de ancoragem.
Encontre o FQDN do GitLab:
export primaryDnsFQDN=$(kubectl --kubeconfig $ANCHOR_KUBECONFIG get DNSRegistration \ -n gitlab-system iac -o jsonpath='{.status.fqdn}')Conecte-se ao cluster de administrador raiz da zona de junção.
Crie o arquivo
SubcomponentOverrideda IaC:echo "apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: iac namespace: root spec: subComponentRef: "iac-configsync" backend: operableParameters: primaryDnsFQDN: ${primaryDnsFQDN}" > iac-subcomponentoverride.yamlConfigure o destino do Config Sync:
kubectl --kubeconfig $JOINING_KUBECONFIG apply -f iac-subcomponentoverride.yamlVerifique se o repositório Git do Config Sync está configurado:
kubectl --kubeconfig $JOINING_KUBECONFIG get RootSync -n config-management-system \ root-sync -o jsonpath='{.spec.git.repo}'Verifique se o Config Sync não tem erros nas zonas de ancoragem e de junção.
kubectl --kubeconfig $JOINING_KUBECONFIG get RootSync \ -n config-management-system root-sync \ -o jsonpath='{.status.source.errors[0].errorMessage}'Se
root-synccontiver o erro KNV2004, o caminho do diretório usado pela âncora ou zona de junção não vai existir no repositórioiac. Encontre o diretório necessário executando:kubectl --kubeconfig $JOINING_KUBECONFIG get RootSync \ -n config-management-system root-sync -o jsonpath='{.spec.git.dir}'Crie o caminho gerado pelo comando anterior no repositório
iace adicione um arquivokustomization.yamlgenérico. Em seguida, faça a mesclagem com a ramificaçãomain.Execute novamente o comando
get RootSyncoriginal para garantir que o Config Sync não tenha erros.