Para usar o Terraform no seu ambiente isolado do Google Distributed Cloud (GDC), tem de o transferir 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.
Verifique se tem um contentor de armazenamento do GDC existente. Se não tiver um contentor de armazenamento, crie um.
Certifique-se de que o seu sistema consegue reconhecer o certificado da autoridade de certificação (AC) 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 isso, 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" 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 contentor de armazenamento.BUCKET_ENDPOINT
: o ponto final 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 credenciais de acesso ao contentor 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 credenciais de acesso ao contentor para adquirir a chave secreta.
Tem de definir
skip_credentials_validation
eforce_style_path
comotrue
, uma vez que o GDC não suporta a validação de credenciais e usa o ponto final de estilo de caminho.Inicialize as edições do novo ficheiro de estado no contentor de armazenamento que especificou no passo anterior:
terraform init
O 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 satisfazer o requisito.
Defina autorizações
Além das autorizações necessárias para realizar uma tarefa específica através do Terraform, como criar um projeto do GDC, também tem de ter autorizações para ver 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"] EOF
Substitua
KUBECONFIG
pelo ficheiro kubeconfig do servidor de 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 Management. Para cargas de trabalho de contentores, defina o ficheiro kubeconfig do cluster 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 ou cluster de API 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 Terraform no seu módulo, como o ficheiro
main.tf
, insira o seguinte blocorequired_providers
:terraform { required_providers { kubernetes = { source = "hashicorp/kubernetes" version = "~>2.6.1" } } }
Inicialize o diretório de trabalho do Terraform para instalar o fornecedor:
terraform init