Skip to content

Commit be3da49

Browse files
sfitzgerald-czigithub-actions[bot]czi-github-helper[bot]
authored
feat: Add sameSite configuration to happy_sticky_session cookie (#3819)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: czi-github-helper[bot] <czi-github-helper[bot]@users.noreply.github.com>
1 parent 2759a5e commit be3da49

File tree

9 files changed

+16
-11
lines changed

9 files changed

+16
-11
lines changed

terraform/modules/happy-ingress-eks/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ No modules.
4141
| <a name="input_k8s_namespace"></a> [k8s\_namespace](#input\_k8s\_namespace) | K8S namespace for this service | `string` | n/a | yes |
4242
| <a name="input_labels"></a> [labels](#input\_labels) | Labels to apply to ingress resource | `map(string)` | n/a | yes |
4343
| <a name="input_regional_wafv2_arn"></a> [regional\_wafv2\_arn](#input\_regional\_wafv2\_arn) | A WAF to protect the EKS Ingress if needed | `string` | `null` | no |
44-
| <a name="input_routing"></a> [routing](#input\_routing) | Routing configuration for the ingress | <pre>object({<br> method = optional(string, "DOMAIN")<br> host_match = string<br> group_name = string<br> priority = number<br> path = optional(string, "/*")<br> service_name = string<br> service_port = number<br> service_scheme = string<br> service_type = string<br> alb_idle_timeout = optional(number, 60) // in seconds<br> oidc_config = optional(object({<br> issuer = string<br> authorizationEndpoint = string<br> tokenEndpoint = string<br> userInfoEndpoint = string<br> secretName = string<br> }), {<br> issuer = ""<br> authorizationEndpoint = ""<br> tokenEndpoint = ""<br> userInfoEndpoint = ""<br> secretName = ""<br> })<br> bypasses = optional(map(object({<br> paths = optional(set(string), [])<br> methods = optional(set(string), [])<br> deny_action = optional(object({<br> deny = optional(bool, false)<br> deny_status_code = optional(string, "403")<br> deny_message_body = optional(string, "Denied")<br> }), {})<br> })))<br> success_codes = optional(string, "200-499")<br> sticky_sessions = optional(object({<br> enabled = optional(bool, false),<br> duration_seconds = optional(number, 600),<br> cookie_name = optional(string, "happy_sticky_session"),<br> }), {})<br> })</pre> | n/a | yes |
44+
| <a name="input_routing"></a> [routing](#input\_routing) | Routing configuration for the ingress | <pre>object({<br> method = optional(string, "DOMAIN")<br> host_match = string<br> group_name = string<br> priority = number<br> path = optional(string, "/*")<br> service_name = string<br> service_port = number<br> service_scheme = string<br> service_type = string<br> alb_idle_timeout = optional(number, 60) // in seconds<br> oidc_config = optional(object({<br> issuer = string<br> authorizationEndpoint = string<br> tokenEndpoint = string<br> userInfoEndpoint = string<br> secretName = string<br> }), {<br> issuer = ""<br> authorizationEndpoint = ""<br> tokenEndpoint = ""<br> userInfoEndpoint = ""<br> secretName = ""<br> })<br> bypasses = optional(map(object({<br> paths = optional(set(string), [])<br> methods = optional(set(string), [])<br> deny_action = optional(object({<br> deny = optional(bool, false)<br> deny_status_code = optional(string, "403")<br> deny_message_body = optional(string, "Denied")<br> }), {})<br> })))<br> success_codes = optional(string, "200-499")<br> sticky_sessions = optional(object({<br> enabled = optional(bool, false),<br> duration_seconds = optional(number, 600),<br> cookie_name = optional(string, "happy_sticky_session"),<br> cookie_samesite = optional(string, "Lax"),<br> }), {})<br> })</pre> | n/a | yes |
4545
| <a name="input_tags_string"></a> [tags\_string](#input\_tags\_string) | Tags to apply to ingress resource, comma delimited key=value pairs | `string` | `""` | no |
4646
| <a name="input_target_service_name"></a> [target\_service\_name](#input\_target\_service\_name) | Name of destination service that the ingress should route to | `string` | n/a | yes |
4747
| <a name="input_target_service_port"></a> [target\_service\_port](#input\_target\_service\_port) | Port of destination service that the ingress should route to | `number` | n/a | yes |

terraform/modules/happy-ingress-eks/variables.tf

+2-1
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ variable "routing" {
100100
enabled = optional(bool, false),
101101
duration_seconds = optional(number, 600),
102102
cookie_name = optional(string, "happy_sticky_session"),
103+
cookie_samesite = optional(string, "Lax"),
103104
}), {})
104105
})
105106
description = "Routing configuration for the ingress"
@@ -145,4 +146,4 @@ variable "additional_annotations" {
145146
type = map(string)
146147
description = "Additional annotations to apply to the ingress resource"
147148
default = {}
148-
}
149+
}

terraform/modules/happy-nginx-ingress-eks/README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,12 @@ No modules.
3131
| <a name="input_ingress_name"></a> [ingress\_name](#input\_ingress\_name) | Name of the ingress resource | `string` | n/a | yes |
3232
| <a name="input_k8s_namespace"></a> [k8s\_namespace](#input\_k8s\_namespace) | K8S namespace for this service | `string` | n/a | yes |
3333
| <a name="input_labels"></a> [labels](#input\_labels) | Labels to apply to ingress resource | `map(string)` | n/a | yes |
34-
| <a name="input_sticky_sessions"></a> [sticky\_sessions](#input\_sticky\_sessions) | Sticky session configuration | <pre>object({<br> enabled = optional(bool, true),<br> duration_seconds = optional(number, 600),<br> cookie_name = optional(string, "happy_sticky_session"),<br> })</pre> | `{}` | no |
34+
| <a name="input_sticky_sessions"></a> [sticky\_sessions](#input\_sticky\_sessions) | Sticky session configuration | <pre>object({<br> enabled = optional(bool, true),<br> duration_seconds = optional(number, 600),<br> cookie_name = optional(string, "happy_sticky_session"),<br> cookie_samesite = optional(string, "Lax"),<br> })</pre> | `{}` | no |
3535
| <a name="input_target_service_name"></a> [target\_service\_name](#input\_target\_service\_name) | Name of destination service that the ingress should route to | `string` | n/a | yes |
3636
| <a name="input_target_service_port"></a> [target\_service\_port](#input\_target\_service\_port) | Port of destination service that the ingress should route to | `string` | n/a | yes |
3737
| <a name="input_timeout"></a> [timeout](#input\_timeout) | Timeout for the ingress resource | `number` | `60` | no |
3838

3939
## Outputs
4040

4141
No outputs.
42-
<!-- END -->
42+
<!-- END -->

terraform/modules/happy-nginx-ingress-eks/main.tf

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11

22
locals {
33
sticky_annotations = {
4-
"nginx.ingress.kubernetes.io/affinity" = "cookie"
5-
"nginx.ingress.kubernetes.io/session-cookie-name" = var.sticky_sessions.cookie_name
6-
"nginx.ingress.kubernetes.io/session-cookie-max-age" = var.sticky_sessions.duration_seconds
4+
"nginx.ingress.kubernetes.io/affinity" = "cookie"
5+
"nginx.ingress.kubernetes.io/session-cookie-name" = var.sticky_sessions.cookie_name
6+
"nginx.ingress.kubernetes.io/session-cookie-max-age" = var.sticky_sessions.duration_seconds
7+
"nginx.ingress.kubernetes.io/session-cookie-samesite" = var.sticky_sessions.cookie_samesite
78
}
89

910
base_annotations = {
@@ -50,4 +51,4 @@ resource "kubernetes_ingress_v1" "ingress" {
5051
}
5152
}
5253
}
53-
}
54+
}

terraform/modules/happy-nginx-ingress-eks/variables.tf

+2-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ variable "sticky_sessions" {
4747
enabled = optional(bool, true),
4848
duration_seconds = optional(number, 600),
4949
cookie_name = optional(string, "happy_sticky_session"),
50+
cookie_samesite = optional(string, "Lax"),
5051
})
5152
description = "Sticky session configuration"
5253
default = {}
53-
}
54+
}

terraform/modules/happy-service-eks/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@
8989
| <a name="input_progress_deadline_seconds"></a> [progress\_deadline\_seconds](#input\_progress\_deadline\_seconds) | The maximum time in seconds for a deployment to make progress before it is considered to be failed. Defaults to 600 seconds. | `number` | `600` | no |
9090
| <a name="input_readiness_timeout_seconds"></a> [readiness\_timeout\_seconds](#input\_readiness\_timeout\_seconds) | Readiness probe timeout seconds | `number` | `30` | no |
9191
| <a name="input_regional_wafv2_arn"></a> [regional\_wafv2\_arn](#input\_regional\_wafv2\_arn) | A WAF to protect the EKS Ingress if needed | `string` | `null` | no |
92-
| <a name="input_routing"></a> [routing](#input\_routing) | Routing configuration for the ingress | <pre>object({<br> method : optional(string, "DOMAIN")<br> host_match : string<br> additional_hostnames : optional(set(string), [])<br> group_name : string<br> alb : optional(object({<br> name : string,<br> listener_port : number,<br> }), null)<br> priority : number<br> path : optional(string, "/*")<br> service_name : string<br> port : number<br> service_port : number<br> alb_idle_timeout : optional(number, 60) // in seconds<br> service_scheme : optional(string, "HTTP")<br> scheme : optional(string, "HTTP")<br> success_codes : optional(string, "200-499")<br> service_type : string<br> service_mesh : bool<br> allow_k6_operator : optional(bool, false)<br> allow_mesh_services : optional(list(object({<br> service : optional(string, null),<br> stack : optional(string, null),<br> service_account_name : optional(string, null),<br> })), null)<br> oidc_config : optional(object({<br> issuer : string<br> authorizationEndpoint : string<br> tokenEndpoint : string<br> userInfoEndpoint : string<br> secretName : string<br> }), {<br> issuer = ""<br> authorizationEndpoint = ""<br> tokenEndpoint = ""<br> userInfoEndpoint = ""<br> secretName = ""<br> })<br> bypasses : optional(map(object({<br> paths = optional(set(string), [])<br> methods = optional(set(string), [])<br> deny_action = optional(object({<br> deny = optional(bool, false)<br> deny_status_code = optional(string, "403")<br> deny_message_body = optional(string, "Denied")<br> }), {})<br> })))<br> sticky_sessions = optional(object({<br> enabled = optional(bool, false),<br> duration_seconds = optional(number, 600),<br> cookie_name = optional(string, "happy_sticky_session"),<br> }), {})<br> })</pre> | n/a | yes |
92+
| <a name="input_routing"></a> [routing](#input\_routing) | Routing configuration for the ingress | <pre>object({<br> method : optional(string, "DOMAIN")<br> host_match : string<br> additional_hostnames : optional(set(string), [])<br> group_name : string<br> alb : optional(object({<br> name : string,<br> listener_port : number,<br> }), null)<br> priority : number<br> path : optional(string, "/*")<br> service_name : string<br> port : number<br> service_port : number<br> alb_idle_timeout : optional(number, 60) // in seconds<br> service_scheme : optional(string, "HTTP")<br> scheme : optional(string, "HTTP")<br> success_codes : optional(string, "200-499")<br> service_type : string<br> service_mesh : bool<br> allow_k6_operator : optional(bool, false)<br> allow_mesh_services : optional(list(object({<br> service : optional(string, null),<br> stack : optional(string, null),<br> service_account_name : optional(string, null),<br> })), null)<br> oidc_config : optional(object({<br> issuer : string<br> authorizationEndpoint : string<br> tokenEndpoint : string<br> userInfoEndpoint : string<br> secretName : string<br> }), {<br> issuer = ""<br> authorizationEndpoint = ""<br> tokenEndpoint = ""<br> userInfoEndpoint = ""<br> secretName = ""<br> })<br> bypasses : optional(map(object({<br> paths = optional(set(string), [])<br> methods = optional(set(string), [])<br> deny_action = optional(object({<br> deny = optional(bool, false)<br> deny_status_code = optional(string, "403")<br> deny_message_body = optional(string, "Denied")<br> }), {})<br> })))<br> sticky_sessions = optional(object({<br> enabled = optional(bool, false),<br> duration_seconds = optional(number, 600),<br> cookie_name = optional(string, "happy_sticky_session"),<br> cookie_samesite = optional(string, "Lax"),<br> }), {})<br> })</pre> | n/a | yes |
9393
| <a name="input_scaling_cpu_threshold_percentage"></a> [scaling\_cpu\_threshold\_percentage](#input\_scaling\_cpu\_threshold\_percentage) | The CPU threshold percentage at which we should scale up | `number` | `80` | no |
9494
| <a name="input_scan_on_push"></a> [scan\_on\_push](#input\_scan\_on\_push) | Whether to enable image scan on push, disabled by default. | `bool` | `false` | no |
9595
| <a name="input_service_endpoints"></a> [service\_endpoints](#input\_service\_endpoints) | Service endpoints to be injected for service discovery | `map(string)` | `{}` | no |

terraform/modules/happy-service-eks/variables.tf

+1
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,7 @@ variable "routing" {
334334
enabled = optional(bool, false),
335335
duration_seconds = optional(number, 600),
336336
cookie_name = optional(string, "happy_sticky_session"),
337+
cookie_samesite = optional(string, "Lax"),
337338
}), {})
338339
})
339340
description = "Routing configuration for the ingress"

0 commit comments

Comments
 (0)