Para usar o Terraform no ambiente do Google Distributed Cloud (GDC) com isolamento físico, é necessário fazer o download dele e configurá-lo para processar recursos do Kubernetes.
Antes de começar
Faça o download do Terraform 1.6.3 ou mais recente para sua estação de trabalho seguindo a documentação fornecida pela HashiCorp: https://developer.hashicorp.com/terraform/install. A configuração de back-end neste documento usa configurações que não são compatíveis com versões mais antigas do Terraform.
Verifique se você tem um bucket de armazenamento do GDC. Se você não tiver um bucket de armazenamento, crie um.
Verifique se o sistema reconhece o certificado da autoridade certificadora (CA) usado pelo repositório de objetos.
Gerenciar o arquivo de estado
O arquivo de estado no Terraform é usado para registrar o estado atual da implantação e mapeá-lo para a configuração do Terraform. Como o armazenamento de objetos do GDC é implementado usando o S3, é possível usar a API S3 do Terraform para sincronizar com um arquivo de estado compartilhado. Para fazer isso, configure o Terraform para sincronizar com o estado remoto:
Adicione a seguinte configuração a um arquivo do Terraform armazenado localmente, como o arquivo
main.tf:terraform { backend "s3" { bucket = "BUCKET_FQN" key = "TF_STATE_PATH" region = "ZONE" endpoints = { s3 = "BUCKET_ENDPOINT" } use_path_style = true access_key = "ACCESS_KEY" secret_key = "SECRET_KEY" skip_credentials_validation = true skip_requesting_account_id = true skip_metadata_api_check = true skip_region_validation = true skip_s3_checksum = true } }Substitua:
BUCKET_FQN: o valorstatus.fullyQualifiedNamedo recurso personalizadoBucket. Por exemplo,aabc2z8-platform-terraform-state.TF_STATE_PATH: o caminho do arquivo de estado do Terraform a ser armazenado no bucket de armazenamento. Por exemplo,main.tfstate.ZONE: a zona do recurso personalizadoBucket(status.region). Por exemplo,zone1. O Terraform requer um valor de região, mas o repositório de objetos do GDC não o verifica.BUCKET_ENDPOINT: o valorstatus.endpointdo recurso personalizadoBucket. Por exemplo,https://objectstorage.org-1.zone1.google.gdch.test.ACCESS_KEY: a chave de acesso adquirida do secret que contém suas credenciais de acesso. Siga as instruções em Obter credenciais de acesso ao bucket para adquirir a chave de acesso. O valor no secret é codificado em base64. Decodifique-o antes de usar.SECRET_KEY: a chave secreta adquirida do secret que contém suas credenciais de acesso. Siga as instruções em Obter credenciais de acesso ao bucket para adquirir a chave secreta. O valor no secret é codificado em base64. Decodifique-o antes de usar.
O armazenamento de objetos do GDC é compatível com S3, mas não é da AWS. As configurações restantes definem o back-end para armazenamento que não é do AWS S3:
use_path_style: usa o endereçamento de bucket no estilo de caminho para o repositório de objetos do GDC.skip_credentials_validationeskip_requesting_account_id: impede que o Terraform chame o AWS STS e o AWS IAM. O GDC não oferece esses serviços.skip_metadata_api_check: impede que o Terraform consulte o serviço de metadados do AWS EC2.skip_region_validation: permite usar o nome da zona como região.skip_s3_checksum: impede que o Terraform solicite uma soma de verificação SHA-256 ao fazer upload do arquivo de estado.
Inicialize as novas edições do arquivo de estado no bucket de armazenamento que você especificou na etapa anterior:
terraform init
Definir permissões
Além das permissões necessárias para realizar uma tarefa específica usando o Terraform, como criar um projeto do GDC, você também precisa ter permissões para visualizar definições de recursos personalizados nesse escopo. Aplique as permissões necessárias para usar o Terraform:
Crie o recurso de papel de cluster
crd-viewer:kubectl apply --kubeconfig KUBECONFIG -f - <<EOF apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: crd-viewer rules: - apiGroups: ["apiextensions.k8s.io"] resources: ["customresourcedefinitions"] verbs: ["get", "list", "watch"] EOFSubstitua
KUBECONFIGpelo arquivo kubeconfig do servidor de API ou cluster que hospeda o recurso que você está gerenciando com o Terraform. Por exemplo, a maioria dos recursos é executada no servidor de API Management. Para cargas de trabalho de contêiner, defina o arquivo kubeconfig do cluster do Kubernetes. Defina o servidor de API global se estiver gerenciando um recurso global.Vincule o papel de cluster definido na etapa anterior ao usuário:
kubectl apply --kubeconfig KUBECONFIG -f - <<EOF apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: crd-viewer-binding subjects: - kind: User name: USER_EMAIL roleRef: kind: ClusterRole name: crd-viewer apiGroup: rbac.authorization.k8s.io EOF
Repita essas etapas para cada servidor de API ou cluster em que você quer definir as permissões do Terraform.
Instalar e configurar o provedor do Terraform
É preciso instalar o provedor do Kubernetes para provisionar e gerenciar recursos do Kubernetes.
Em um arquivo do Terraform no módulo, como o arquivo
main.tf, insira o seguinte blocorequired_providers:terraform { required_providers { kubernetes = { source = "hashicorp/kubernetes" version = ">=2.24.0" } } }Inicialize o diretório de trabalho do Terraform para instalar o provedor:
terraform init