Este tutorial faz parte de uma série destinada a arquitetos de rede. A série discute as opções de gerenciamento de endereços do Google Kubernetes Engine (GKE) disponíveis para organizações restritas a endereços IPv4.
A série consiste nas partes a seguir:
- Introdução e visão geral
- Otimização de endereços IPv4
- Conversão de endereços de rede (NAT, na sigla em inglês) para um bloco de CIDR de Pod de GKE
- Como configurar NAT para um bloco de CIDR de Pod de GKE
- NAT para todos os blocos de CIDR do GKE
- Como configurar NAT para todos os blocos de CIDR do GKE
- Como configurar o ULOGD2 e o Cloud SQL para PostgreSQL para geração de registros NAT (este documento)
Este tutorial destina-se a arquitetos de rede com dificuldades para alocar endereços IPv4 RFC 1918 para pods, nós e serviços do GKE devido ao esgotamento ou à fragmentação do espaço de endereço privado. O tutorial mostra como registrar as traduções NAT dos blocos CIDR do GKE. Use o Terraform para automatizar o build de infraestrutura, o SDK do Cloud para inspecionar os componentes relacionados ao banco de dados e o utilitário cliente psql
para criar e inspecionar as tabelas de banco de dados associadas.
O diagrama a seguir mostra a solução geral.
Em um nível alto, você implementa a infraestrutura descrita em detalhes em NAT para todos os blocos CIDR do GKE. Em seguida, adicione o seguinte:
- Um recurso do Cloud SQL para PostgreSQL.
- Um bloco de endereços RFC 1918 reservado para uma conexão de endereço IP privado.
- Uma conexão IP privada com o recurso do Cloud SQL para PostgreSQL.
- O cliente
psql
e o utilitárioulog2
para o gateway da VPC isolado. - Uma configuração
iptables
para registrar entradas NAT nas tabelas de conexão.
Neste tutorial, presume-se que você tenha familiaridade com o seguinte:
- Comandos sysadmin do Linux
- GKE
- Compute Engine
- Cloud SQL para PostgreSQL
- O utilitário
ulogd2
- Terraform
Objetivos
- Criar e inspecionar um recurso do Cloud SQL para PostgreSQL
- Criar e inspecionar um bloco de endereços RFC 1918 reservado para uma conexão de endereço IP privado
- Criar e inspecionar uma conexão IP particular com o recurso do Cloud SQL para PostgreSQL
- Instalar o cliente
psql
e o utilitárioulog2
no gateway da VPC isolado - Aplicar uma configuração
iptables
para registrar entradas NAT na tabela de conexão no gateway VPC isolado
Custos
Neste tutorial, usamos os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem ser qualificados para uma avaliação gratuita.
Ao concluir este tutorial, exclua os recursos criados para evitar o faturamento contínuo. Para mais informações, consulte Como fazer a limpeza.
Antes de começar
Nesta seção, você prepara o Cloud Shell, configura suas variáveis de ambiente e implanta a infraestrutura de suporte.
Preparar o Cloud Shell
No Console do Google Cloud, abra o Cloud Shell.
Você conclui a maior parte deste tutorial a partir do terminal do Cloud Shell usando o Terraform da HashiCorp e o SDK do Cloud.
No terminal do Cloud Shell, clone o repositório do GitHub desta solução:
git clone https://github.com/GoogleCloudPlatform/terraform-gke-nat-connectivity.git kam cd kam/logging
O repositório contém todos os arquivos necessários para concluir este tutorial. Para obter uma descrição completa de cada arquivo, consulte o arquivo
README.md
no repositório.Torne executáveis todos os scripts de shell:
sudo chmod 755 *.sh
Configure o Terraform:
- Instale o Terraform.
Inicialize o Terraform:
terraform init
A saída será assim:
... Initializing provider plugins... The following providers do not have any version constraints in configuration, so the latest version was installed. To prevent automatic upgrades to new major versions that may contain breaking changes, it is recommended to add version = "..." constraints to the corresponding provider blocks in configuration, with the constraint strings suggested below. ∗ provider.google: version = "~> 2.5" Terraform has been successfully initialized! You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure. All Terraform commands should now work. If you ever set or change modules or backend configuration for Terraform, rerun this command to reinitialize your working directory. If you forget, other commands will detect it and remind you to do so if necessary. ...
Definir variáveis de ambiente
No Cloud Shell, defina as variáveis de ambiente:
Defina e verifique a variável
TF_VAR_org_id
, substituindoyour-organization-name
pelo nome da organização do Google Cloud que você quer usar neste tutorial:export TF_VAR_org_id=$(gcloud organizations list | \ awk '/your-organization-name/ {print $2}')
Verifique se a variável de ambiente está definida corretamente:
echo $TF_VAR_org_id
A resposta ao comando lista seu código numérico da organização e é semelhante a esta:
... 123123123123 ...
Defina as variáveis de ambiente para os recursos restantes:
source set_variables.sh
Verifique se as variáveis de ambiente estão definidas corretamente:
env | grep TF_
A saída será assim:
... TF_VAR_isolated_net_name=isolated-vpc TF_VAR_isolated_pname=isolated-vpc-project TF_VAR_isolated_pid=isolated-vpc-project-id TF_VAR_shared_net_name=routed-domain-vpc TF_VAR_shared_pname=routed-domain-project TF_VAR_shared_pid=routed-domain-project-id TF_VAR_isolated_vpc_gw_host_nic_ip=10.97.0.2 TF_VAR_isolated_vpc_gw_service_nic_ip=10.32.0.2 TF_VAR_isolated_vpc_gw_service_dgw_ip=10.32.0.1 TF_VAR_org_id=123123123123 TF_VAR_region=us-west1 TF_VAR_zone=us-west1-b TF_VAR_user_account=user@example.com TF_VAR_node_cidr=10.32.0.0/19 TF_VAR_pod_cidr=10.0.0.0/11 TF_VAR_service_cidr=10.224.0.0/20 TF_VAR_shared_cidr=10.97.0.0/24 TF_VAR_test1_cidr=10.0.0.0/11 TF_VAR_test2_cidr=10.160.0.0/11 TF_VAR_test3_cidr=10.64.0.0/19 TF_VAR_ilb_cidr=10.32.31.0/24 TF_VAR_masquerade=true TF_VAR_db_username=ulog2 TF_VAR_db_password=ThanksForAllTheFish TF_VAR_private_access_cidr=192.168.0.0 ...
Crie um arquivo de variável de ambiente:
env | grep TF_ | sed 's/^/export /' > TF_ENV_VARS
Essa cadeia de comando redireciona as variáveis de ambiente que você criou para um arquivo chamado
TF_ENV_VARS
. Cada variável é precedida pelo comandoexport
. É possível usar esse arquivo para redefinir as variáveis de ambiente caso a sessão do Cloud Shell seja encerrada. Neste tutorial, essas variáveis são usadas pelos scripts do Terraform, scripts de shell e comandos do SDK.Se você precisar reinicializar as variáveis, execute o seguinte comando no diretório em que o arquivo está localizado:
source TF_ENV_VARS
Implantar a infraestrutura de suporte
No Cloud Shell, implante a infraestrutura de suporte do Terraform:
terraform apply
O Terraform solicita a confirmação antes de fazer qualquer alteração. Resposta
yes
.O comando anterior instrui o Terraform a implantar todos os componentes do tutorial. Para entender melhor como a infraestrutura é declarativamente definida, leia os manifestos do Terraform, ou seja, os arquivos com as extensões
.tf
.No final da resposta ao comando, você verá a seguinte saída do Terraform:
... Apply complete! Resources: 45 added, 0 changed, 0 destroyed. Outputs: password = 5daa52500549753f ...
Anote a senha. Essa é a senha do banco de dados que você usará posteriormente para se conectar à instância do banco de dados com o cliente Postgres.
É possível que o Terraform exiba um erro e pare a implantação. Esse erro é o resultado de uma disputa na criação de recursos. Se você vir esse erro, execute novamente o comando
terraform apply
.
Como inspecionar a infraestrutura de suporte
Agora você usa a ferramenta de linha de comando gcloud
para visualizar e verificar a infraestrutura criada pelo Terraform. A verificação envolve a execução de um comando para ver se o recurso responde e foi criado corretamente.
Verificar a configuração de acesso privado
No Cloud Shell, liste o espaço de endereço privado reservado:
gcloud compute addresses list --project=$TF_VAR_isolated_vpc_pid
A saída será assim:
... NAME ADDRESS/RANGE TYPE PURPOSE NETWORK REGION SUBNET STATUS private-ip-address 10.231.0.0/16 INTERNAL VPC_PEERING isolated-vpc-net RESERVED ...
Liste o peering de VPC:
gcloud beta compute networks peerings list --project=$TF_VAR_isolated_vpc_pid
A saída será assim:
... NAME NETWORK PEER_PROJECT PEER_NETWORK IMPORT_CUSTOM_ROUTES EXPORT_CUSTOM_ROUTES STATE STATE_DETAILS cloudsql-postgres-googleapis-com isolated-vpc-net speckle-umbrella-pg-5 cloud-sql-network-88508764482-eb87f4a6a6dc2193 False False ACTIVE [2019-06-06T09:59:57.053-07:00]: Connected. servicenetworking-googleapis-com isolated-vpc-net k5370e732819230f0-tp servicenetworking False False ACTIVE [2019-06-06T09:57:05.900-07:00]: Connected. compute.googleapis.com Compute Engine API container.googleapis.com Google Kubernetes Engine API ...
Verificar o banco de dados
No Cloud Shell, defina o nome da instância do banco de dados:
export DB_INSTANCE=$(gcloud sql instances list \ --project=$TF_VAR_isolated_vpc_pid \ | grep master-instance \ | awk '{print $1}')
Verifique a instância:
gcloud sql instances describe $DB_INSTANCE --project=$TF_VAR_isolated_vpc_pid
A saída será assim:
... backendType: SECOND_GEN connectionName: ivpc-pid-1812005657:us-west1:master-instance-b2aab5f6 databaseVersion: POSTGRES_9_6 etag: 6e3f96efff84e69da0a0c10e5e6cab7232aa2f4b2b803080950685a2a2517747 gceZone: us-west1-b instanceType: CLOUD_SQL_INSTANCE ipAddresses: ‐ ipAddress: 10.231.0.3 type: PRIVATE kind: sql#instance name: master-instance-b2aab5f6 project: ivpc-pid-1812005657 region: us-west1 selfLink: https://www.googleapis.com/sql/v1beta4/projects/ivpc-pid-1812005657/instances/master-instance-b2aab5f6 serverCaCert: ...
Anote o
ipAddress
do banco de dados. Na saída anterior, o endereço é10.231.0.3
. Observe também o bloco CIDR usado pelo endereço do Cloud SQL para PostgreSQL. Você deriva esse bloco aplicando uma máscara de rede/24
ao valoripAddress
do Cloud SQL para PostgreSQL. Usando essa saída, o bloco CIDR seria10.231.0.0/24
. Você precisa dessas informações para se conectar ao banco de dados.Verifique o banco de dados:
gcloud sql databases list \ --project=$TF_VAR_isolated_vpc_pid \ --instance=$DB_INSTANCE
A saída será assim:
... NAME CHARSET COLLATION postgres UTF8 en_US.UTF8 ulog2 UTF8 en_US.UTF8 ...
Verifique o usuário do banco de dados:
gcloud sql users list \ --project=$TF_VAR_isolated_vpc_pid \ --instance=$DB_INSTANCE
A saída será assim:
... NAME HOST postgres ulog2 ...
Configurar a geração de registros NAT
Nesta seção, você se conecta ao gateway da VPC isolado e instala os utilitários e bancos de dados usados para o restante do tutorial.
No Cloud Shell, conecte-se ao gateway da VPC isolado usando
ssh
:gcloud compute ssh isolated-vpc-gw \ --project=$TF_VAR_isolated_vpc_pid \ --zone=$TF_VAR_zone
Instale o utilitário
ulogd2
:sudo apt-get install -y ulogd2 ulogd2-pgsql nfacct
A saída será assim:
... Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: libnetfilter-acct1 libnetfilter-log1 Suggested packages: ulogd2-dbi ulogd2-json ulogd2-mysql ulogd2-pcap ulogd2-pgsql ulogd2-sqlite3 The following NEW packages will be installed: libnetfilter-acct1 libnetfilter-log1 ulogd2 0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded. Need to get 125 kB of archives. After this operation, 529 kB of additional disk space will be used. Get:1 http://deb.debian.org/debian stretch/main amd64 libnetfilter-log1 amd64 1.0.1-1.1 [9,582 B] Get:2 http://deb.debian.org/debian stretch/main amd64 libnetfilter-acct1 amd64 1.0.2-1.1 [6,724 B] Get:3 http://deb.debian.org/debian stretch/main amd64 ulogd2 amd64 2.0.5-5 [109 kB] Fetched 125 kB in 0s (1,604 kB/s) Selecting previously unselected package libnetfilter-log1:amd64. (Reading database ... 35862 files and directories currently installed.) Preparing to unpack .../libnetfilter-log1_1.0.1-1.1_amd64.deb ... Unpacking libnetfilter-log1:amd64 (1.0.1-1.1) ... Selecting previously unselected package libnetfilter-acct1:amd64. Preparing to unpack .../libnetfilter-acct1_1.0.2-1.1_amd64.deb ... Unpacking libnetfilter-acct1:amd64 (1.0.2-1.1) ... Selecting previously unselected package ulogd2. Preparing to unpack .../ulogd2_2.0.5-5_amd64.deb ... Unpacking ulogd2 (2.0.5-5) ... Setting up libnetfilter-log1:amd64 (1.0.1-1.1) ... Processing triggers for systemd (232-25+deb9u11) ... Processing triggers for man-db (2.7.6.1-2) ... Setting up libnetfilter-acct1:amd64 (1.0.2-1.1) ... Setting up ulogd2 (2.0.5-5) ... adduser: Warning: The home directory `/var/log/ulog' does not belong to the user you are currently creating. Created symlink /etc/systemd/system/ulogd.service → /lib/systemd/system/ulogd2.service. Created symlink /etc/systemd/system/multi-user.target.wants/ulogd2.service → /lib/systemd/system/ulogd2.service. Processing triggers for systemd (232-25+deb9u11) ... ...
Instale o cliente Postgres:
sudo apt-get install -y postgresql-client
A saída será assim:
... Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: libpq5 postgresql-client-9.6 postgresql-client-common Suggested packages: postgresql-9.6 postgresql-doc-9.6 The following NEW packages will be installed: libpq5 postgresql-client postgresql-client-9.6 postgresql-client-common 0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded. Need to get 1,549 kB of archives. After this operation, 6,624 kB of additional disk space will be used. Get:1 http://deb.debian.org/debian stretch/main amd64 postgresql-client-common all 181+deb9u2 [79.2 kB] Get:2 http://security.debian.org stretch/updates/main amd64 libpq5 amd64 9.6.13-0+deb9u1 [136 kB] Get:3 http://deb.debian.org/debian stretch/main amd64 postgresql-client all 9.6+181+deb9u2 [55.8 kB] Get:4 http://security.debian.org stretch/updates/main amd64 postgresql-client-9.6 amd64 9.6.13-0+deb9u1 [1,278 kB] Fetched 1,549 kB in 0s (2,609 kB/s) Selecting previously unselected package libpq5:amd64. (Reading database ... 35927 files and directories currently installed.) Preparing to unpack .../libpq5_9.6.13-0+deb9u1_amd64.deb ... Unpacking libpq5:amd64 (9.6.13-0+deb9u1) ... Selecting previously unselected package postgresql-client-common. Preparing to unpack .../postgresql-client-common_181+deb9u2_all.deb ... Unpacking postgresql-client-common (181+deb9u2) ... Selecting previously unselected package postgresql-client-9.6. Preparing to unpack .../postgresql-client-9.6_9.6.13-0+deb9u1_amd64.deb ... Unpacking postgresql-client-9.6 (9.6.13-0+deb9u1) ... Selecting previously unselected package postgresql-client. Preparing to unpack .../postgresql-client_9.6+181+deb9u2_all.deb ... Unpacking postgresql-client (9.6+181+deb9u2) ... Setting up libpq5:amd64 (9.6.13-0+deb9u1) ... Processing triggers for libc-bin (2.24-11+deb9u4) ... Setting up postgresql-client-common (181+deb9u2) ... Processing triggers for man-db (2.7.6.1-2) ... Setting up postgresql-client-9.6 (9.6.13-0+deb9u1) ... update-alternatives: using /usr/share/postgresql/9.6/man/man1/psql.1.gz to provide /usr/share/man/man1/psql.1.gz (psql.1.gz) in auto mode Setting up postgresql-client (9.6+181+deb9u2) ... ...
Adicione uma rota à sub-rede de acesso privado, substituindo
replace-with-cloud-sql-cidr
pelo bloco CIDR do Cloud SQL para PostgreSQL10.231.0.0/24
derivado anteriormente.sudo ip route add to replace-with-cloud-sql-cidr \ via 10.32.0.1 dev eth1 table routed-domain ip route show table routed-domain
A saída será assim:
... 10.0.0.0/8 via 10.97.0.1 dev eth0 10.32.31.0/24 via 10.32.0.1 dev eth1 10.231.0.0/24 via 10.32.0.1 dev eth1 172.16.0.0/12 via 10.97.0.1 dev eth0 192.168.0.0/16 via 10.97.0.1 dev eth0 ...
Configure a tabela do banco de dados, substituindo o valor
replace-with-cloud-sql-ip-address
peloipAddress
valor10.231.0.3
do Cloud SQL para PostgreSQL que você anotou anteriormente:cd /usr/share/doc/ulogd2 sudo gzip -d /usr/share/doc/ulogd2/pgsql-ulogd2-flat.sql.gz psql -h replace-with-cloud-sql-ip-address -U ulog2 -f pgsql-ulogd2-flat.sql
Quando solicitado, digite a senha do banco de dados que você anotou na saída do Terraform.
Faça login no banco de dados e adicione a linguagem
plpgsql
paraulog2
, substituindoreplace-with-cloud-sql-ip-address
pelo valor10.231.0.3
:psql -h replace-with-cloud-sql-ip-address -U ulog2
Quando solicitado, digite a senha do banco de dados que você anotou na saída do Terraform.
Adicione a linguagem processual do Postgres à tabela
ulog
:CREATE EXTENSION plpgsql FROM unpackaged;
Verifique a tabela do banco de dados:
select * from ulog2_ct;
A saída será assim:
... --------+------------+-------------------+-------------------+------------------+---------------+---------------+-----------------+-------------------+--------------------+--------------------+-------------------+----------------+----------------+------------------+--------------------+-----------+-----------+---------+----------------+-----------------+--------------+---------------+---------- _ct_id | oob_family | orig_ip_saddr_str | orig_ip_daddr_str | orig_ip_protocol | orig_l4_sport | orig_l4_dport | orig_raw_pktlen | orig_raw_pktcount | reply_ip_saddr_str | reply_ip_daddr_str | reply_ip_protocol | reply_l4_sport | reply_l4_dport | reply_raw_pktlen | reply_raw_pktcount | icmp_code | icmp_type | ct_mark | flow_start_sec | flow_start_usec | flow_end_sec | flow_end_usec | ct_event --------+------------+-------------------+-------------------+------------------+---------------+---------------+-----------------+-------------------+--------------------+--------------------+-------------------+----------------+----------------+------------------+--------------------+-----------+-----------+---------+----------------+-----------------+--------------+---------------+---------- (0 rows) ...
Saia do banco de dados:
\q
Configure o utilitário
ulogd2
:sudo sed -i 's/^#plugin="\/usr\/lib\/x86_64-linux-gnu\/ulogd\/ulogd_output_PGSQL.so"/plugin="\/usr\/lib\/x86_64-linux-gnu\/ulogd\/ulogd_output_PGSQL.so"/' /etc/ulogd.conf sudo sed -i 's/#stack=ct1:NFCT,ip2str1:IP2STR,pgsql2:PGSQL/stack=ct2:NFCT,ip2str1:IP2STR,pgsql2:PGSQL/' /etc/ulogd.conf sudo sed -i 's/^stack=log1:NFLOG,base1:BASE,ifi1:IFINDEX,ip2str1:IP2STR,print1:PRINTPKT,emu1:LOGEMU/#stack=log1:NFLOG,base1:BASE,ifi1:IFINDEX,ip2str1:IP2STR,print1:PRINTPKT,emu1:LOGEMU/' /etc/ulogd.conf sudo iptables -A OUTPUT -m state --state NEW -j NFLOG --nflog-group 1
Modifique o arquivo
/etc/ulogd.conf
usando um editor de texto e o comandosudo
. Altere a seção[pgsql2]
para o seguinte:[pgsql2] db="ulog2" host="replace-with-cloud-sql-ip-address" user="ulog2" table="ulog2_ct" #schema="public" pass="replace-with-database-password" procedure="INSERT_CT" connstring="hostaddr=replace-with-cloud-sql-ip-address port=5432 dbname=ulog2 user=ulog2 password=replace-with-database-password" [ct2] event_mask=0x00000001 hash_enable=0
Inicie o daemon
ulogd2
e ative-o nas reinicializações do sistema:sudo systemctl start ulogd2 sudo systemctl enable ulogd2
A saída será assim:
... Synchronizing state of ulogd2.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable ulogd2 ...
Como verificar a solução
Nesta seção, você testará o aplicativo e verificará a geração de registros NAT.
Testar o app
- Inicie um novo terminal do Cloud Shell.
Conecte-se à instância
test-10-11-vm
do Compute Engine usandossh
e mude para o diretório de trabalho do repositório Git:cd kam\logging source TF_ENV_VARS gcloud compute ssh test-10-11-vm \ --project=$TF_VAR_shared_vpc_pid \ --zone=$TF_VAR_zone
Conecte-se ao aplicativo:
curl http://10.32.31.49:8080/
A saída será assim:
... Hello, world! Version: 1.0.0 Hostname: my-app-6597cdc789-d6phf ...
Esse comando recupera a página da Web do aplicativo em execução no cluster do GKE.
Verificar a geração de registros NAT
No Cloud Shell, conecte-se à instância do Cloud SQL para PostgreSQL:
psql -h replace-with-cloud-sql-ip-address -U ulog2
Quando solicitado, digite a senha do banco de dados que você anotou anteriormente.
Consulte o banco de dados:
SELECT * FROM ulog2_ct WHERE orig_ip_saddr_str='10.0.0.2';
A saída será assim
... _ct_id | oob_family | orig_ip_saddr_str | orig_ip_daddr_str | orig_ip_protocol | orig_l4_sport | orig_l4_dport | orig_raw_pktlen | orig_raw_pktcount | reply_ip_saddr_str | reply_ip_daddr_str | reply_ip_protocol | reply_l4_sport | reply_l4_dport | reply_raw_pktlen | reply_raw_pktcount | icmp_code | icmp_type | ct_mark | flow_start_sec | flow_start_usec | flow_end_sec | flow_end_usec | ct_event --------+------------+-------------------+-------------------+------------------+---------------+---------------+-----------------+-------------------+--------------------+--------------------+-------------------+----------------+----------------+------------------+--------------------+-----------+-----------+---------+----------------+-----------------+--------------+---------------+---------- 12113 | 2 | 10.0.0.2 | 10.32.31.1 | 6 | 58404 | 8080 | 0 | 0 | 10.32.31.1 | 10.32.0.2 | 6 | 8080 | 58404 | 0 | 0 | | | 0 | 1560205157 | 950165 | | | 1 63 | 2 | 10.0.0.2 | 10.32.31.1 | 6 | 35510 | 8080 | 0 | 0 | 10.32.31.1 | 10.32.0.2 | 6 | 8080 | 35510 | 0 | 0 | | | 0 | 1559949207 | 180828 | | | 1 14 | 2 | 10.0.0.2 | 10.32.31.1 | 6 | 35428 | 8080 | 0 | 0 | 10.32.31.1 | 10.32.0.2 | 6 | 8080 | 35428 | 0 | 0 | | | 0 | 1559948312 | 193507 | | | 1 (3 rows) ...
Saia do banco de dados:
\q
Se você não vir entradas no banco de dados, execute os seguintes comandos:
\q sudo systemctl stop ulogd2 sudo systemctl disable ulogd2 sudo systemctl start ulogd2 sudo systemctl enable ulogd2
Em seguida, verifique novamente as entradas começando na etapa 2 desta seção. Esses comandos reiniciam o daemon
ulogd2
.
Limpeza
Destruir a infraestrutura
No primeiro terminal do Cloud Shell, pare o daemon
ulogd2
e desconecte-o do recurso do Cloud SQL para PostgreSQL:sudo systemctl stop ulogd sudo systemctl disable ulogd
Saia da sessão SSH para o gateway VPC isolado:
exit
No Cloud Shell, destrua a configuração e todos os componentes do tutorial:
terraform destroy
O Terraform solicita a confirmação antes de fazer a alteração. Responda
yes
quando solicitado.É possível ver o seguinte erro do Terraform:
... ∗ google_compute_network.ivpc (destroy): 1 error(s) occurred: ∗ google_compute_network.ivpc: Error waiting for Deleting Network: The network resource 'projects/ivpc-pid--1058675427/global/networks/isolated-vpc-net' is already being used by 'projects/ivpc-pid--1058675427/global/firewalls/k8s-05693142c93de80e-node-hc' ...
Este erro ocorre quando o comando tenta destruir a rede VPC isolada antes de destruir as regras de firewall do GKE.
Corrija o erro removendo as regras de firewall não padrão da VPC isolada:
../allnat/k8-fwr.sh
Esse script mostra quais regras de firewall serão removidas.
Revise a lista e, quando solicitado, digite
yes
.Quando o script estiver concluído, execute novamente o comando
destroy
.É possível ver o seguinte erro do Terraform:
... Error: Error applying plan: 1 error(s) occurred: ∗ google_sql_user.users (destroy): 1 error(s) occurred: ∗ google_sql_user.users: Error, failed to delete user ulog2 in instance master-instance-b2aab5f6: googleapi: Error 400: Invalid request: Failed to delete user ulog2. Detail: pq: role "ulog2" cannot be dropped because some objects depend on it ., invalid ...
Esse erro ocorre quando o Terraform tenta destruir o usuário do banco de dados antes que o banco de dados do Cloud SQL para PostgreSQL seja totalmente excluído. Aguarde dois minutos após o erro aparecer e vá para a próxima etapa.
No terminal original do Cloud Shell, execute novamente o comando
destroy
:terraform destroy
O Terraform solicita a confirmação antes de fazer a alteração.
Responda
yes
para destruir a configuração.Remova todos os arquivos criados durante este tutorial:
cd ../.. rm -rf kam
A seguir
- Leia o seguinte material de referência:
- Teste outros recursos do Google Cloud. Veja nossos tutoriais.