With Istio, you can apply traffic rules to route based on HTTP request headers. You can also use Istio to modify response headers. This could be useful if you want to strip headers generated by your application, or if you want to add response headers without changing your application code.
In this example, we will apply an Istio VirtualService to add a new header (hello:world
), then remove the set-cookie
header. Then, all client requests entering the service mesh through the default
gateway will receive those modified headers.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: frontend-ingress
spec:
hosts:
- "*"
gateways:
- frontend-gateway
http:
- route:
- destination:
host: frontend
port:
number: 80
headers:
response:
add:
hello: world
remove:
- "set-cookie"
Before we apply the VirtualService, the frontend
service returns the following response headers:
HTTP/1.1 200 OK
set-cookie: shop_session-id=432bef95-0d25-4754-80c8-3904c2e329e9; Max-Age=172800
date: Wed, 18 Sep 2019 16:26:01 GMT
content-type: text/html; charset=utf-8
x-envoy-upstream-service-time: 45
server: istio-envoy
transfer-encoding: chunked
Then when we kubectl apply
the VirtualService, we see that Envoy is successfully configured to modify the response headers:
HTTP/1.1 200 OK
date: Wed, 18 Sep 2019 16:26:24 GMT
content-type: text/html; charset=utf-8
x-envoy-upstream-service-time: 85
hello: world
server: istio-envoy
transfer-encoding: chunked