Skip to content

Commit 31d67b3

Browse files
author
Kate Osborn
committed
Client Settings Policy Implementation WIP
1 parent 3806853 commit 31d67b3

38 files changed

+1612
-49
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ generate: ## Run go generate
100100

101101
.PHONY: generate-crds
102102
generate-crds: ## Generate CRDs and Go types using kubebuilder
103-
go run sigs.k8s.io/controller-tools/cmd/controller-gen crd object paths=./apis/... output:crd:artifacts:config=config/crd/bases
103+
go run sigs.k8s.io/controller-tools/cmd/controller-gen crd object paths=./apis/v1alpha1 output:crd:artifacts:config=config/crd/bases
104104

105105
.PHONY: generate-manifests
106106
generate-manifests: ## Generate manifests using Helm.

apis/v1alpha1/clientsettingspolicy_types.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,11 @@ type ClientKeepAlive struct {
9595

9696
// Timeout defines the keep-alive timeouts for clients.
9797
//
98+
// +kubebuilder:validation:XValidation:message="header can only be specified if server is specified",rule="!(has(self.header) && !has(self.server))"
99+
//
100+
//
98101
// +optional
102+
//nolint:lll
99103
Timeout *ClientKeepAliveTimeout `json:"timeout,omitempty"`
100104
}
101105

apis/v1alpha1/policy_methods.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package v1alpha1
2+
3+
import (
4+
"sigs.k8s.io/gateway-api/apis/v1alpha2"
5+
)
6+
7+
// FIXME(kate-osborn): Figure out a way to generate these methods for all our policies.
8+
// These methods implement the policies.Policy interface which extends client.Object to add the following methods.
9+
10+
func (p *ClientSettingsPolicy) GetTargetRef() v1alpha2.PolicyTargetReference {
11+
return p.Spec.TargetRef
12+
}
13+
14+
func (p *ClientSettingsPolicy) GetPolicyStatus() v1alpha2.PolicyStatus {
15+
return p.Status
16+
}
17+
18+
func (p *ClientSettingsPolicy) SetPolicyStatus(status v1alpha2.PolicyStatus) {
19+
p.Status = status
20+
}

