Kubernetes provider
You will need the following environment variables to be set:
ARM_SUBSCRIPTION_IDARM_TENANT_IDARM_CLIENT_IDARM_CLIENT_SECRET
Ensure that KUBE_CONFIG_FILE and KUBE_CONFIG_FILES environment variables are NOT set, as they will interfere with the cluster build.
```hcl terraform { required_providers { kubernetes = { source = “hashicorp/kubernetes” version = “>= 2.0.3” } azurerm = { source = “hashicorp/azurerm” version = “2.42” } helm = { source = “hashicorp/helm” version = “>= 2.1.0” } } }
data “azurerm_kubernetes_cluster” “default” { depends_on = [module.aks-cluster] # refresh cluster state before reading name = local.cluster_name resource_group_name = local.cluster_name }
provider “kubernetes” { host = data.azurerm_kubernetes_cluster.default.kube_config.0.host client_certificate = base64decode(data.azurerm_kubernetes_cluster.default.kube_config.0.client_certificate) client_key = base64decode(data.azurerm_kubernetes_cluster.default.kube_config.0.client_key) cluster_ca_certificate = base64decode(data.azurerm_kubernetes_cluster.default.kube_config.0.cluster_ca_certificate) } ```plaintext
Deploy Nginx Controller:
```hcl
Copyright (c) HashiCorp, Inc.
SPDX-License-Identifier: MPL-2.0
terraform { required_providers { kubernetes = { source = “hashicorp/kubernetes” version = “>= 2.0.3” } helm = { source = “hashicorp/helm” version = “>= 2.1.0” } } }
resource “kubernetes_namespace” “test” { metadata { name = “test” } }
resource “kubernetes_deployment” “test” { metadata { name = “test” namespace = kubernetes_namespace.test.metadata.0.name } spec { replicas = 2 selector { match_labels = { app = “test” } } template { metadata { labels = { app = “test” } } spec { container { image = “nginx:1.19.4” name = “nginx”
resources {
limits = {
memory = "512M"
cpu = "1"
}
requests = {
memory = "256M"
cpu = "50m"
}
}
}
}
} } }
resource “helm_release” “nginx_ingress” { name = “nginx-ingress-controller”
repository = “https://charts.bitnami.com/bitnami” chart = “nginx-ingress-controller”
set { name = “service.type” value = “ClusterIP” } }
resource “local_file” “kubeconfig” { content = var.kubeconfig filename = “${path.root}/kubeconfig” } ```plaintext