Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

This repo is a companion repo to the [Manage Kubernetes Resources via Terraform](https://learn.hashicorp.com/tutorials/terraform/kubernetes-provider?in=terraform/kubernetes), containing Terraform configuration files to deploy and expose a NGINX service using the Terraform Kubernetes Provider.

This branch contains configuration for the generic Kubernetes provider.

Visit the following branches to see their respective Terraform Kubernetes configuration.
Navigate to the following directories to see their respective Terraform Kubernetes configuration.

1. AKS Kubernetes configuration - [`aks`](https://github.com/hashicorp/learn-terraform-deploy-nginx-kubernetes-provider/tree/aks)
1. EKS Kubernetes configuration - [`eks`](https://github.com/hashicorp/learn-terraform-deploy-nginx-kubernetes-provider/tree/eks)
1. GKE Kubernetes configuration - [`gke`](https://github.com/hashicorp/learn-terraform-deploy-nginx-kubernetes-provider/tree/gke)
1. Kind Kubernetes configuration - [`kind`](./kind/)
1. AKS Kubernetes configuration - [`aks`](./aks)
1. EKS Kubernetes configuration - [`eks`](./eks)
1. GKE Kubernetes configuration - [`gke`](./gke)
41 changes: 41 additions & 0 deletions aks/.terraform.lock.hcl

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

38 changes: 38 additions & 0 deletions aks/kubernetes.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "3.0.2"
}
kubernetes = {
source = "hashicorp/kubernetes"
version = ">= 2.0.1"
}
}
}

data "terraform_remote_state" "aks" {
backend = "local"

config = {
path = "../learn-terraform-provision-aks-cluster/terraform.tfstate"
}
}

# Retrieve AKS cluster information
provider "azurerm" {
features {}
}

data "azurerm_kubernetes_cluster" "cluster" {
name = data.terraform_remote_state.aks.outputs.kubernetes_cluster_name
resource_group_name = data.terraform_remote_state.aks.outputs.resource_group_name
}

provider "kubernetes" {
host = data.azurerm_kubernetes_cluster.cluster.kube_config.0.host

client_certificate = base64decode(data.azurerm_kubernetes_cluster.cluster.kube_config.0.client_certificate)
client_key = base64decode(data.azurerm_kubernetes_cluster.cluster.kube_config.0.client_key)
cluster_ca_certificate = base64decode(data.azurerm_kubernetes_cluster.cluster.kube_config.0.cluster_ca_certificate)
}
20 changes: 19 additions & 1 deletion .terraform.lock.hcl → eks/.terraform.lock.hcl

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

45 changes: 45 additions & 0 deletions eks/kubernetes.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = ">= 4.48.0"
}

kubernetes = {
source = "hashicorp/kubernetes"
version = ">= 2.16.1"
}
}
}

data "terraform_remote_state" "eks" {
backend = "local"

config = {
path = "../learn-terraform-provision-eks-cluster/terraform.tfstate"
}
}

# Retrieve EKS cluster information
provider "aws" {
region = data.terraform_remote_state.eks.outputs.region
}

data "aws_eks_cluster" "cluster" {
name = data.terraform_remote_state.eks.outputs.cluster_name
}

provider "kubernetes" {
host = data.aws_eks_cluster.cluster.endpoint
cluster_ca_certificate = base64decode(data.aws_eks_cluster.cluster.certificate_authority.0.data)
exec {
api_version = "client.authentication.k8s.io/v1beta1"
command = "aws"
args = [
"eks",
"get-token",
"--cluster-name",
data.aws_eks_cluster.cluster.name
]
}
}
38 changes: 38 additions & 0 deletions gke/.terraform.lock.hcl

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

43 changes: 43 additions & 0 deletions gke/kubernetes.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
terraform {
required_providers {
google = {
source = "hashicorp/google"
version = "3.52.0"
}
kubernetes = {
source = "hashicorp/kubernetes"
version = ">= 2.0.1"
}
}
}

data "terraform_remote_state" "gke" {
backend = "local"

config = {
path = "../learn-terraform-provision-gke-cluster/terraform.tfstate"
}
}

# Retrieve GKE cluster information
provider "google" {
project = data.terraform_remote_state.gke.outputs.project_id
region = data.terraform_remote_state.gke.outputs.region
}

# Configure kubernetes provider with Oauth2 access token.
# https://registry.terraform.io/providers/hashicorp/google/latest/docs/data-sources/client_config
# This fetches a new token, which will expire in 1 hour.
data "google_client_config" "default" {}

data "google_container_cluster" "my_cluster" {
name = data.terraform_remote_state.gke.outputs.kubernetes_cluster_name
location = data.terraform_remote_state.gke.outputs.region
}

provider "kubernetes" {
host = data.terraform_remote_state.gke.outputs.kubernetes_cluster_host

token = data.google_client_config.default.access_token
cluster_ca_certificate = base64decode(data.google_container_cluster.my_cluster.master_auth[0].cluster_ca_certificate)
}
File renamed without changes.
File renamed without changes.