ingresses.tf (320 lines of code) (raw):
locals {
public_ingress_controller_default_values = <<VALUES
spec:
fullnameOverride: "public-ingress-nginx"
commonLabels:
cluster_service: "true"
public: "true"
controller:
ingressClassResource:
name: public-ingress-nginx
enabled: "${var.cluster_public_ingress_create}"
default: "false"
controllerValue: "k8s.io/public-ingress-nginx"
ingressClass: public-ingress-nginx
extraArgs: {}
extraEnvs: []
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app.kubernetes.io/name
operator: In
values:
- ingress-nginx
- key: app.kubernetes.io/instance
operator: In
values:
- ingress-nginx
- key: app.kubernetes.io/component
operator: In
values:
- controller
topologyKey: "kubernetes.io/hostname"
topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app.kubernetes.io/instance: ingress-nginx-internal
nodeSelector:
kubernetes.io/os: linux
resources:
limits:
cpu: 2
memory: 2048Mi
requests:
cpu: 2
memory: 2048Mi
autoscaling:
enabled: "false"
minReplicas: 1
maxReplicas: 7
targetCPUUtilizationPercentage: 71
targetMemoryUtilizationPercentage: 71
behavior:
scaleDown:
stabilizationWindowSeconds: 300
policies:
- type: Pods
value: 1
periodSeconds: 180
scaleUp:
stabilizationWindowSeconds: 300
policies:
- type: Pods
value: 2
periodSeconds: 60
autoscalingTemplate: []
customTemplate:
configMapName: ""
configMapKey: ""
service:
enabled: "true"
type: LoadBalancer
external:
enabled: "true"
metrics:
port: 10254
portName: metrics
enabled: "true"
service:
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "10254"
servicePort: 10254
type: ClusterIP
serviceMonitor:
enabled: true
scrapeInterval: 15s
additionalLabels:
release: kube-prometheus-stack
prometheusRule:
enabled: true
additionalLabels:
release: kube-prometheus-stack
rules:
- alert: NGINXConfigFailed
expr: count(nginx_ingress_controller_config_last_reload_successful == 0) > 0
for: 1s
labels:
severity: critical
annotations:
description: bad ingress config - nginx config test failed
summary: uninstall the latest ingress changes to allow config reloads to resume
- alert: NGINXCertificateExpiry
expr: (avg(nginx_ingress_controller_ssl_expire_time_seconds) by (host) - time()) < 604800
for: 1s
labels:
severity: critical
annotations:
description: ssl certificate(s) will expire in less then a week
summary: renew expiring certificates to avoid downtime
- alert: NGINXTooMany500s
expr: 100 * ( sum( nginx_ingress_controller_requests{status=~"5.+"} ) / sum(nginx_ingress_controller_requests) ) > 5
for: 1m
labels:
severity: warning
annotations:
description: Too many 5XXs
summary: More than 5% of all requests returned 5XX, this requires your attention
- alert: NGINXTooMany400s
expr: 100 * ( sum( nginx_ingress_controller_requests{status=~"4.+"} ) / sum(nginx_ingress_controller_requests) ) > 5
for: 1m
labels:
severity: warning
annotations:
description: Too many 4XXs
summary: More than 5% of all requests returned 4XX, this requires your attention
admissionWebhooks:
enabled: "false"
tcp: {}
udp: {}
VALUES
private_ingress_controller_default_values = <<VALUES
spec:
fullnameOverride: "private-ingress-nginx"
commonLabels:
cluster_service: "true"
public: "false"
controller:
ingressClassResource:
name: private-ingress-nginx
enabled: "true"
default: "true"
controllerValue: "k8s.io/private-ingress-nginx"
ingressClass: private-ingress-nginx
extraArgs: {}
extraEnvs: []
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app.kubernetes.io/name
operator: In
values:
- ingress-nginx
- key: app.kubernetes.io/instance
operator: In
values:
- ingress-nginx
- key: app.kubernetes.io/component
operator: In
values:
- controller
topologyKey: "kubernetes.io/hostname"
topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app.kubernetes.io/instance: ingress-nginx-internal
nodeSelector:
kubernetes.io/os: linux
resources:
limits:
cpu: 2
memory: 2048Mi
requests:
cpu: 2
memory: 2048Mi
autoscaling:
enabled: "false"
minReplicas: 1
maxReplicas: 7
targetCPUUtilizationPercentage: 71
targetMemoryUtilizationPercentage: 71
behavior:
scaleDown:
stabilizationWindowSeconds: 300
policies:
- type: Pods
value: 1
periodSeconds: 180
scaleUp:
stabilizationWindowSeconds: 300
policies:
- type: Pods
value: 2
periodSeconds: 60
autoscalingTemplate: []
customTemplate:
configMapName: ""
configMapKey: ""
service:
enabled: "true"
annotations:
service.beta.kubernetes.io/aws-load-balancer-internal: "true"
type: LoadBalancer
external:
enabled: "true"
metrics:
port: 10254
portName: metrics
enabled: "true"
service:
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "10254"
servicePort: 10254
type: ClusterIP
serviceMonitor:
enabled: true
scrapeInterval: 15s
additionalLabels:
release: kube-prometheus-stack
prometheusRule:
enabled: true
additionalLabels:
release: kube-prometheus-stack
rules:
- alert: NGINXConfigFailed
expr: count(nginx_ingress_controller_config_last_reload_successful == 0) > 0
for: 1s
labels:
severity: critical
annotations:
description: bad ingress config - nginx config test failed
summary: uninstall the latest ingress changes to allow config reloads to resume
- alert: NGINXCertificateExpiry
expr: (avg(nginx_ingress_controller_ssl_expire_time_seconds) by (host) - time()) < 604800
for: 1s
labels:
severity: critical
annotations:
description: ssl certificate(s) will expire in less then a week
summary: renew expiring certificates to avoid downtime
- alert: NGINXTooMany500s
expr: 100 * ( sum( nginx_ingress_controller_requests{status=~"5.+"} ) / sum(nginx_ingress_controller_requests) ) > 5
for: 1m
labels:
severity: warning
annotations:
description: Too many 5XXs
summary: More than 5% of all requests returned 5XX, this requires your attention
- alert: NGINXTooMany400s
expr: 100 * ( sum( nginx_ingress_controller_requests{status=~"4.+"} ) / sum(nginx_ingress_controller_requests) ) > 5
for: 1m
labels:
severity: warning
annotations:
description: Too many 4XXs
summary: More than 5% of all requests returned 4XX, this requires your attention
admissionWebhooks:
enabled: "false"
tcp: {}
udp: {}
VALUES
}
module "cluster_public_ingress_controller" {
count = var.cluster_public_ingress_create ? 1 : 0
source = "./modules/template-ingress"
ingress_helm_chart_repository = try(coalesce(var.cluster_public_ingress.helm_chart_repository, "oci://public.registry.jetbrains.space/p/helm/library"), "oci://public.registry.jetbrains.space/p/helm/library")
ingress_helm_chart_repository_config = try(coalesce(var.cluster_public_ingress.helm_chart_repository_config, null), null)
ingress_helm_chart_version = try(coalesce(var.cluster_public_ingress.helm_chart_version, "4.10.0"), "4.10.0")
ingress_helm_chart_name = try(coalesce(var.cluster_public_ingress.helm_chart_name, "kube-ingress-nginx"), "kube-ingress-nginx")
ingress_namespace = try(coalesce(var.cluster_public_ingress.helm_chart_namespace, "kube-public-ingress"), "kube-public-ingress")
ingress_create_namespace_if_not_exists = try(coalesce(var.cluster_public_ingress.create_namespace_if_not_exists, true), true)
ingress_default_values_dot_yaml = try(coalesce(var.cluster_public_ingress.helm_chart_values, local.public_ingress_controller_default_values), null)
ingress_params = try(coalesce(var.cluster_public_ingress.helm_chart_params, []), [])
ingress_secrets = try(coalesce(var.cluster_public_ingress.helm_chart_secrets, []), [])
depends_on = [module.cluster_monitoring]
}
module "cluster_private_ingress_controller" {
count = var.cluster_private_ingress_create ? 1 : 0
source = "./modules/template-ingress"
ingress_helm_chart_repository = try(coalesce(var.cluster_private_ingress.helm_chart_repository, "oci://public.registry.jetbrains.space/p/helm/library"), "oci://public.registry.jetbrains.space/p/helm/library")
ingress_helm_chart_repository_config = try(coalesce(var.cluster_private_ingress.helm_chart_repository_config, null), null)
ingress_helm_chart_version = try(coalesce(var.cluster_private_ingress.helm_chart_version, "4.10.0"), "4.10.0")
ingress_helm_chart_name = try(coalesce(var.cluster_private_ingress.helm_chart_name, "kube-ingress-nginx"), "kube-ingress-nginx")
ingress_namespace = try(coalesce(var.cluster_private_ingress.helm_chart_namespace, "kube-private-ingress"), "kube-private-ingress")
ingress_create_namespace_if_not_exists = try(coalesce(var.cluster_private_ingress.create_namespace_if_not_exists, true), true)
ingress_default_values_dot_yaml = try(coalesce(var.cluster_private_ingress.helm_chart_values, local.private_ingress_controller_default_values), null)
ingress_params = try(coalesce(var.cluster_private_ingress.helm_chart_params, []), [])
ingress_secrets = try(coalesce(var.cluster_private_ingress.helm_chart_secrets, []), [])
depends_on = [module.cluster_monitoring]
}
data "kubernetes_service_v1" "kube_private_ingress_svc_url" {
count = var.cluster_private_ingress_create ? 1 : 0
metadata {
name = "private-ingress-nginx-controller"
namespace = try(coalesce(var.cluster_private_ingress.helm_chart_namespace, "kube-private-ingress"), "kube-private-ingress")
}
depends_on = [
module.cluster_private_ingress_controller
]
}
data "kubernetes_service_v1" "kube_public_ingress_svc_url" {
count = var.cluster_public_ingress_create ? 1 : 0
metadata {
name = "public-ingress-nginx-controller"
namespace = try(coalesce(var.cluster_public_ingress.helm_chart_namespace, "kube-public-ingress"), "kube-public-ingress")
}
depends_on = [
module.cluster_public_ingress_controller
]
}