anthos-attached-clusters/aks/main.tf (86 lines of code) (raw):

/** * Copyright 2024 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. */ locals { tags = { "owner" = var.owner } } resource "azurerm_resource_group" "aks" { name = "${var.name_prefix}-rg" location = var.azure_region tags = merge(local.tags, var.tags) } resource "azurerm_kubernetes_cluster" "aks" { name = "${var.name_prefix}-cluster" location = azurerm_resource_group.aks.location resource_group_name = azurerm_resource_group.aks.name dns_prefix = "${var.name_prefix}-dns" kubernetes_version = var.k8s_version # If not enabling the OIDC issuer, extra steps need to be taken to manually retrieve JWKs from the cluster. oidc_issuer_enabled = true default_node_pool { name = "default" node_count = var.node_count vm_size = "Standard_D2_v2" tags = merge(local.tags, var.tags) } identity { type = "SystemAssigned" } tags = merge(local.tags, var.tags) } data "google_project" "project" { } provider "helm" { alias = "bootstrap_installer" kubernetes { host = azurerm_kubernetes_cluster.aks.kube_config[0].host username = azurerm_kubernetes_cluster.aks.kube_config[0].username password = azurerm_kubernetes_cluster.aks.kube_config[0].password client_certificate = base64decode(azurerm_kubernetes_cluster.aks.kube_config[0].client_certificate) client_key = base64decode(azurerm_kubernetes_cluster.aks.kube_config[0].client_key) cluster_ca_certificate = base64decode(azurerm_kubernetes_cluster.aks.kube_config[0].cluster_ca_certificate) } } module "attached_install_manifest" { source = "../modules/attached-install-manifest" attached_cluster_name = "${var.name_prefix}-cluster" attached_cluster_fleet_project = data.google_project.project.project_id gcp_location = var.gcp_location platform_version = var.platform_version providers = { helm = helm.bootstrap_installer } depends_on = [ azurerm_kubernetes_cluster.aks ] } resource "google_container_attached_cluster" "primary" { name = "${var.name_prefix}-cluster" project = data.google_project.project.project_id location = var.gcp_location description = "AKS attached cluster example" distribution = "aks" platform_version = var.platform_version oidc_config { issuer_url = azurerm_kubernetes_cluster.aks.oidc_issuer_url # NOTE: If `oidc_issuer_enabled` is not set to true above, `jwks` needs to be set here. # JWKs can be retrieved from the cluster using: `kubectl get --raw /openid/v1/jwks` and # must be base64 encoded. } fleet { project = "projects/${data.google_project.project.number}" } # Optional: # logging_config { # component_config { # enable_components = ["SYSTEM_COMPONENTS", "WORKLOADS"] # } # } # Optional: # monitoring_config { # managed_prometheus_config { # enabled = true # } # } # Optional: # authorization { # admin_users = ["user1@example.com", "user2@example.com"] # admin_groups = ["group1@example.com", "group2@example.com"] # } depends_on = [ module.attached_install_manifest ] }