반응형
Terraform에서 GKE 노드에 대한 네트워크 태그를 생성하는 방법
이후 Terraform에서 GCP 네트워크와 GKE 모듈을 활용하여 VPC와 GKE 클러스터를 구축하고 있습니다. 이제 대상을 GKE 노드로 하는 방화벽 규칙을 생성하려고 합니다. GCP가 이름을 지정하는 데 사용하는 형식으로 자동 생성된 기존 방화벽 규칙을 업데이트하고 싶지 않습니다. 이로 인해 논리가 실패할 수 있습니다. 그렇기 때문에 GKE 노드를 가리키는 별도의 네트워크 태그와 함께 별도의 방화벽 규칙을 만들어야 합니다. 모듈 정보
VPC
module "vpc" {
source = "terraform-google-modules/network/google"
#version = "~> 2.5"
project_id = var.project_id
network_name = "${var.project_name}-${var.env_name}-vpc"
subnets = [
{
subnet_name = "${var.project_name}-${var.env_name}-subnet"
subnet_ip = "${var.subnetwork_cidr}"
subnet_region = var.region
}
]
secondary_ranges = {
"${var.project_name}-${var.env_name}-subnet" = [
{
range_name = "${var.project_name}-gke-pod-ip-range"
ip_cidr_range = "${var.ip_range_pods_cidr}"
},
{
range_name = "${var.project_name}-gke-service-ip-range"
ip_cidr_range = "${var.ip_range_services_cidr}"
}
]
}
}
GKE_클러스터
module "gke" {
source = "terraform-google-modules/kubernetes-engine/google//modules/beta-private-cluster"
project_id = var.project_id
name = "${var.project_name}-gke-${var.env_name}-cluster"
regional = true
region = var.region
zones = ["${var.region}-a", "${var.region}-b", "${var.region}-c"]
network = module.vpc.network_name
subnetwork = module.vpc.subnets_names[0]
ip_range_pods = "${var.project_name}-gke-pod-ip-range"
ip_range_services = "${var.project_name}-gke-service-ip-range"
http_load_balancing = false
network_policy = false
horizontal_pod_autoscaling = true
filestore_csi_driver = false
enable_private_endpoint = false
enable_private_nodes = true
master_ipv4_cidr_block = "${var.control_plane_cidr}"
istio = false
cloudrun = false
dns_cache = false
node_pools = [
{
name = "${var.project_name}-gke-node-pool"
machine_type = "${var.machine_type}"
node_locations = "${var.region}-a,${var.region}-b,${var.region}-c"
min_count = "${var.node_pools_min_count}"
max_count = "${var.node_pools_max_count}"
disk_size_gb = "${var.node_pools_disk_size_gb}"
# local_ssd_count = 0
# spot = false
# local_ssd_ephemeral_count = 0
# disk_type = "pd-standard"
# image_type = "COS_CONTAINERD"
# enable_gcfs = false
auto_repair = true
auto_upgrade = true
# service_account = "project-service-account@<PROJECT ID>.iam.gserviceaccount.com"
preemptible = false
# initial_node_count = 80
}
]
# node_pools_tags = {
# all = []
# default-node-pool = ["default-node-pool",]
# }
}
방화벽
module "firewall_rules" {
source = "terraform-google-modules/network/google//modules/firewall-rules"
project_id = var.project_id
network_name = module.vpc.network_name
rules = [{
name = "allow-istio-ingress"
description = null
direction = "INGRESS"
priority = null
ranges = ["${var.control_plane_cidr}"]
source_tags = null
source_service_accounts = null
target_tags = null
target_service_accounts = null
allow = [{
protocol = "tcp"
ports = ["15017"]
}]
deny = []
log_config = {
metadata = "INCLUDE_ALL_METADATA"
}
}]
depends_on = [module.gke]
}
비록 GKE 모듈이 태그를 명시적으로 정의하기 위한 태그 속성을 가지고 있지만, 우리는 그것을 적절하게 인스턴스화한 다음 방화벽 모듈에서 동일한 태그 값을 가져오기 위한 지원이 여전히 필요하다.
나는 이전에 게시된 내 질문에 대한 실용적인 해결책을 찾았다. GKE 모듈 스니펫을 참조하십시오. 이 경우 아래 부분만 수정하면 해당 노드 풀의 모든 노드를 가리키는 명시적 네트워크 태그가 생성됩니다.
module "gke" {
.
.
node_pools = [
{
name = "gke-node-pool"
.
.
.
},
]
node_pools_tags = {
"gke-node-pool" = "gke-node-pool-network-tag"
}
}
공급자의 리소스()를 사용하는 경우 다음과 같은 작업을 수행하여 노드에 네트워크 태그를 지정할 수 있습니다:
resource "google_container_node_pool" "some_node_pool" {
name = "my-node-pool"
.
.
.
node_config {
tags = "gke-node-pool-network-tag"
}
}
반응형
'개발하자' 카테고리의 다른 글
테라폼: 수정이 감지된 경우에만 태그를 업데이트하는 방법 (0) | 2023.08.31 |
---|---|
유형 스크립트 오류 JSX 요소 유형 '보기'가 JSX 요소에 대한 생성자 함수가 아닙니다 (0) | 2023.08.30 |
사용자 이름과 비밀번호만 허용하지 않는 구글의 정책 업데이트 후 파이썬을 사용하여 이메일을 보내는 방법은 무엇입니까? (0) | 2023.08.29 |
파이썬의 다른 열 값을 기준으로 한 열에 대한 값의 평균을 구하는 방법(판다, 주피터) (0) | 2023.08.29 |
명령줄 인수가 너무 많습니다. 테라폼 계획 (0) | 2023.08.28 |