Para usar o Terraform no seu ambiente isolado do Google Distributed Cloud (GDC), tem de transferi-lo e configurá-lo para processar recursos do Kubernetes.
Antes de começar
Transfira o Terraform para a sua estação de trabalho seguindo a documentação fornecida pela HashiCorp: https://developer.hashicorp.com/terraform/install.
Valide se tem um bucket do GDC. Se não tiver um bucket, crie um.
Certifique-se de que o sistema consegue reconhecer o certificado da autoridade de certificação (CA) usado pelo armazenamento de objetos.
Faça a gestão do ficheiro de estado
O ficheiro de estado no Terraform é usado para registar o estado atual da implementação e mapeá-lo para a configuração do Terraform. Uma vez que o armazenamento de objetos do GDC é implementado através do S3, pode usar a API S3 do Terraform para sincronizar com um ficheiro de estado partilhado. Para tal, tem de configurar o Terraform para sincronizar com o estado remoto:
Adicione a seguinte configuração a um ficheiro do Terraform armazenado localmente, como o ficheiro
main.tf:terraform { backend "s3" { bucket = "BUCKET_FQN" key = "TF_STATE_PATH" endpoint = "BUCKET_ENDPOINT" region = "ZONE" skip_credentials_validation = true force_path_style = true access_key = "ACCESS_KEY" secret_key = "SECRET_KEY" ... } }Substitua o seguinte:
BUCKET_FQN: o nome totalmente qualificado do recurso personalizadoBucket.TF_STATE_PATH: a localização do ficheiro de estado do Terraform a armazenar no bucket.BUCKET_ENDPOINT: o ponto final do recurso personalizadoBucket.ZONE: a zona do recurso personalizadoBucket.ACCESS_KEY: a chave de acesso adquirida a partir do segredo que contém as suas credenciais de acesso. Siga as instruções em Obtenha as credenciais de acesso ao bucket para adquirir a chave de acesso.SECRET_KEY: a chave secreta adquirida a partir do segredo que contém as suas credenciais de acesso. Siga as instruções em Obtenha as credenciais de acesso ao bucket para adquirir a chave secreta.
Tem de definir
skip_credentials_validationeforce_style_pathcomotrue, uma vez que o GDC não é compatível com a validação de credenciais e usa o ponto final de estilo de caminho.Inicialize as novas edições do ficheiro de estado no bucket que especificou no passo anterior:
terraform initO Terraform pode pedir uma região da AWS como entrada obrigatória, mas o valor não é usado, uma vez que está a usar o armazenamento de objetos do GDC. Introduza qualquer região da AWS para cumprir o requisito.
Defina as autorizações
Além das autorizações necessárias para realizar uma tarefa específica com o Terraform, como criar um projeto do GDC, também tem de ter autorizações para ver as definições de recursos personalizados nesse âmbito. Aplique as autorizações necessárias para usar o Terraform:
Crie o recurso de função 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 ficheiro kubeconfig do servidor da API ou do cluster que aloja o recurso que está a gerir com o Terraform. Por exemplo, a maioria dos recursos é executada no servidor da API de gestão. Para cargas de trabalho de contentores, defina o ficheiro kubeconfig do cluster do Kubernetes. Certifique-se de que define o servidor da API global se estiver a gerir um recurso global.Associe a função de cluster definida no passo anterior ao utilizador:
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 estes passos para cada servidor da API ou cluster para o qual quer definir autorizações do Terraform.
Instale e configure o fornecedor do Terraform
Tem de instalar o fornecedor do Kubernetes para aprovisionar e gerir recursos do Kubernetes.
Num ficheiro do Terraform no módulo, como o ficheiro
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 fornecedor:
terraform init