infra/modules/kubernetes/main.tf (46 lines of code) (raw):
/**
* Copyright 2023 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
resource "google_container_cluster" "control_plane" {
name = var.cluster_name
location = var.region
node_locations = var.zones
network = var.network_self_link
networking_mode = "VPC_NATIVE"
enable_autopilot = true
ip_allocation_policy {
}
resource_labels = var.labels
}
resource "google_service_account" "gcp" {
account_id = var.gcp_service_account_id
description = "This sa is created by terraform and being used to bind k8s sa"
}
resource "google_project_iam_member" "gcp" {
for_each = toset(var.gcp_service_account_iam_roles)
project = var.project_id
role = each.key
member = "serviceAccount:${google_service_account.gcp.email}"
}
resource "google_service_account_iam_binding" "k8s" {
for_each = toset([
"roles/iam.workloadIdentityUser",
])
service_account_id = google_service_account.gcp.name
role = each.value
members = [
"serviceAccount:${google_container_cluster.control_plane.workload_identity_config[0].workload_pool}[${var.k8s_namespace_name}/${var.k8s_service_account_name}]"
]
}