quickstarts/terraform/ingress.tf (123 lines of code) (raw):
# Copyright 2023 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.
# [START gke_ap_autopilot_quickstart_ingress_terraform]
resource "google_compute_global_address" "gke_ingress_ipv4" {
name = "external-address-gke-ingress-ipv4"
ip_version = "IPV4"
address_type = "EXTERNAL"
}
resource "google_compute_managed_ssl_certificate" "ingress-certs" {
provider = google-beta
name = "ingress-certs"
managed {
domains = local.certificate_host
}
}
resource "kubernetes_ingress_v1" "example_ingress" {
metadata {
name = "example-ingress"
annotations = {
"kubernetes.io/ingress.global-static-ip-name" = "external-address-gke-ingress-ipv4"
"ingress.gcp.kubernetes.io/pre-shared-cert" = "ingress-certs"
}
}
spec {
default_backend {
service {
name = "myapp-1"
port {
number = 8080
}
}
}
rule {
http {
path {
backend {
service {
name = "myapp-1"
port {
number = 8080
}
}
}
path = "/app1/*"
}
path {
backend {
service {
name = "myapp-2"
port {
number = 8080
}
}
}
path = "/app2/*"
}
}
}
}
}
resource "kubernetes_service_v1" "example" {
metadata {
name = "myapp-1"
}
spec {
selector = {
app = kubernetes_pod_v1.example.metadata.0.labels.app
}
session_affinity = "ClientIP"
port {
port = 8080
target_port = 8080
}
type = "NodePort"
}
}
resource "kubernetes_service_v1" "example2" {
metadata {
name = "myapp-2"
}
spec {
selector = {
app = kubernetes_pod_v1.example2.metadata.0.labels.app
}
session_affinity = "ClientIP"
port {
port = 8080
target_port = 8080
}
type = "NodePort"
}
}
resource "kubernetes_pod_v1" "example" {
metadata {
name = "terraform-myapp1"
labels = {
app = "myapp-1"
}
}
spec {
container {
image = "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0"
name = "example"
port {
container_port = 8080
}
}
}
}
resource "kubernetes_pod_v1" "example2" {
metadata {
name = "terraform-myapp2"
labels = {
app = "myapp-2"
}
}
spec {
container {
image = "us-docker.pkg.dev/google-samples/containers/gke/hello-app:2.0"
name = "example"
port {
container_port = 8080
}
}
# [END gke_ap_autopilot_quickstart_ingress_terraform]
}
}