Istio add headers to a request

使用 containous/whoami 作为 deploy ,这个镜像可以方便的看到 headers

Hostname: whoami-f449bb88d-9lldn
IP: 127.0.0.1
IP: ::1
IP: 10.42.0.139
IP: fe80::389a:bcff:fe2b:d62d
RemoteAddr: 192.168.194.183:43655
GET / HTTP/1.1
Host: 192.168.194.183:30087
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.5
Connection: keep-alive
Upgrade-Insecure-Requests: 1

DestinationRule

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: who-desrule 
  namespace: who
spec: 
  host: whoamisvc.who.svc.cluster.local
  subsets:
  - name: v1 
    labels: 
      version: v1

Gateway

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: who-gateway
  namespace: who
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*.com"

VirtualService

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: who-default
  namespace: who
spec:
  hosts:
  - "who.lizhe.com"
  gateways:
  - who-gateway
  http:
  - route:
    - destination:
        host: whoamisvc.who.svc.cluster.local
        subset: v1

在没开始加header之前我们看一下

然后我们修改 VirtualService来添加一个header

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: who-default
  namespace: who
spec:
  hosts:
  - "who.lizhe.com"
  gateways:
  - who-gateway
  http:
  - headers:
      request:
        add:
          lizhetoken: test123456789
    route:
    - destination:
        host: whoamisvc.who.svc.cluster.local
        subset: v1

不过如果你在请求中提前设置了 header,那么add动作将 不会覆盖 你设置的内容

curl who.lizhe.com -H lizhetoken:9999999

此时需要将 add改为 set

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: who-default
  namespace: who
spec:
  hosts:
  - "who.lizhe.com"
  gateways:
  - who-gateway
  http:
  - headers:
      request:
        set:
          lizhetoken: test123456789
    route:
    - destination:
        host: whoamisvc.who.svc.cluster.local
        subset: v1

而且 如果 header key 不存在, set 也会帮你添加

Send a Message