Para usar o Terraform no ambiente isolado do Google Distributed Cloud (GDC), faça o download e configure-o para processar recursos do Kubernetes.
Antes de começar
Faça o download do Terraform na sua estação de trabalho seguindo a documentação fornecida pela HashiCorp: https://developer.hashicorp.com/terraform/install.
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 armazenamento 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 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" endpoint = "BUCKET_ENDPOINT" skip_credentials_validation = true force_path_style = true access_key = "ACCESS_KEY" secret_key = "SECRET_KEY" ... } }
Substitua:
BUCKET_FQN
: o nome totalmente qualificado do recurso personalizadoBucket
.TF_STATE_PATH
: o local do arquivo de estado do Terraform a ser armazenado no bucket de armazenamento.BUCKET_ENDPOINT
: o endpoint do recurso personalizadoBucket
.ACCESS_KEY
: a chave de acesso adquirida do secret que contém suas credenciais de acesso. Siga as instruções em Receber credenciais de acesso ao bucket para adquirir a chave de acesso.SECRET_KEY
: a chave secreta adquirida do secret que contém suas credenciais de acesso. Siga as instruções em Receber credenciais de acesso ao bucket para adquirir a chave secreta.
Defina
skip_credentials_validation
eforce_style_path
comotrue
porque o GDC não é compatível com a validação de credenciais e usa o endpoint de estilo de caminho.Inicialize as novas edições do arquivo de estado no bucket de armazenamento especificado na etapa anterior:
terraform init
O Terraform pode pedir uma região da AWS como entrada obrigatória, mas o valor não é usado porque você está usando o armazenamento de objetos do GDC. Insira qualquer região da AWS para atender ao requisito.
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 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 arquivo kubeconfig do servidor de API ou cluster que hospeda o recurso gerenciado com o Terraform. Por exemplo, a maioria dos recursos é executada no servidor da API Management. Para cargas de trabalho de contêineres, defina o arquivo kubeconfig do cluster do Kubernetes. Defina o servidor de API global se você estiver gerenciando um recurso global.Vincule a função de cluster definida 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 ou cluster de API em que você quer definir permissões do Terraform.
Instalar e configurar o provedor do Terraform
Você precisa 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.6.1" } } }
Inicialize o diretório de trabalho do Terraform para instalar o provedor:
terraform init