Documentation
Introduction
Configuration
- HTTPProxy Fundamentals
- Ingress v1 Support
- Virtual Hosts
- Inclusion and Delegation
- TLS Termination
- Upstream TLS
- Request Routing
- External Service Routing
- Request Rewriting
- CORS
- Websockets
- Upstream Health Checks
- Client Authorization
- TLS Delegation
- Rate Limiting
- Access logging
- Annotations Reference
- Cookie Rewriting
- API Reference
Deployment
- Deployment Options
- Contour Configuration
- Upgrading Contour
- Enabling TLS between Envoy and Contour
- Redeploy Envoy
Guides
- AWS with NLB
- Cert-Manager
- External Authorization
- JSON logging
- Migrating to HTTPProxy
- Prometheus Metrics
- PROXY Protocol Support
- Resource Limits
Troubleshooting
- Envoy Administration Access
- Contour Debug Logging
- Envoy Debug Logging
- Visualize the Contour Graph
- Show Contour xDS Resources
- Profiling Contour
- Contour Operator
Resources
- Support Policy
- Compatibility Matrix
- Contour Deprecation Policy
- Release Process
- Frequently Asked Questions
- Tagging
Security
Contribute
Cookie Rewriting
Contour now enables users to customize attributes on HTTP Set-Cookie
response headers.
Application specific cookies and cookies generated by Contour’s
“cookie” load balancing strategy can be rewritten either per HTTPProxy Route
or Service
.
Users can choose to rewrite the Path
, Domain
, Secure
, and SameSite
attributes of the Set-Cookie
header currently.
These attributes may be things an application may not be able to accurately set, without prior knowledge of how the application is deployed.
For example, if Contour is in use to rewrite the path or hostname of a request before it reaches an application backend, the application may not be able to accurately set the Path
and Domain
attributes in a Set-Cookie
response header.
This feature can be used to apply security settings to ensure browsers treat generated cookies appropriately.
The SameSite
and Secure
attributes are currently not set by Envoy when it generates the X-Contour-Session-Affinity
, but with this feature, users can customize this cookie further.
Per-Route Cookie Rewriting
In order to implement separate cookie rewriting policies per-route, we can configure an HTTPProxy as below:
# cookie-rewrite-route.yaml
apiVersion: projectcontour.io/v1
kind: HTTPProxy
metadata:
name: cookie-rewrite-route
spec:
virtualhost:
fqdn: cookie-rewrite-route.com
routes:
- conditions:
- prefix: /admin
services:
- name: admin-app
port: 80
cookieRewritePolicies:
- name: X-Admin-Session
pathRewrite:
value: /admin
- conditions:
- prefix: /payments
services:
- name: payment-app
port: 80
cookieRewritePolicies:
- name: X-User-Session
pathRewrite:
value: /payments
sameSite: Lax
- name: X-User-Data
sameSite: Lax
This HTTPProxy allows us to rewrite the Path
attribute of the X-Admin-Session
cookie on the /admin
route.
In addition on the /payments
route we rewrite the Path
and SameSite
attributes of the X-User-Session
cookie and the SameSite
attribute of the additional X-User-Data
cookie.
If the backing services payment-app
and admin-app
return the specified cookies in Set-Cookie
response headers, they will be rewritten with the values specified above.
Per-Service Cookie Rewriting
Similar to the above, if we have more than one Service
configured per Route
but want to customize cookies separately between them we can:
# cookie-rewrite-service.yaml
apiVersion: projectcontour.io/v1
kind: HTTPProxy
metadata:
name: cookie-rewrite-service
spec:
virtualhost:
fqdn: cookie-rewrite-service.com
routes:
- conditions:
- prefix: /
services:
- name: backend-1
port: 80
cookieRewritePolicies:
- name: X-User-Data-1
domainRewrite:
value: cookie-rewrite-service.com
- name: backend-2
port: 80
cookieRewritePolicies:
- name: X-User-Data-2
domainRewrite:
value: cookie-rewrite-service.com
Rewriting Contour Session Affinity Cookie
As mentioned above, users can use Contour’s cookie load balancing strategy to enable session affinity. Envoy generates a pretty bare-bones cookie but Contour’s cookie rewriting feature can be used to customize this cookie to add security attributes:
# cookie-rewrite-session-affinity.yaml
apiVersion: projectcontour.io/v1
kind: HTTPProxy
metadata:
name: cookie-rewrite-session-affinity
spec:
virtualhost:
fqdn: cookie-rewrite-session-affinity.com
routes:
- conditions:
- prefix: /
services:
- name: backend
port: 80
loadBalancerPolicy:
strategy: Cookie
cookieRewritePolicies:
- name: X-Contour-Session-Affinity
sameSite: Strict
secure: true