apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: header-rules
annotations:
bfe.ingress.kubernetes.io/router.header: "h_key:h_value"
spec:
rules:
- host: "exact-path-header-key"
http:
paths:
- path: /
pathType: Exact
backend:
service:
name: exact-h-key
port:
number: 3000
Feature: Header rules
An Ingress may define routing rules based on the request path and header. If the HTTP request path matches the paths and header info in the Ingress objects, the traffic is routed to its backend service.
Scenarios
| Status | Progress |
|---|---|
|
Passed |
100.00% |
|
Failed |
0.00% |
(exact / and header matches request / with header)
{"h_key": ["h_value"]}
(exact / and header matches request / without header)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: header-rules
annotations:
bfe.ingress.kubernetes.io/router.header: "h_key:h_value"
spec:
rules:
- host: "exact-path-no-header"
http:
paths:
- path: /
pathType: Exact
backend:
service:
name: exact-h-key
port:
number: 3000
(exact / and header null matches request / with header)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: header-rules
annotations:
bfe.ingress.kubernetes.io/router.header: ""
spec:
rules:
- host: "header-null"
http:
paths:
- path: /
pathType: Exact
backend:
service:
name: h-key-null
port:
number: 3000
{"h_key": ["h_value"]}
(exact / and header null matches request / without header)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: header-rules
annotations:
bfe.ingress.kubernetes.io/router.header: ""
spec:
rules:
- host: "header-null"
http:
paths:
- path: /
pathType: Exact
backend:
service:
name: h-key-null-without-header
port:
number: 3000
(exact / and header only key matches request / with header only key)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: header-rules
annotations:
bfe.ingress.kubernetes.io/router.header: "h-key"
spec:
rules:
- host: "header-only-key"
http:
paths:
- path: /
pathType: Exact
backend:
service:
name: header-only-key
port:
number: 3000
(exact / and header only key matches request / without header)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: header-rules
annotations:
bfe.ingress.kubernetes.io/router.header: "h-key"
spec:
rules:
- host: "header-only-key"
http:
paths:
- path: /
pathType: Exact
backend:
service:
name: header-only-key-no-header
port:
number: 3000
(exact / and header normal matches request / with header right)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: header-rules
annotations:
bfe.ingress.kubernetes.io/router.header: "User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36"
spec:
rules:
- host: "header-normal-user-agent"
http:
paths:
- path: /
pathType: Exact
backend:
service:
name: header-normal-right
port:
number: 3000
{"User-Agent": ["Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36"]}
(exact / and header normal dose not matches request / without header)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: header-rules
annotations:
bfe.ingress.kubernetes.io/router.header: "user-agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36"
spec:
rules:
- host: "header-normal"
http:
paths:
- path: /
pathType: Exact
backend:
service:
name: header-normal-right
port:
number: 3000
(exact / and header a:b:c matches request / with header right)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: header-rules
annotations:
bfe.ingress.kubernetes.io/router.header: "a:b:c"
spec:
rules:
- host: "header-a-b-c"
http:
paths:
- path: /
pathType: Exact
backend:
service:
name: header-a-b-c-right
port:
number: 3000
(exact / and header a:b:c dose not matches request / without header)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: header-rules
annotations:
bfe.ingress.kubernetes.io/router.header: "a:b:c"
spec:
rules:
- host: "header-a-b-c-without"
http:
paths:
- path: /
pathType: Exact
backend:
service:
name: without-header-a-b-c
port:
number: 3000
(exact / and header a:+/?%#& matches request / with header right)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: header-rules
annotations:
bfe.ingress.kubernetes.io/router.header: "a:+/?%#&"
spec:
rules:
- host: "header-special-character"
http:
paths:
- path: /
pathType: Exact
backend:
service:
name: header-special-character-right
port:
number: 3000
{"a": ["+/?%#&"]}
(exact / and header a:+/?%#& matches request / without header)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: header-rules
annotations:
bfe.ingress.kubernetes.io/router.header: "a:+/?%#&"
spec:
rules:
- host: "header-special-character-no"
http:
paths:
- path: /
pathType: Exact
backend:
service:
name: header-special-character-no
port:
number: 3000