apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: redirect-url-set
annotations:
bfe.ingress.kubernetes.io/redirect.url-set: "https://www.baidu.com"
spec:
rules:
- host: "foo.com"
http:
paths:
- path: /bar
pathType: Prefix
backend:
service:
name: foo-exact
port:
number: 3000
Feature: Redirect
An Ingress may define redirection rules in its annotations. If the a Request matches the rule defined in a Ingress which have redirection annotations, BFE should return a Response whose header has the corresponding Location and Status Code according to the annotations in the Ingress.
Scenarios
| Status | Progress |
|---|---|
|
Passed |
100.00% |
|
Failed |
0.00% |
no annotation `bfe.ingress.kubernetes.io/redirect.response-status`.
annotation `bfe.ingress.kubernetes.io/redirect.response-status`.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: redirect-url-set
annotations:
bfe.ingress.kubernetes.io/redirect.url-set: "https://www.baidu.com"
bfe.ingress.kubernetes.io/redirect.response-status: 301
spec:
rules:
- host: "foo.com"
http:
paths:
- path: /bar
pathType: Prefix
backend:
service:
name: foo-exact
port:
number: 3000
no annotation `bfe.ingress.kubernetes.io/redirect.response-status`.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: redirect-url-from-query
annotations:
bfe.ingress.kubernetes.io/redirect.url-from-query: "location"
spec:
rules:
- host: "foo.com"
http:
paths:
- path: /bar
pathType: Prefix
backend:
service:
name: foo-exact
port:
number: 3000
annotation `bfe.ingress.kubernetes.io/redirect.response-status`.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: redirect-url-from-query
annotations:
bfe.ingress.kubernetes.io/redirect.url-from-query: "location"
bfe.ingress.kubernetes.io/redirect.response-status: 301
spec:
rules:
- host: "foo.com"
http:
paths:
- path: /bar
pathType: Prefix
backend:
service:
name: foo-exact
port:
number: 3000
no annotation `bfe.ingress.kubernetes.io/redirect.response-status`.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: redirect-url-set
annotations:
bfe.ingress.kubernetes.io/redirect.url-prefix-add: "https://new.org/api"
spec:
rules:
- host: "foo.com"
http:
paths:
- path: /bar
pathType: Prefix
backend:
service:
name: foo-exact
port:
number: 3000
annotation `bfe.ingress.kubernetes.io/redirect.response-status`.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: redirect-url-set
annotations:
bfe.ingress.kubernetes.io/redirect.url-prefix-add: "https://new.org/api"
bfe.ingress.kubernetes.io/redirect.response-status: 301
spec:
rules:
- host: "foo.com"
http:
paths:
- path: /bar
pathType: Prefix
backend:
service:
name: foo-exact
port:
number: 3000
no annotation `bfe.ingress.kubernetes.io/redirect.response-status`.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: redirect-url-set
annotations:
bfe.ingress.kubernetes.io/redirect.scheme-set: https
spec:
rules:
- host: "foo.com"
http:
paths:
- path: /bar
pathType: Prefix
backend:
service:
name: foo-exact
port:
number: 3000
annotation `bfe.ingress.kubernetes.io/redirect.response-status`.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: redirect-url-set
annotations:
bfe.ingress.kubernetes.io/redirect.scheme-set: https
bfe.ingress.kubernetes.io/redirect.response-status: 301
spec:
rules:
- host: "foo.com"
http:
paths:
- path: /bar
pathType: Prefix
backend:
service:
name: foo-exact
port:
number: 3000
then the ingress is updated by removing the redirect annotations.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: redirect-url-set
annotations:
bfe.ingress.kubernetes.io/redirect.url-set: "https://www.baidu.com"
spec:
rules:
- host: "foo.com"
http:
paths:
- path: /bar
pathType: Prefix
backend:
service:
name: foo-exact
port:
number: 3000
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: redirect-url-set
spec:
rules:
- host: "foo.com"
http:
paths:
- path: /bar
pathType: Prefix
backend:
service:
name: foo-exact
port:
number: 3000
then the ingress is updated by removing the rules.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: redirect-url-set
annotations:
bfe.ingress.kubernetes.io/redirect.url-set: "https://www.baidu.com"
spec:
rules:
- host: "foo.com"
http:
paths:
- path: /bar
pathType: Prefix
backend:
service:
name: foo-exact
port:
number: 3000
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: redirect-url-set
spec:
defaultBackend:
service:
name: foo-exact
port:
number: 3000
is invalid
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: redirect-url-set
annotations:
bfe.ingress.kubernetes.io/redirect.url-set: aaa-bbb
spec:
rules:
- host: "foo.com"
http:
paths:
- path: /bar
pathType: Prefix
backend:
service:
name: foo-exact
port:
number: 3000
is invalid url
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: redirect-url-set
annotations:
bfe.ingress.kubernetes.io/redirect.url-prefix-add: invalid-url
spec:
rules:
- host: "foo.com"
http:
paths:
- path: /bar
pathType: Prefix
backend:
service:
name: foo-exact
port:
number: 3000
is valid url with fragment
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: redirect-url-set
annotations:
bfe.ingress.kubernetes.io/redirect.url-prefix-add: https://example.org/path#fragment
spec:
rules:
- host: "foo.com"
http:
paths:
- path: /bar
pathType: Prefix
backend:
service:
name: foo-exact
port:
number: 3000
is not http or https
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: redirect-url-set
annotations:
bfe.ingress.kubernetes.io/redirect.scheme-set: ftp
spec:
rules:
- host: "foo.com"
http:
paths:
- path: /bar
pathType: Prefix
backend:
service:
name: foo-exact
port:
number: 3000
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: redirect-url-set
annotations:
bfe.ingress.kubernetes.io/redirect.scheme-set: https
bfe.ingress.kubernetes.io/redirect.url-prefix-add: "https://new.org/api"
bfe.ingress.kubernetes.io/redirect.response-status: 301
spec:
rules:
- host: "foo.com"
http:
paths:
- path: /bar
pathType: Prefix
backend:
service:
name: foo-exact
port:
number: 3000
should not be created successfully.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: redirect-url-set
annotations:
bfe.ingress.kubernetes.io/redirect.response-status: 301
spec:
rules:
- host: "foo.com"
http:
paths:
- path: /bar
pathType: Prefix
backend:
service:
name: foo-exact
port:
number: 3000
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: redirect-url-set
annotations:
bfe.ingress.kubernetes.io/redirect.scheme-set: https
bfe.ingress.kubernetes.io/redirect.response-status: 404
spec:
rules:
- host: "foo.com"
http:
paths:
- path: /bar
pathType: Prefix
backend:
service:
name: foo-exact
port:
number: 3000
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: redirect-url-set
annotations:
bfe.ingress.kubernetes.io/redirect.scheme-set: https
bfe.ingress.kubernetes.io/redirect.response-status: some-code
spec:
rules:
- host: "foo.com"
http:
paths:
- path: /bar
pathType: Prefix
backend:
service:
name: foo-exact
port:
number: 3000