Multi-layer routing
Co-authored-by: Romain <rtribotte@users.noreply.github.com>
This commit is contained in:
parent
8392503df7
commit
d6598f370c
37 changed files with 2834 additions and 37 deletions
|
|
@ -0,0 +1,28 @@
|
|||
---
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: parent-cross
|
||||
namespace: ns-a
|
||||
spec:
|
||||
entryPoints:
|
||||
- web
|
||||
routes:
|
||||
- match: Host(`cross.example.com`)
|
||||
kind: Rule
|
||||
---
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: child-cross-allowed
|
||||
namespace: ns-b
|
||||
spec:
|
||||
parentRefs:
|
||||
- name: parent-cross
|
||||
namespace: ns-a
|
||||
routes:
|
||||
- match: Path(`/cross`)
|
||||
kind: Rule
|
||||
services:
|
||||
- name: cross-service
|
||||
port: 9000
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
---
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: parent-cross
|
||||
namespace: ns-a
|
||||
spec:
|
||||
entryPoints:
|
||||
- web
|
||||
routes:
|
||||
- match: Host(`cross.example.com`)
|
||||
kind: Rule
|
||||
---
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: child-cross-denied
|
||||
namespace: ns-b
|
||||
spec:
|
||||
parentRefs:
|
||||
- name: parent-cross
|
||||
namespace: ns-a
|
||||
routes:
|
||||
- match: Path(`/denied`)
|
||||
kind: Rule
|
||||
services:
|
||||
- name: cross-service
|
||||
port: 9000
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
---
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: parent-default
|
||||
namespace: default
|
||||
spec:
|
||||
entryPoints:
|
||||
- web
|
||||
routes:
|
||||
- match: Host(`default.example.com`)
|
||||
kind: Rule
|
||||
---
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: child-same
|
||||
namespace: default
|
||||
spec:
|
||||
parentRefs:
|
||||
- name: parent-default
|
||||
routes:
|
||||
- match: Path(`/same`)
|
||||
kind: Rule
|
||||
services:
|
||||
- name: same-service
|
||||
port: 9000
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
---
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: child-missing-parent
|
||||
namespace: default
|
||||
spec:
|
||||
parentRefs:
|
||||
- name: non-existent-parent
|
||||
namespace: default
|
||||
routes:
|
||||
- match: Path(`/missing`)
|
||||
kind: Rule
|
||||
services:
|
||||
- name: child-service
|
||||
port: 9000
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
---
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: parent-a
|
||||
namespace: default
|
||||
spec:
|
||||
entryPoints:
|
||||
- web
|
||||
routes:
|
||||
- match: Host(`a.example.com`)
|
||||
kind: Rule
|
||||
---
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: parent-b
|
||||
namespace: default
|
||||
spec:
|
||||
entryPoints:
|
||||
- web
|
||||
routes:
|
||||
- match: Host(`b.example.com`)
|
||||
kind: Rule
|
||||
---
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: child-multi-parents
|
||||
namespace: default
|
||||
spec:
|
||||
parentRefs:
|
||||
- name: parent-a
|
||||
namespace: default
|
||||
- name: parent-b
|
||||
namespace: default
|
||||
routes:
|
||||
- match: Path(`/shared`)
|
||||
kind: Rule
|
||||
services:
|
||||
- name: shared-service
|
||||
port: 9000
|
||||
139
pkg/provider/kubernetes/crd/fixtures/parent_refs_services.yml
Normal file
139
pkg/provider/kubernetes/crd/fixtures/parent_refs_services.yml
Normal file
|
|
@ -0,0 +1,139 @@
|
|||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: child-service
|
||||
namespace: default
|
||||
spec:
|
||||
ports:
|
||||
- name: web
|
||||
port: 9000
|
||||
---
|
||||
kind: EndpointSlice
|
||||
apiVersion: discovery.k8s.io/v1
|
||||
metadata:
|
||||
name: child-service-abc
|
||||
namespace: default
|
||||
labels:
|
||||
kubernetes.io/service-name: child-service
|
||||
addressType: IPv4
|
||||
ports:
|
||||
- name: web
|
||||
port: 9000
|
||||
endpoints:
|
||||
- addresses:
|
||||
- 10.10.2.1
|
||||
- 10.10.2.2
|
||||
conditions:
|
||||
ready: true
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: users-service
|
||||
namespace: default
|
||||
spec:
|
||||
ports:
|
||||
- name: web
|
||||
port: 9000
|
||||
---
|
||||
kind: EndpointSlice
|
||||
apiVersion: discovery.k8s.io/v1
|
||||
metadata:
|
||||
name: users-service-abc
|
||||
namespace: default
|
||||
labels:
|
||||
kubernetes.io/service-name: users-service
|
||||
addressType: IPv4
|
||||
ports:
|
||||
- name: web
|
||||
port: 9000
|
||||
endpoints:
|
||||
- addresses:
|
||||
- 10.10.5.1
|
||||
- 10.10.5.2
|
||||
conditions:
|
||||
ready: true
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: shared-service
|
||||
namespace: default
|
||||
spec:
|
||||
ports:
|
||||
- name: web
|
||||
port: 9000
|
||||
---
|
||||
kind: EndpointSlice
|
||||
apiVersion: discovery.k8s.io/v1
|
||||
metadata:
|
||||
name: shared-service-abc
|
||||
namespace: default
|
||||
labels:
|
||||
kubernetes.io/service-name: shared-service
|
||||
addressType: IPv4
|
||||
ports:
|
||||
- name: web
|
||||
port: 9000
|
||||
endpoints:
|
||||
- addresses:
|
||||
- 10.10.8.1
|
||||
- 10.10.8.2
|
||||
conditions:
|
||||
ready: true
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: cross-service
|
||||
namespace: ns-b
|
||||
spec:
|
||||
ports:
|
||||
- name: web
|
||||
port: 9000
|
||||
---
|
||||
kind: EndpointSlice
|
||||
apiVersion: discovery.k8s.io/v1
|
||||
metadata:
|
||||
name: cross-service-abc
|
||||
namespace: ns-b
|
||||
labels:
|
||||
kubernetes.io/service-name: cross-service
|
||||
addressType: IPv4
|
||||
ports:
|
||||
- name: web
|
||||
port: 9000
|
||||
endpoints:
|
||||
- addresses:
|
||||
- 10.10.11.1
|
||||
- 10.10.11.2
|
||||
conditions:
|
||||
ready: true
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: same-service
|
||||
namespace: default
|
||||
spec:
|
||||
ports:
|
||||
- name: web
|
||||
port: 9000
|
||||
---
|
||||
kind: EndpointSlice
|
||||
apiVersion: discovery.k8s.io/v1
|
||||
metadata:
|
||||
name: same-service-abc
|
||||
namespace: default
|
||||
labels:
|
||||
kubernetes.io/service-name: same-service
|
||||
addressType: IPv4
|
||||
ports:
|
||||
- name: web
|
||||
port: 9000
|
||||
endpoints:
|
||||
- addresses:
|
||||
- 10.10.14.1
|
||||
- 10.10.14.2
|
||||
conditions:
|
||||
ready: true
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
---
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: parent-multi
|
||||
namespace: default
|
||||
spec:
|
||||
entryPoints:
|
||||
- web
|
||||
routes:
|
||||
- match: Host(`api.example.com`) && PathPrefix(`/v1`)
|
||||
kind: Rule
|
||||
- match: Host(`api.example.com`) && PathPrefix(`/v2`)
|
||||
kind: Rule
|
||||
---
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: child-multi-routes
|
||||
namespace: default
|
||||
spec:
|
||||
parentRefs:
|
||||
- name: parent-multi
|
||||
namespace: default
|
||||
routes:
|
||||
- match: Path(`/users`)
|
||||
kind: Rule
|
||||
services:
|
||||
- name: users-service
|
||||
port: 9000
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
---
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: parent-single
|
||||
namespace: default
|
||||
spec:
|
||||
entryPoints:
|
||||
- web
|
||||
routes:
|
||||
- match: Host(`parent.example.com`)
|
||||
kind: Rule
|
||||
---
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: child-single
|
||||
namespace: default
|
||||
spec:
|
||||
parentRefs:
|
||||
- name: parent-single
|
||||
namespace: default
|
||||
routes:
|
||||
- match: Path(`/api`)
|
||||
kind: Rule
|
||||
services:
|
||||
- name: child-service
|
||||
port: 9000
|
||||
Loading…
Add table
Add a link
Reference in a new issue