config/crd/bases/gateway.nginx.org_clientsettingspolicies.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,9 @@ spec:
108108
pattern: ^\d{1,4}(ms|s)?$
109109
type: string
110110
type: object
111+
x-kubernetes-validations:
112+
- message: header can only be specified if server is specified
113+
rule: '!(has(self.header) && !has(self.server))'
111114
type: object
112115
targetRef:
113116
description: |-
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
TODO(kate-osborn): remove before merging to main
2+
3+
# Client Settings Policy
4+
5+
This contains examples for testing Client Settings Policy.
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
apiVersion: gateway.networking.k8s.io/v1
2+
kind: HTTPRoute
3+
metadata:
4+
name: coffee
5+
spec:
6+
parentRefs:
7+
- name: gateway
8+
sectionName: http
9+
- name: gateway
10+
sectionName: http2
11+
hostnames:
12+
- "cafe.example.com"
13+
- "cafe.example.org"
14+
rules:
15+
- matches:
16+
- path:
17+
type: PathPrefix
18+
value: /coffee
19+
backendRefs:
20+
- name: coffee
21+
port: 80
22+
---
23+
apiVersion: gateway.networking.k8s.io/v1
24+
kind: HTTPRoute
25+
metadata:
26+
name: tea
27+
spec:
28+
parentRefs:
29+
- name: gateway
30+
sectionName: http
31+
- name: gateway
32+
sectionName: http2
33+
hostnames:
34+
- "cafe.example.com"
35+
- "cafe.example.org"
36+
rules:
37+
- matches:
38+
- path:
39+
type: Exact
40+
value: /tea
41+
backendRefs:
42+
- name: tea
43+
port: 80
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: coffee
5+
spec:
6+
replicas: 1
7+
selector:
8+
matchLabels:
9+
app: coffee
10+
template:
11+
metadata:
12+
labels:
13+
app: coffee
14+
spec:
15+
containers:
16+
- name: coffee
17+
image: nginxdemos/nginx-hello:plain-text
18+
ports:
19+
- containerPort: 8080
20+
---
21+
apiVersion: v1
22+
kind: Service
23+
metadata:
24+
name: coffee
25+
spec:
26+
ports:
27+
- port: 80
28+
targetPort: 8080
29+
protocol: TCP
30+
name: http
31+
selector:
32+
app: coffee
33+
---
34+
apiVersion: apps/v1
35+
kind: Deployment
36+
metadata:
37+
name: tea
38+
spec:
39+
replicas: 1
40+
selector:
41+
matchLabels:
42+
app: tea
43+
template:
44+
metadata:
45+
labels:
46+
app: tea
47+
spec:
48+
containers:
49+
- name: tea
50+
image: nginxdemos/nginx-hello:plain-text
51+
ports:
52+
- containerPort: 8080
53+
---
54+
apiVersion: v1
55+
kind: Service
56+
metadata:
57+
name: tea
58+
spec:
59+
ports:
60+
- port: 80
61+
targetPort: 8080
62+
protocol: TCP
63+
name: http
64+
selector:
65+
app: tea
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
apiVersion: gateway.nginx.org/v1alpha1
2+
kind: ClientSettingsPolicy
3+
metadata:
4+
name: keepalive-requests
5+
namespace: default
6+
spec:
7+
targetRef:
8+
group: gateway.networking.k8s.io
9+
kind: Gateway
10+
name: gateway
11+
keepAlive:
12+
requests: 100
13+
---
14+
apiVersion: gateway.nginx.org/v1alpha1
15+
kind: ClientSettingsPolicy
16+
metadata:
17+
name: body-max-size
18+
namespace: default
19+
spec:
20+
targetRef:
21+
group: gateway.networking.k8s.io
22+
kind: Gateway
23+
name: gateway
24+
body:
25+
maxSize: 10m
26+
---
27+
apiVersion: gateway.nginx.org/v1alpha1
28+
kind: ClientSettingsPolicy
29+
metadata:
30+
name: body-timeout
31+
namespace: default
32+
spec:
33+
targetRef:
34+
group: gateway.networking.k8s.io
35+
kind: Gateway
36+
name: gateway
37+
body:
38+
timeout: 30s
39+
---
40+
apiVersion: gateway.nginx.org/v1alpha1
41+
kind: ClientSettingsPolicy
42+
metadata:
43+
name: keepalive-rest
44+
namespace: default
45+
spec:
46+
targetRef:
47+
group: gateway.networking.k8s.io
48+
kind: Gateway
49+
name: gateway
50+
keepAlive:
51+
time: 5s
52+
timeout:
53+
server: 2s
54+
header: 1s
55+
---
56+
apiVersion: gateway.nginx.org/v1alpha1
57+
kind: ClientSettingsPolicy
58+
metadata:
59+
name: zzzzzz-conflict
60+
namespace: default
61+
spec:
62+
targetRef:
63+
group: gateway.networking.k8s.io
64+
kind: Gateway
65+
name: gateway
66+
keepAlive:
67+
time: 5s
68+
timeout:
69+
server: 2s
70+
header: 1s
71+
---
72+
apiVersion: gateway.nginx.org/v1alpha1
73+
kind: ClientSettingsPolicy
74+
metadata:
75+
name: zzzzzz-conflict-2
76+
namespace: default
77+
spec:
78+
targetRef:
79+
group: gateway.networking.k8s.io
80+
kind: Gateway
81+
name: gateway
82+
body:
83+
maxSize: 50m
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
apiVersion: gateway.networking.k8s.io/v1
2+
kind: Gateway
3+
metadata:
4+
name: gateway
5+
spec:
6+
gatewayClassName: nginx
7+
listeners:
8+
- name: http
9+
port: 80
10+
protocol: HTTP
11+
hostname: "*.example.com"
12+
- name: http2
13+
port: 8080
14+
protocol: HTTP
15+
hostname: "*.example.org"
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
apiVersion: gateway.nginx.org/v1alpha1
2+
kind: ClientSettingsPolicy
3+
metadata:
4+
name: gw
5+
namespace: default
6+
spec:
7+
targetRef:
8+
group: gateway.networking.k8s.io
9+
kind: Gateway
10+
name: gateway
11+
body:
12+
maxSize: 10m
13+
timeout: 30s
14+
keepAlive:
15+
requests: 100
16+
time: 5s
17+
timeout:
18+
server: 2s
19+
header: 1s
20+
---
21+
apiVersion: gateway.nginx.org/v1alpha1
22+
kind: ClientSettingsPolicy
23+
metadata:
24+
name: tea-route
25+
namespace: default
26+
spec:
27+
targetRef:
28+
group: gateway.networking.k8s.io
29+
kind: HTTPRoute
30+
name: tea
31+
body:
32+
maxSize: 800m
33+
---
34+
apiVersion: gateway.nginx.org/v1alpha1
35+
kind: ClientSettingsPolicy
36+
metadata:
37+
name: coffee-route
38+
namespace: default
39+
spec:
40+
targetRef:
41+
group: gateway.networking.k8s.io
42+
kind: HTTPRoute
43+
name: coffee
44+
keepAlive:
45+
requests: 60
46+
time: 7s
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
apiVersion: gateway.nginx.org/v1alpha1
2+
kind: ClientSettingsPolicy
3+
metadata:
4+
name: keepalive-requests
5+
namespace: default
6+
spec:
7+
targetRef:
8+
group: gateway.networking.k8s.io
9+
kind: Gateway
10+
name: gateway
11+
keepAlive:
12+
requests: 100
13+
---
14+
apiVersion: gateway.nginx.org/v1alpha1
15+
kind: ClientSettingsPolicy
16+
metadata:
17+
name: body-max-size
18+
namespace: default
19+
spec:
20+
targetRef:
21+
group: gateway.networking.k8s.io
22+
kind: Gateway
23+
name: gateway
24+
body:
25+
maxSize: 10m
26+
---
27+
apiVersion: gateway.nginx.org/v1alpha1
28+
kind: ClientSettingsPolicy
29+
metadata:
30+
name: body-timeout
31+
namespace: default
32+
spec:
33+
targetRef:
34+
group: gateway.networking.k8s.io
35+
kind: Gateway
36+
name: gateway
37+
body:
38+
timeout: 30s
39+
---
40+
apiVersion: gateway.nginx.org/v1alpha1
41+
kind: ClientSettingsPolicy
42+
metadata:
43+
name: keepalive-rest
44+
namespace: default
45+
spec:
46+
targetRef:
47+
group: gateway.networking.k8s.io
48+
kind: Gateway
49+
name: gateway
50+
keepAlive:
51+
time: 5s
52+
timeout:
53+
server: 2s
54+
header: 1s

0 commit comments

Comments
 (0)