✨
【GKE】Terraformでクラスタを生成するときの注意点
発端
Terraformでクラスタを立ち上げて、PodやService、IngressといったKubernetesリソースをデプロイを完了し、GCPのコンソール上で、ヘルスチェックをしていたときに、以下の問題に気が付きました。
発生した問題
「Ingressの詳細」に表示されているログを確認すると、以下のようなエラーが発生していました。
Error 400: Invalid value for field 'resource.IPAddress': 'xxx.xxx.xxx.xxx'. Specified IP address 10.0.2.3 doesn't belong to the (sub)network default or to the instance gke-xxx-xxx-...
解決策
やはりドキュメントをよく読んでおくべきでした。
gcloudやGoogle Console上でクラスタを生成する場合は、デフォルトでVPC-nativeになっていますが、Terraformでクラスタを構築する場合は、デフォルトではroutes-basedなクラスタとして生成されます。VPC-nativeなクラスタを生成するため、以下のように修正。
network.tf
resource "google_compute_subnetwork" "custom" {
name = "run-subnetwork"
ip_cidr_range = "10.2.0.0/16"
region = var.region
network = google_compute_network.custom.id
secondary_ip_range {
range_name = "services-range"
ip_cidr_range = "192.168.1.0/24"
}
secondary_ip_range {
range_name = "pod-ranges"
ip_cidr_range = "192.168.64.0/22"
}
}
resource "google_compute_network" "custom" {
name = "run-network"
auto_create_subnetworks = false
}
cluster.tf
resource "google_container_cluster" "primary" {
name = "my-gke-cluster"
location = var.location
remove_default_node_pool = true
initial_node_count = 1
network = google_compute_network.custom.id
subnetwork = google_compute_subnetwork.custom.id
ip_allocation_policy {
cluster_secondary_range_name = "pod-ranges"
services_secondary_range_name = "services-range"
}
}
resource "google_container_node_pool" "primary_nodes" {
name = "my-gke-node-pool"
location = var.location
cluster = google_container_cluster.primary.name
node_count = 1
node_config {
machine_type = "e2-medium"
service_account = google_service_account.default.email
oauth_scopes = [
"https://www.googleapis.com/auth/cloud-platform"
]
}
}
resource "google_container_node_pool" "primary_preemptible_nodes" {
name = "my-gke-preemptible-node-pool"
location = var.location
cluster = google_container_cluster.primary.name
node_count = 1
node_config {
preemptible = true
machine_type = "e2-medium"
service_account = google_service_account.default.email
oauth_scopes = [
"https://www.googleapis.com/auth/cloud-platform"
]
}
}
Discussion