add bucket and private-cluster-module
This commit is contained in:
parent
a77c2a72f2
commit
4f58bc6b17
|
@ -0,0 +1,81 @@
|
|||
# bucket
|
||||
|
||||
You should be an admin/owner of your sandbox or have enougth permissions to create a bucket.
|
||||
|
||||
If you use a lot of accounts and specific IAM rules, you can check the permissions of the user with the following command:
|
||||
|
||||
```shell
|
||||
gcloud projects get-iam-policy <GCP_PROJECT> --format=json | jq '.bindings[] | select(.members[] | contains("user:<YOUR@gmail.com>"))'
|
||||
```
|
||||
|
||||
`"role": "roles/owner"` would be great for you.
|
||||
|
||||
## How to use the code
|
||||
|
||||
1. Create `terraform.tfvars` file with a few variables
|
||||
|
||||
```shell
|
||||
project = "your-gcp-project"
|
||||
iam_user_email = "your@gmail.com"
|
||||
```
|
||||
|
||||
`region` is optional.
|
||||
|
||||
2. Create bucket
|
||||
|
||||
All commands will be applied via Terraform 1.8.0 or via OpenTofu, the same version.
|
||||
I use alias `t` for the commands.
|
||||
|
||||
```shell
|
||||
t init
|
||||
t apply
|
||||
```
|
||||
|
||||
2. Destrouy bucket sfter your tests
|
||||
|
||||
```shell
|
||||
t destroy
|
||||
```
|
||||
|
||||
<!-- BEGIN_TF_DOCS -->
|
||||
## Requirements
|
||||
|
||||
| Name | Version |
|
||||
|------|---------|
|
||||
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | ~>1.8.0 |
|
||||
| <a name="requirement_google"></a> [google](#requirement\_google) | ~>5.41.0 |
|
||||
|
||||
## Providers
|
||||
|
||||
| Name | Version |
|
||||
|------|---------|
|
||||
| <a name="provider_google"></a> [google](#provider\_google) | 5.41.0 |
|
||||
|
||||
## Modules
|
||||
|
||||
| Name | Source | Version |
|
||||
|------|--------|---------|
|
||||
| <a name="module_bucket"></a> [bucket](#module\_bucket) | terraform-google-modules/cloud-storage/google//modules/simple_bucket | ~> 6.0 |
|
||||
|
||||
## Resources
|
||||
|
||||
| Name | Type |
|
||||
|------|------|
|
||||
| [google_client_config.default](https://registry.terraform.io/providers/hashicorp/google/latest/docs/data-sources/client_config) | data source |
|
||||
|
||||
## Inputs
|
||||
|
||||
| Name | Description | Type | Default | Required |
|
||||
|------|-------------|------|---------|:--------:|
|
||||
| <a name="input_iam_user_email"></a> [iam\_user\_email](#input\_iam\_user\_email) | Your gcloud account | `string` | `"demo@gmail.com"` | no |
|
||||
| <a name="input_project"></a> [project](#input\_project) | Google Project to create resources in | `string` | `"demo"` | no |
|
||||
| <a name="input_region"></a> [region](#input\_region) | The region to host the cluster in | `string` | `"europe-west1"` | no |
|
||||
|
||||
## Outputs
|
||||
|
||||
| Name | Description |
|
||||
|------|-------------|
|
||||
| <a name="output_gcloud_bucket_link"></a> [gcloud\_bucket\_link](#output\_gcloud\_bucket\_link) | Bucket web ui link |
|
||||
| <a name="output_project"></a> [project](#output\_project) | GCloud Project ID |
|
||||
| <a name="output_region"></a> [region](#output\_region) | GCloud Region |
|
||||
<!-- END_TF_DOCS -->
|
|
@ -0,0 +1,18 @@
|
|||
module "bucket" {
|
||||
# https://registry.terraform.io/modules/terraform-google-modules/cloud-storage/google/6.0.1/submodules/simple_bucket?tab=inputs
|
||||
source = "terraform-google-modules/cloud-storage/google//modules/simple_bucket"
|
||||
version = "~> 6.0"
|
||||
|
||||
name = "${var.project}-bucket"
|
||||
project_id = var.project
|
||||
location = "eu"
|
||||
|
||||
force_destroy = true # Use this only for testing purposes
|
||||
|
||||
iam_members = [{
|
||||
role = "roles/storage.objectAdmin"
|
||||
member = "user:${var.iam_user_email}"
|
||||
}]
|
||||
|
||||
autoclass = true
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
output "region" {
|
||||
description = "GCloud Region"
|
||||
value = var.region
|
||||
}
|
||||
|
||||
output "project" {
|
||||
description = "GCloud Project ID"
|
||||
value = var.project
|
||||
}
|
||||
|
||||
output "gcloud_bucket_link" {
|
||||
description = "Bucket web ui link"
|
||||
value = "https://console.cloud.google.com/storage/browser/${module.bucket.name};tab=objects?forceOnBucketsSortingFiltering=true&project=${var.project}&prefix=&forceOnObjectsSortingFiltering=false"
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
data "google_client_config" "default" {}
|
||||
|
||||
provider "google" {
|
||||
project = var.project
|
||||
region = var.region
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
variable "project" {
|
||||
type = string
|
||||
description = "Google Project to create resources in"
|
||||
default = "demo"
|
||||
}
|
||||
|
||||
variable "region" {
|
||||
type = string
|
||||
description = "The region to host the cluster in"
|
||||
default = "europe-west1"
|
||||
}
|
||||
|
||||
variable "iam_user_email" {
|
||||
type = string
|
||||
description = "Your gcloud account"
|
||||
default = "demo@gmail.com"
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
terraform {
|
||||
required_version = "~>1.8.0"
|
||||
|
||||
required_providers {
|
||||
# https://github.com/hashicorp/terraform-provider-google
|
||||
google = {
|
||||
source = "hashicorp/google"
|
||||
version = "~>5.41.0"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,160 @@
|
|||
# private-cluster-module
|
||||
|
||||
## What is created ty thah template
|
||||
|
||||
This example is using remote bucket state. You can modify this manually or not.
|
||||
|
||||
1. VPC network with one subnet
|
||||
2. GKE cluster with external endpoint and only authorized networks access.
|
||||
3. Workload nodepool with one node
|
||||
3. Namespace `this-is-demo-cluster`
|
||||
|
||||
## How to use the code
|
||||
|
||||
### Optional bucket usage.
|
||||
If you would try to use bucket state, you need to uncomment code block in [backend.tf](backend.tf).
|
||||
|
||||
Then go to [../bucket](../bucket/) directory and create the bucket by following the instructions at [README](../bucket/README.md).
|
||||
|
||||
Then return to this directory.
|
||||
|
||||
1. Create `terraform.tfvars` file with a few variables
|
||||
|
||||
```shell
|
||||
project = "your-gcp-project"
|
||||
host_project = "your-gcp-project"
|
||||
|
||||
master_authorized_networks = [
|
||||
{ cidr_block = "0.0.0.1/32", display_name = "your current IP" }
|
||||
]
|
||||
```
|
||||
|
||||
`region`, `zone` and `environment_name` are optional
|
||||
|
||||
Your current IP you can get via this command for example:
|
||||
|
||||
```shell
|
||||
curl -s ifconfig.me
|
||||
```
|
||||
|
||||
2. Create cluster
|
||||
All commands will be applied via Terraform 1.8.0 or via OpenTofu, the same version.
|
||||
I use alias `t` for the commands.
|
||||
|
||||
```shell
|
||||
t init
|
||||
t apply
|
||||
```
|
||||
|
||||
3. Get the credentials for the new cluster (configure kubeconfig)
|
||||
|
||||
You can see all useful commands and links in the output:
|
||||
|
||||
```shell
|
||||
t output
|
||||
```
|
||||
|
||||
There is a manual command:
|
||||
|
||||
```shell
|
||||
gcloud container clusters get-credentials $(t output -raw kubernetes_cluster_name) --region $(t output -raw zone) --project $(t output -raw project)
|
||||
```
|
||||
|
||||
Or just use `./get-credentials.sh`
|
||||
|
||||
4. Destroy all resources
|
||||
|
||||
```shell
|
||||
t destroy
|
||||
```
|
||||
|
||||
## Additional info
|
||||
|
||||
Some manual tests.
|
||||
|
||||
### terraform
|
||||
✅ create cluster<br>
|
||||
✅ `./get-credentials.sh`<br>
|
||||
✅ try access from different networks<br>
|
||||
✅ manual cred command<br>
|
||||
✅ output `gcloud_gke_get_creds` command<br>
|
||||
✅ output links<br>
|
||||
✅ create simple nginx pod `kubectl run nginx --image=nginx:latest -n default && kubectl get po -w`<br>
|
||||
✅ `flux install && kubectl get po -n flux-system -w`<br>
|
||||
✅ destroy cluster<br>
|
||||
✅ test bucket backend
|
||||
|
||||
### opentofu
|
||||
✅ create cluster<br>
|
||||
✅ `./get-credentials.sh`<br>
|
||||
✅ try access from different networks<br>
|
||||
✅ manual cred command<br>
|
||||
✅ output `gcloud_gke_get_creds` command<br>
|
||||
✅ output links<br>
|
||||
✅ create simple nginx pod `kubectl run nginx --image=nginx:latest -n default && kubectl get po -w`<br>
|
||||
✅ `flux install && kubectl get po -n flux-system -w`<br>
|
||||
✅ destroy cluster<br>
|
||||
✅ test bucket backend
|
||||
|
||||
<!-- BEGIN_TF_DOCS -->
|
||||
## Requirements
|
||||
|
||||
| Name | Version |
|
||||
|------|---------|
|
||||
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | ~>1.8.0 |
|
||||
| <a name="requirement_google"></a> [google](#requirement\_google) | ~>5.41.0 |
|
||||
| <a name="requirement_google-beta"></a> [google-beta](#requirement\_google-beta) | ~> 5.41 |
|
||||
| <a name="requirement_kubernetes"></a> [kubernetes](#requirement\_kubernetes) | ~>2.32.0 |
|
||||
|
||||
## Providers
|
||||
|
||||
| Name | Version |
|
||||
|------|---------|
|
||||
| <a name="provider_google"></a> [google](#provider\_google) | 5.41.0 |
|
||||
| <a name="provider_kubernetes"></a> [kubernetes](#provider\_kubernetes) | 2.32.0 |
|
||||
|
||||
## Modules
|
||||
|
||||
| Name | Source | Version |
|
||||
|------|--------|---------|
|
||||
| <a name="module_gke"></a> [gke](#module\_gke) | terraform-google-modules/kubernetes-engine/google//modules/beta-private-cluster-update-variant | 32.0.0 |
|
||||
|
||||
## Resources
|
||||
|
||||
| Name | Type |
|
||||
|------|------|
|
||||
| [google_compute_network.vpc](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_network) | resource |
|
||||
| [google_compute_subnetwork.subnet](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_subnetwork) | resource |
|
||||
| [google_project_service.service_networking](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/project_service) | resource |
|
||||
| [kubernetes_namespace.this-is-demo-cluster](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/namespace) | resource |
|
||||
| [google_client_config.default](https://registry.terraform.io/providers/hashicorp/google/latest/docs/data-sources/client_config) | data source |
|
||||
|
||||
## Inputs
|
||||
|
||||
| Name | Description | Type | Default | Required |
|
||||
|------|-------------|------|---------|:--------:|
|
||||
| <a name="input_bucket_credentials_json"></a> [bucket\_credentials\_json](#input\_bucket\_credentials\_json) | Default path to your gcloud credentials json file | `string` | `"~/.config/gcloud/application_default_credentials.json"` | no |
|
||||
| <a name="input_bucket_name"></a> [bucket\_name](#input\_bucket\_name) | Bucket name | `string` | `"your-project-bucket"` | no |
|
||||
| <a name="input_bucket_prefix"></a> [bucket\_prefix](#input\_bucket\_prefix) | Path to store your state in bucket | `string` | `"terraform/state/demo"` | no |
|
||||
| <a name="input_environment_name"></a> [environment\_name](#input\_environment\_name) | Environment name | `string` | `"demo"` | no |
|
||||
| <a name="input_host_project"></a> [host\_project](#input\_host\_project) | The GCP project housing the VPC network to host the cluster in | `string` | `"demo"` | no |
|
||||
| <a name="input_master_authorized_networks"></a> [master\_authorized\_networks](#input\_master\_authorized\_networks) | List of master authorized networks. If none are provided, disallow external access (except the cluster node IPs, which GKE automatically whitelists). | `list(object({ cidr_block = string, display_name = string }))` | <pre>[<br> {<br> "cidr_block": "1.1.1.1/32",<br> "display_name": "Use your IP/VPN IP here"<br> }<br>]</pre> | no |
|
||||
| <a name="input_project"></a> [project](#input\_project) | Google Project to create resources in | `string` | `"demo"` | no |
|
||||
| <a name="input_region"></a> [region](#input\_region) | The region to host the cluster in | `string` | `"europe-west1"` | no |
|
||||
| <a name="input_vpc_network"></a> [vpc\_network](#input\_vpc\_network) | The GCP network to apply firewall rules in | `string` | `"demo-vpc"` | no |
|
||||
| <a name="input_zone"></a> [zone](#input\_zone) | The region to host the cluster in | `string` | `"europe-west1-b"` | no |
|
||||
|
||||
## Outputs
|
||||
|
||||
| Name | Description |
|
||||
|------|-------------|
|
||||
| <a name="output_gcloud_gke_get_creds"></a> [gcloud\_gke\_get\_creds](#output\_gcloud\_gke\_get\_creds) | Command to get GKE credentials |
|
||||
| <a name="output_gcloud_gke_link"></a> [gcloud\_gke\_link](#output\_gcloud\_gke\_link) | GKE web ui link |
|
||||
| <a name="output_gcloud_vpc_link"></a> [gcloud\_vpc\_link](#output\_gcloud\_vpc\_link) | VPC web ui link |
|
||||
| <a name="output_kubernetes_cluster_host"></a> [kubernetes\_cluster\_host](#output\_kubernetes\_cluster\_host) | GKE Cluster Host |
|
||||
| <a name="output_kubernetes_cluster_name"></a> [kubernetes\_cluster\_name](#output\_kubernetes\_cluster\_name) | GKE Cluster Name |
|
||||
| <a name="output_master_authorized_networks_config"></a> [master\_authorized\_networks\_config](#output\_master\_authorized\_networks\_config) | Here are networks that are allowed to reach your k8s API |
|
||||
| <a name="output_project"></a> [project](#output\_project) | GCloud Project ID |
|
||||
| <a name="output_region"></a> [region](#output\_region) | GCloud Region |
|
||||
| <a name="output_zone"></a> [zone](#output\_zone) | GCloud Project ID |
|
||||
<!-- END_TF_DOCS -->
|
|
@ -0,0 +1,10 @@
|
|||
# Optionallly you can use bucket as backend
|
||||
# If you would to do that - uncomment code below and follow instructions in README.md
|
||||
|
||||
terraform {
|
||||
backend "gcs" {
|
||||
bucket = var.bucket_name
|
||||
prefix = var.bucket_prefix
|
||||
credentials = var.bucket_credentials_json
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
resource "kubernetes_namespace" "this-is-demo-cluster" {
|
||||
metadata {
|
||||
name = "this-is-demo-cluster"
|
||||
}
|
||||
depends_on = [module.gke]
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
#!/bin/bash
|
||||
|
||||
if grep -H "opentofu.org" .terraform.lock.hcl > /dev/null; then
|
||||
echo "trying to read tofu state"
|
||||
gcloud container clusters get-credentials $(tofu output -raw kubernetes_cluster_name) --region $(tofu output -raw region) --project $(tofu output -raw project)
|
||||
else
|
||||
echo "trying to read terraform state"
|
||||
gcloud container clusters get-credentials $(terraform output -raw kubernetes_cluster_name) --region $(terraform output -raw region) --project $(terraform output -raw project)
|
||||
fi
|
|
@ -0,0 +1,73 @@
|
|||
locals {
|
||||
cluster_name = "${var.environment_name}-k8s-${var.region}"
|
||||
}
|
||||
|
||||
module "gke" {
|
||||
# https://github.com/terraform-google-modules/terraform-google-kubernetes-engine/tree/master/modules/beta-private-cluster-update-variant
|
||||
source = "terraform-google-modules/kubernetes-engine/google//modules/beta-private-cluster-update-variant"
|
||||
version = "32.0.0"
|
||||
project_id = var.project
|
||||
network_project_id = var.host_project
|
||||
name = local.cluster_name
|
||||
region = var.region
|
||||
zones = [var.zone]
|
||||
network = google_compute_network.vpc.name
|
||||
subnetwork = google_compute_subnetwork.subnet.name
|
||||
ip_range_pods = "${var.project}-gke-pods"
|
||||
ip_range_services = "${var.project}-gke-services"
|
||||
http_load_balancing = true
|
||||
horizontal_pod_autoscaling = true
|
||||
enable_vertical_pod_autoscaling = true
|
||||
network_policy = true
|
||||
remove_default_node_pool = true
|
||||
release_channel = "UNSPECIFIED"
|
||||
create_service_account = false # means gsa, NOT k8s_sa
|
||||
dns_cache = true
|
||||
|
||||
deletion_protection = false # Use this only for testing purposess!
|
||||
|
||||
maintenance_start_time = "2021-04-20T01:00:00Z"
|
||||
maintenance_end_time = "2021-04-20T05:00:00Z"
|
||||
maintenance_recurrence = "FREQ=WEEKLY;BYDAY=MO,TH,SU"
|
||||
|
||||
master_authorized_networks = var.master_authorized_networks
|
||||
|
||||
node_pools = [
|
||||
{
|
||||
name = "node-pool-1"
|
||||
machine_type = "n2-standard-8"
|
||||
min_count = 1
|
||||
max_count = 2
|
||||
disk_size_gb = 30
|
||||
disk_type = "pd-standard"
|
||||
image_type = "COS_CONTAINERD"
|
||||
auto_repair = true
|
||||
auto_upgrade = true
|
||||
preemptible = true
|
||||
initial_node_count = 1
|
||||
node_metadata = "GKE_METADATA"
|
||||
},
|
||||
]
|
||||
|
||||
node_pools_oauth_scopes = {
|
||||
all = [
|
||||
"https://www.googleapis.com/auth/cloud-platform",
|
||||
"https://www.googleapis.com/auth/compute",
|
||||
"https://www.googleapis.com/auth/devstorage.read_only",
|
||||
"https://www.googleapis.com/auth/logging.write",
|
||||
"https://www.googleapis.com/auth/monitoring",
|
||||
]
|
||||
}
|
||||
|
||||
node_pools_tags = {
|
||||
all = [
|
||||
"${local.cluster_name}-${var.region}",
|
||||
"${local.cluster_name}-${var.region}-nodes"
|
||||
]
|
||||
}
|
||||
|
||||
depends_on = [
|
||||
google_compute_network.vpc,
|
||||
google_compute_subnetwork.subnet
|
||||
]
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
output "region" {
|
||||
description = "GCloud Region"
|
||||
value = var.region
|
||||
}
|
||||
|
||||
output "project" {
|
||||
description = "GCloud Project ID"
|
||||
value = var.project
|
||||
}
|
||||
|
||||
output "zone" {
|
||||
description = "GCloud Project ID"
|
||||
value = var.zone
|
||||
}
|
||||
|
||||
output "kubernetes_cluster_name" {
|
||||
description = "GKE Cluster Name"
|
||||
value = module.gke.name
|
||||
}
|
||||
|
||||
output "kubernetes_cluster_host" {
|
||||
description = "GKE Cluster Host"
|
||||
sensitive = true
|
||||
value = module.gke.endpoint
|
||||
}
|
||||
|
||||
output "gcloud_gke_get_creds" {
|
||||
description = "Command to get GKE credentials"
|
||||
value = "gcloud container clusters get-credentials ${local.cluster_name} --region ${var.region} --project ${var.project}"
|
||||
}
|
||||
|
||||
output "gcloud_vpc_link" {
|
||||
description = "VPC web ui link"
|
||||
value = "https://console.cloud.google.com/networking/networks/list?project=${var.project}"
|
||||
}
|
||||
|
||||
output "gcloud_gke_link" {
|
||||
description = "GKE web ui link"
|
||||
value = "https://console.cloud.google.com/kubernetes/clusters/details/${var.region}/${local.cluster_name}/details?project=${var.project}"
|
||||
}
|
||||
|
||||
output "master_authorized_networks_config" {
|
||||
description = "Here are networks that are allowed to reach your k8s API"
|
||||
value = module.gke.master_authorized_networks_config
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
data "google_client_config" "default" {}
|
||||
|
||||
provider "google" {
|
||||
project = var.project
|
||||
region = var.region
|
||||
}
|
||||
|
||||
provider "kubernetes" {
|
||||
host = "https://${module.gke.endpoint}"
|
||||
token = data.google_client_config.default.access_token
|
||||
cluster_ca_certificate = base64decode(module.gke.ca_certificate)
|
||||
}
|
|
@ -0,0 +1,63 @@
|
|||
variable "project" {
|
||||
type = string
|
||||
description = "Google Project to create resources in"
|
||||
default = "demo"
|
||||
}
|
||||
|
||||
variable "region" {
|
||||
type = string
|
||||
description = "The region to host the cluster in"
|
||||
default = "europe-west1"
|
||||
}
|
||||
|
||||
variable "zone" {
|
||||
type = string
|
||||
description = "The region to host the cluster in"
|
||||
default = "europe-west1-b"
|
||||
}
|
||||
|
||||
variable "environment_name" {
|
||||
type = string
|
||||
description = "Environment name"
|
||||
default = "demo"
|
||||
}
|
||||
|
||||
variable "host_project" {
|
||||
type = string
|
||||
description = "The GCP project housing the VPC network to host the cluster in"
|
||||
default = "demo"
|
||||
}
|
||||
|
||||
variable "vpc_network" {
|
||||
type = string
|
||||
description = "The GCP network to apply firewall rules in"
|
||||
default = "demo-vpc"
|
||||
}
|
||||
|
||||
variable "master_authorized_networks" {
|
||||
type = list(object({ cidr_block = string, display_name = string }))
|
||||
description = "List of master authorized networks. If none are provided, disallow external access (except the cluster node IPs, which GKE automatically whitelists)."
|
||||
default = [
|
||||
{ cidr_block = "1.1.1.1/32", display_name = "Use your IP/VPN IP here" },
|
||||
]
|
||||
}
|
||||
|
||||
# Google bucket for terraform state
|
||||
|
||||
variable "bucket_name" {
|
||||
type = string
|
||||
description = "Bucket name"
|
||||
default = "your-project-bucket"
|
||||
}
|
||||
|
||||
variable "bucket_prefix" {
|
||||
type = string
|
||||
description = "Path to store your state in bucket"
|
||||
default = "terraform/state/demo"
|
||||
}
|
||||
|
||||
variable "bucket_credentials_json" {
|
||||
type = string
|
||||
description = "Default path to your gcloud credentials json file"
|
||||
default = "~/.config/gcloud/application_default_credentials.json"
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
terraform {
|
||||
required_version = "~>1.8.0"
|
||||
|
||||
required_providers {
|
||||
# https://github.com/hashicorp/terraform-provider-google
|
||||
google = {
|
||||
source = "hashicorp/google"
|
||||
version = "~>5.41.0"
|
||||
}
|
||||
google-beta = {
|
||||
source = "hashicorp/google-beta"
|
||||
version = "~> 5.41"
|
||||
}
|
||||
|
||||
# https://github.com/hashicorp/terraform-provider-kubernetes
|
||||
kubernetes = {
|
||||
source = "hashicorp/kubernetes"
|
||||
version = "~>2.32.0"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
# https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_subnetwork
|
||||
resource "google_project_service" "service_networking" {
|
||||
service = "servicenetworking.googleapis.com"
|
||||
project = var.project
|
||||
}
|
||||
|
||||
resource "google_compute_network" "vpc" {
|
||||
name = var.vpc_network
|
||||
auto_create_subnetworks = "false"
|
||||
}
|
||||
|
||||
resource "google_compute_subnetwork" "subnet" {
|
||||
name = "${var.project}-subnet"
|
||||
region = var.region
|
||||
network = google_compute_network.vpc.name
|
||||
ip_cidr_range = "10.1.0.0/24"
|
||||
secondary_ip_range {
|
||||
range_name = "${var.project}-gke-pods"
|
||||
ip_cidr_range = "10.2.0.0/19"
|
||||
}
|
||||
secondary_ip_range {
|
||||
range_name = "${var.project}-gke-services"
|
||||
ip_cidr_range = "10.3.0.0/24"
|
||||
}
|
||||
private_ip_google_access = true
|
||||
depends_on = [google_compute_network.vpc]
|
||||
}
|
Loading…
Reference in New Issue