Configurar o Terraform

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:

  1. 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 valor status.fullyQualifiedName do recurso personalizado Bucket. 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 personalizado Bucket (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 valor status.endpoint do recurso personalizado Bucket. 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_validation e skip_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.

  2. 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:

  1. 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"]
    EOF
    

    Substitua KUBECONFIG pelo 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.

  2. 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.

  1. Em um arquivo do Terraform no módulo, como o arquivo main.tf, insira o seguinte bloco required_providers:

    terraform {
      required_providers {
        kubernetes = {
          source = "hashicorp/kubernetes"
          version = ">=2.24.0"
        }
      }
    }
    
  2. Inicialize o diretório de trabalho do Terraform para instalar o provedor:

    terraform init