이 가이드는 네트워크 설계자용 시리즈의 일부입니다. 이 시리즈에서는 IPv4 주소를 제한하는 조직에 사용할 수 있는 Google Kubernetes Engine(GKE) 주소 관리 옵션을 설명합니다.
이 시리즈는 다음 문서로 구성됩니다.
- 소개 및 개요
- IPv4 주소 최적화
- GKE Pod CIDR 블록 네트워크 주소 변환(NAT)
- GKE Pod CIDR 블록 NAT 구성
- 모든 GKE CIDR 블록의 NAT
- 모든 GKE CIDR 블록에 NAT 구성
- NAT 로깅을 위한 PostgreSQL용 Cloud SQL 및 ULOGD2 구성(이 문서)
이 가이드는 비공개 주소 공간의 고갈 또는 파편화로 인해 GKE pod, 노드, 서비스에 RFC 1918 IPv4 주소를 할당하는 데 어려움을 겪고 있는 네트워크 설계자를 대상으로 합니다. 이 가이드에서는 GKE CIDR 블록의 NAT 번역을 로깅하는 방법을 보여줍니다. Terraform을 사용하여 인프라 빌드를 자동화하고, Cloud SDK를 사용하여 데이터베이스 관련 구성요소를 검사하고, psql
클라이언트 유틸리티를 사용하여 연결된 데이터베이스 테이블을 빌드하고 검사합니다.
다음 다이어그램은 전체 솔루션을 보여줍니다.
대략적으로 모든 GKE CIDR 블록의 NAT에 자세히 설명된 인프라를 구현합니다. 그리고 다음을 추가합니다.
- PostgreSQL용 Cloud SQL 리소스
- 비공개 IP 주소 연결을 위한 예약된 RFC 1918 주소 블록
- PostgreSQL용 Cloud SQL 리소스에 대한 비공개 IP 연결
- 격리된 VPC 게이트웨이에 대한
psql
클라이언트 및ulog2
유틸리티 - 연결 테이블에 NAT 항목을 로깅하는
iptables
구성
이 가이드에서는 다음 사항을 잘 알고 있다고 가정합니다.
- Linux sysadmin 명령어
- GKE
- Compute Engine
- PostgreSQL용 Cloud SQL
ulogd2
유틸리티- Terraform
목표
- PostgreSQL용 Cloud SQL 리소스를 만들고 검사합니다.
- 비공개 IP 주소 연결을 위한 예약된 RFC 1918 주소 블록 만들고 검사합니다.
- PostgreSQL용 Cloud SQL 리소스에 대한 비공개 IP 연결을 만들고 검사합니다.
- 격리된 VPC 게이트웨이에
psql
클라이언트와ulog2
유틸리티를 설치합니다. iptables
구성을 적용하여 격리된 VPC 게이트웨이의 연결 테이블에 NAT 항목을 로깅합니다.
비용
이 가이드에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.
프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요. Google Cloud를 처음 사용하는 사용자는 무료 체험판을 사용할 수 있습니다.
이 가이드를 마치면 만든 리소스를 삭제하여 비용이 계속 청구되지 않게 할 수 있습니다. 자세한 내용은 삭제를 참조하세요.
시작하기 전에
이 섹션에서는 Cloud Shell을 준비하고, 환경 변수를 설정하고, 지원 인프라를 배포합니다.
Cloud Shell 준비
Google Cloud Console에서 Cloud Shell을 엽니다.
이 가이드의 대부분 작업은 Cloud Shell 터미널에서 HashiCorp Terraform과 Cloud SDK를 사용하여 완료합니다.
Cloud Shell 터미널에서 이 솔루션의 GitHub 저장소를 클론합니다.
git clone https://github.com/GoogleCloudPlatform/terraform-gke-nat-connectivity.git kam cd kam/logging
저장소에는 이 가이드를 완료하는 데 필요한 모든 파일이 있습니다. 각 파일에 대한 자세한 설명은 저장소의
README.md
파일을 참조하세요.모든 셸 스크립트를 실행 가능하게 만듭니다.
sudo chmod 755 *.sh
Terraform을 설정합니다.
- Terraform을 설치합니다.
Terraform을 초기화합니다.
terraform init
출력은 다음과 비슷합니다.
... 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. ...
환경 변수 설정
Cloud Shell에서 환경 변수를 설정합니다.
your-organization-name
을 이 가이드에서 사용할 Google Cloud 조직 이름으로 바꿔TF_VAR_org_id
변수를 설정하고 확인합니다.export TF_VAR_org_id=$(gcloud organizations list | \ awk '/your-organization-name/ {print $2}')
환경 변수가 올바르게 설정되었는지 확인합니다.
echo $TF_VAR_org_id
명령어 결과에는 다음과 같이 숫자로 된 조직 ID가 나열됩니다.
... 123123123123 ...
나머지 리소스의 환경 변수를 설정합니다.
source set_variables.sh
환경 변수가 올바르게 설정되었는지 확인합니다.
env | grep TF_
출력은 다음과 비슷합니다.
... 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 ...
환경 변수 파일을 만듭니다.
env | grep TF_ | sed 's/^/export /' > TF_ENV_VARS
이 명령어 체인은 개발자가 만든 환경 변수를
TF_ENV_VARS
파일로 리디렉션합니다. 각 변수 앞에export
명령어가 추가됩니다. Cloud Shell 세션이 종료된 경우 이 파일을 사용하여 환경 변수를 재설정할 수 있습니다. 이러한 변수는 이 가이드의 Terraform 스크립트, 셸 스크립트, SDK 명령어에 사용됩니다.변수를 다시 초기화해야 할 경우 파일이 있는 디렉터리에서 다음 명령어를 실행하면 됩니다.
source TF_ENV_VARS
지원 인프라 배포
Cloud Shell에서 Terraform 지원 인프라를 배포합니다.
terraform apply
Terraform에서 변경하기 전에 확인 메시지를 표시합니다. 답변:
yes
앞의 명령어는 Terraform에 가이드의 모든 구성요소를 배포하도록 지시합니다. 선언을 통한 인프라 정의 방식을 자세히 알아보려면 Terraform 매니페스트(즉,
.tf
확장자가 있는 파일)를 참조하세요.명령어 결과의 끝에 다음 Terraform 출력이 표시됩니다.
... Apply complete! Resources: 45 added, 0 changed, 0 destroyed. Outputs: password = 5daa52500549753f ...
비밀번호를 기록해 둡니다. 나중에 Postgres 클라이언트로 데이터베이스 인스턴스에 연결하는 데 사용하는 데이터베이스 비밀번호입니다.
Terraform에서 오류를 표시하고 배포를 중지할 수 있습니다. 이 오류는 리소스 생성 시 경합 상태로 인해 발생합니다. 이 오류가 표시되면
terraform apply
명령어를 다시 실행합니다.
지원 인프라 검사
이제 gcloud
명령줄 도구를 사용하여 Terraform에서 만든 인프라를 보고 확인합니다. 확인하려면 리소스가 올바르게 응답하고 생성되었는지 확인하는 명령어를 실행합니다.
비공개 액세스 구성 확인
Cloud Shell에서 예약된 비공개 주소 공간을 나열합니다.
gcloud compute addresses list --project=$TF_VAR_isolated_vpc_pid
출력은 다음과 비슷합니다.
... NAME ADDRESS/RANGE TYPE PURPOSE NETWORK REGION SUBNET STATUS private-ip-address 10.231.0.0/16 INTERNAL VPC_PEERING isolated-vpc-net RESERVED ...
VPC 피어링을 나열합니다.
gcloud beta compute networks peerings list --project=$TF_VAR_isolated_vpc_pid
출력은 다음과 비슷합니다.
... 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 ...
데이터베이스 확인
Cloud Shell에서 데이터베이스 인스턴스 이름을 설정합니다.
export DB_INSTANCE=$(gcloud sql instances list \ --project=$TF_VAR_isolated_vpc_pid \ | grep master-instance \ | awk '{print $1}')
인스턴스를 확인합니다.
gcloud sql instances describe $DB_INSTANCE --project=$TF_VAR_isolated_vpc_pid
출력은 다음과 비슷합니다.
... 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: ...
데이터베이스의
ipAddress
를 기록합니다. 앞의 출력에서 주소는10.231.0.3
입니다. 또한 PostgreSQL용 Cloud SQL 주소에서 사용하는 CIDR 블록을 확인합니다. PostgreSQL용 Cloud SQLipAddress
값에/24
넷마스크를 적용하여 이 블록을 파생합니다. 이 출력을 사용하면 CIDR 블록이10.231.0.0/24
가 됩니다. 데이터베이스에 연결하려면 이 정보가 필요합니다.데이터베이스를 확인합니다.
gcloud sql databases list \ --project=$TF_VAR_isolated_vpc_pid \ --instance=$DB_INSTANCE
출력은 다음과 비슷합니다.
... NAME CHARSET COLLATION postgres UTF8 en_US.UTF8 ulog2 UTF8 en_US.UTF8 ...
데이터베이스 사용자를 확인합니다.
gcloud sql users list \ --project=$TF_VAR_isolated_vpc_pid \ --instance=$DB_INSTANCE
출력은 다음과 비슷합니다.
... NAME HOST postgres ulog2 ...
NAT 로깅 구성
이 섹션에서는 격리된 VPC 게이트웨이에 연결하고 가이드의 나머지 부분에 사용하는 유틸리티와 데이터베이스를 설치합니다.
Cloud Shell에서
ssh
를 사용하여 격리된 VPC 게이트웨이에 연결합니다.gcloud compute ssh isolated-vpc-gw \ --project=$TF_VAR_isolated_vpc_pid \ --zone=$TF_VAR_zone
ulogd2
유틸리티를 설치합니다.sudo apt-get install -y ulogd2 ulogd2-pgsql nfacct
출력은 다음과 비슷합니다.
... 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) ... ...
Postgres 클라이언트를 설치합니다.
sudo apt-get install -y postgresql-client
출력은 다음과 비슷합니다.
... 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) ... ...
비공개 액세스 서브넷에 경로를 추가합니다. 여기에서
replace-with-cloud-sql-cidr
을 PostgreSQL용 Cloud SQL CIDR 블록10.231.0.0/24
로 바꿉니다.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
출력은 다음과 비슷합니다.
... 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 ...
replace-with-cloud-sql-ip-address
값을 이전에 적어 둔 PostgreSQL용 Cloud SQLipAddress
값10.231.0.3
으로 대체하여 데이터베이스 테이블을 구성합니다.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
메시지가 표시되면 Terraform 출력에서 기록한 데이터베이스 비밀번호를 입력합니다.
데이터베이스에 로그인하고
ulog2
의plpgsql
언어를 추가하고replace-with-cloud-sql-ip-address
를10.231.0.3
값으로 바꿉니다.psql -h replace-with-cloud-sql-ip-address -U ulog2
메시지가 표시되면 Terraform 출력에서 기록한 데이터베이스 비밀번호를 입력합니다.
Postgres 절차적 언어를
ulog
테이블에 추가합니다.CREATE EXTENSION plpgsql FROM unpackaged;
데이터베이스 테이블을 확인합니다.
select * from ulog2_ct;
출력은 다음과 비슷합니다.
... --------+------------+-------------------+-------------------+------------------+---------------+---------------+-----------------+-------------------+--------------------+--------------------+-------------------+----------------+----------------+------------------+--------------------+-----------+-----------+---------+----------------+-----------------+--------------+---------------+---------- _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) ...
데이터베이스를 종료합니다.
\q
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
텍스트 편집기와
sudo
명령어를 사용하여/etc/ulogd.conf
파일을 수정합니다.[pgsql2]
섹션을 다음으로 변경합니다.[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
ulogd2
데몬을 시작하고 시스템 재부팅 시 사용 설정합니다.sudo systemctl start ulogd2 sudo systemctl enable ulogd2
출력은 다음과 비슷합니다.
... Synchronizing state of ulogd2.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable ulogd2 ...
솔루션 확인
이 섹션에서는 앱을 테스트하고 NAT 로깅을 확인합니다.
앱 테스트
- 새 Cloud Shell 터미널을 시작합니다.
ssh
를 사용하여test-10-11-vm
Compute Engine 인스턴스에 연결하고 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
앱에 연결합니다.
curl http://10.32.31.49:8080/
출력은 다음과 비슷합니다.
... Hello, world! Version: 1.0.0 Hostname: my-app-6597cdc789-d6phf ...
이 명령어는 GKE 클러스터에서 실행되는 앱에서 웹페이지를 검색합니다.
NAT 로깅 확인
Cloud Shell에서 PostgreSQL용 Cloud SQL 인스턴스에 연결합니다.
psql -h replace-with-cloud-sql-ip-address -U ulog2
메시지가 표시되면 이전에 기록한 데이터베이스 비밀번호를 입력합니다.
데이터베이스를 쿼리합니다.
SELECT * FROM ulog2_ct WHERE orig_ip_saddr_str='10.0.0.2';
출력은 다음과 비슷합니다.
... _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) ...
데이터베이스를 종료합니다.
\q
데이터베이스에 항목이 표시되지 않으면 다음 명령어를 실행합니다.
\q sudo systemctl stop ulogd2 sudo systemctl disable ulogd2 sudo systemctl start ulogd2 sudo systemctl enable ulogd2
그런 다음 이 섹션의 2단계부터 시작하여 항목을 다시 확인합니다. 이 명령어는
ulogd2
데몬을 다시 시작합니다.
삭제
인프라 삭제
첫 번째 Cloud Shell 터미널에서
ulogd2
데몬을 중지하고 PostgreSQL용 Cloud SQL 리소스에서 연결을 해제합니다.sudo systemctl stop ulogd sudo systemctl disable ulogd
SSH 세션에서 격리된 VPC 게이트웨이로 종료합니다.
exit
Cloud Shell에서 구성 및 가이드의 모든 구성요소를 삭제합니다.
terraform destroy
Terraform에서 변경하기 전에 확인 메시지를 표시합니다. 메시지가 표시되면
yes
에 응답합니다.다음과 같은 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' ...
이 오류는 명령어가 GKE 방화벽 규칙을 삭제하기 전에 격리된 VPC 네트워크를 삭제하려고 할 때 발생합니다.
격리된 VPC에서 기본이 아닌 방화벽 규칙을 삭제하여 오류를 수정합니다.
../allnat/k8-fwr.sh
이 스크립트는 삭제할 방화벽 규칙을 보여줍니다.
목록을 검토하고 메시지가 표시되면
yes
를 입력합니다.스크립트가 완료되면
destroy
명령어를 다시 실행합니다.다음과 같은 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 ...
이 오류는 Terraform에서 PostgreSQL용 Cloud SQL 데이터베이스가 완전히 삭제되기 전에 데이터베이스 사용자를 삭제하려고 할 때 발생합니다. 오류가 표시된 후 2분 정도 기다린 후 다음 단계로 이동합니다.
원래 Cloud Shell 터미널에서
destroy
명령어를 다시 실행합니다.terraform destroy
Terraform에서 변경하기 전에 확인 메시지를 표시합니다.
yes
를 입력하여 구성을 삭제합니다.이 가이드에서 만든 모든 파일을 삭제합니다.
cd ../.. rm -rf kam
다음 단계
- 다음 배경 자료를 읽어보세요.
- 다른 Google Cloud 기능을 직접 사용해보세요. 가이드 살펴보기.