@@ -13,17 +13,18 @@ terraform {
1313}
1414
1515locals {
16- kong_namespace = var. KONG_NAMESPACE != " " ? var. KONG_NAMESPACE : " ${ var . RELEASE_PREFIX } -rpc-kong "
16+ kong_namespace = var. KONG_NAMESPACE != " " ? var. KONG_NAMESPACE : var. CONSUMER_NAMESPACE
1717 kong_helm_release_name = var. KONG_HELM_RELEASE_NAME != " " ? var. KONG_HELM_RELEASE_NAME : " ${ var . RELEASE_PREFIX } -rpc-kong"
1818 kong_ingress_class = var. KONG_INGRESS_CLASS != " " ? var. KONG_INGRESS_CLASS : " ${ var . RELEASE_PREFIX } -rpc-kong"
1919
20- sticky_session_policy_name = var . STICKY_SESSION_POLICY_NAME != " " ? var . STICKY_SESSION_POLICY_NAME : " ${ var . RELEASE_PREFIX } -rpc-sticky-sessions "
20+ upstream_policy_name = " ${ var . RELEASE_PREFIX } -rpc-upstream-policy "
2121 frontend_static_ip_name = var. FRONTEND_STATIC_IP_NAME != " " ? var. FRONTEND_STATIC_IP_NAME : " ${ var . RELEASE_PREFIX } -rpc-frontend"
2222 frontend_service_name = var. FRONTEND_SERVICE_NAME != " " ? var. FRONTEND_SERVICE_NAME : " ${ local . kong_helm_release_name } -gateway-proxy"
2323 managed_certificate_name = var. GCP_MANAGED_CERTIFICATE_NAME != " " ? var. GCP_MANAGED_CERTIFICATE_NAME : " ${ var . RELEASE_PREFIX } -rpc-cert"
2424 frontend_backend_config_name = " ${ var . RELEASE_PREFIX } -rpc-kong-backend"
2525 frontend_hosts = toset (flatten ([for _, route in var . ROUTES : route . hosts ]))
2626 frontend_load_balancer_ip = var. FRONTEND_ENABLED && var. FRONTEND_STATIC_IP_ENABLED ? try (google_compute_global_address. frontend [0 ]. address , " " ) : " "
27+ kong_trusted_ips = concat (var. KONG_TRUSTED_IP_RANGES , var. FRONTEND_ENABLED && var. FRONTEND_STATIC_IP_ENABLED ? [local . frontend_load_balancer_ip ] : [])
2728
2829 kong_proxy_service_annotations = merge (
2930 var. FRONTEND_ENABLED ? {
@@ -87,9 +88,16 @@ resource "helm_release" "kong" {
8788 values = concat ([
8889 yamlencode ({
8990 gateway = {
90- env = {
91- database = " off"
92- }
91+ env = merge (
92+ {
93+ database = " off"
94+ real_ip_header = " X-Forwarded-For"
95+ real_ip_recursive = " on"
96+ },
97+ length (local. kong_trusted_ips ) > 0 ? {
98+ trusted_ips = join (" ," , local. kong_trusted_ips )
99+ } : {}
100+ )
93101 proxy = {
94102 type = var.KONG_PROXY_SERVICE_TYPE
95103 annotations = local.kong_proxy_service_annotations
@@ -151,6 +159,9 @@ resource "kubernetes_manifest" "frontend_backend_config" {
151159 requestPath = " /status"
152160 port = 8100
153161 }
162+ customRequestHeaders = {
163+ headers = [" X-Forwarded-For:{client_ip_address},{server_ip_address}" ]
164+ }
154165 }
155166 }
156167
@@ -536,27 +547,43 @@ resource "kubernetes_manifest" "otel_collector_deployment" {
536547 ]
537548}
538549
539- resource "kubernetes_manifest" "sticky_session_policy " {
540- for_each = var . STICKY_SESSIONS_ENABLED ? toset (distinct ([for _, route in var . ROUTES : route . route_namespace ])) : toset ([] )
550+ resource "kubernetes_manifest" "upstream_policy " {
551+ for_each = toset (distinct ([for _, route in var . ROUTES : route . route_namespace ]))
541552
542553 manifest = {
543554 apiVersion = " configuration.konghq.com/v1beta1"
544555 kind = " KongUpstreamPolicy"
545556 metadata = {
546- name = local.sticky_session_policy_name
557+ name = local.upstream_policy_name
547558 namespace = each.value
548559 annotations = {
549560 " kubernetes.io/ingress.class" = local.kong_ingress_class
550561 }
551562 }
552563 spec = {
553- algorithm = " sticky-sessions "
564+ algorithm = " consistent-hashing "
554565 hashOn = {
555- input = " none "
566+ input = " ip "
556567 }
557- stickySessions = {
558- cookie = var.STICKY_SESSION_COOKIE_NAME
559- cookiePath = var.STICKY_SESSION_COOKIE_PATH
568+ healthchecks = {
569+ active = {
570+ type = " http"
571+ httpPath = " /status"
572+ timeout = 3
573+ concurrency = 10
574+ healthy = {
575+ interval = 10
576+ successes = 1
577+ httpStatuses = [200 ]
578+ }
579+ unhealthy = {
580+ interval = 5
581+ httpFailures = 3
582+ tcpFailures = 3
583+ timeouts = 3
584+ httpStatuses = [404 , 429 , 500 , 501 , 502 , 503 , 504 , 505 ]
585+ }
586+ }
560587 }
561588 }
562589 }
@@ -807,6 +834,6 @@ resource "kubernetes_manifest" "rpc_route" {
807834 depends_on = [
808835 kubernetes_manifest . key_auth_plugin ,
809836 kubernetes_manifest . prometheus_plugin ,
810- kubernetes_manifest . sticky_session_policy ,
837+ kubernetes_manifest . upstream_policy ,
811838 ]
812839}
0 commit comments