iac/tf-multienv-cicd-anthos-autopilot/env-development.tf (98 lines of code) (raw):
# Copyright 2022 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.
# Cloud Foundation Toolkit GKE module requires cluster-specific kubernetes provider
provider "kubernetes" {
alias = "development"
host = "https://${module.gke_development.endpoint}"
token = data.google_client_config.default.access_token
cluster_ca_certificate = base64decode(module.gke_development.ca_certificate)
}
# development autopilot cluster
module "gke_development" {
source = "terraform-google-modules/kubernetes-engine/google//modules/beta-autopilot-private-cluster"
project_id = var.project_id
name = "development"
regional = true
region = var.region
network = local.network_name
subnetwork = local.network.development.subnetwork
ip_range_pods = local.network.development.ip_range_pods
ip_range_services = local.network.development.ip_range_services
enable_private_nodes = true
enable_private_endpoint = true
master_authorized_networks = [{
cidr_block = module.network.subnets["${var.region}/${local.network.development.master_auth_subnet_name}"].ip_cidr_range
display_name = local.network.development.subnetwork
}]
master_ipv4_cidr_block = "10.6.0.0/28"
release_channel = "RAPID"
enable_vertical_pod_autoscaling = true
horizontal_pod_autoscaling = true
create_service_account = false # currently not supported by terraform for autopilot clusters
cluster_resource_labels = { "mesh_id" : "proj-${data.google_project.project.number}" }
providers = {
kubernetes = kubernetes.development
}
depends_on = [
module.enabled_google_apis,
module.network,
google_gke_hub_feature.asm,
google_gke_hub_feature.acm
]
}
# development GKE workload GSA
resource "google_service_account" "gke_workload_development" {
account_id = "gke-workload-development"
}
# binding development GKE workload GSA to KSA
resource "google_service_account_iam_member" "gke_workload_development_identity" {
service_account_id = google_service_account.gke_workload_development.id
role = "roles/iam.workloadIdentityUser"
member = "serviceAccount:${var.project_id}.svc.id.goog[bank-of-anthos-development/bank-of-anthos]"
depends_on = [
module.gke_development
]
}
# binding development GKE workload GSA to KSA
resource "google_service_account_iam_member" "gke_workload_development_admin" {
service_account_id = google_service_account.gke_workload_development.id
role = "roles/iam.serviceAccountAdmin"
member = "serviceAccount:${google_service_account.cloud_build_pr.email}"
depends_on = [
module.gke_development
]
}
# create fleet membership for development GKE cluster
resource "google_gke_hub_membership" "development" {
provider = google-beta
project = var.project_id
membership_id = "development-membership"
endpoint {
gke_cluster {
resource_link = "//container.googleapis.com/${module.gke_development.cluster_id}"
}
}
authority {
issuer = "https://container.googleapis.com/v1/${module.gke_development.cluster_id}"
}
}
# configure ASM for development GKE cluster
resource "google_gke_hub_feature_membership" "asm_development" {
project = var.project_id
location = "global"
feature = google_gke_hub_feature.asm.name
membership = google_gke_hub_membership.development.membership_id
mesh {
management = "MANAGEMENT_AUTOMATIC"
}
provider = google-beta
}
# configure ACM for development GKE cluster
resource "google_gke_hub_feature_membership" "acm_development" {
project = var.project_id
location = "global"
feature = google_gke_hub_feature.acm.name
membership = google_gke_hub_membership.development.membership_id
configmanagement {
config_sync {
git {
sync_repo = local.sync_repo_url
sync_branch = var.sync_branch
policy_dir = "iac/acm-multienv-cicd-anthos-autopilot/overlays/development"
secret_type = "none"
}
source_format = "unstructured"
}
}
provider = google-beta
}