Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -375,4 +375,70 @@ func TestBasic(t *testing.T) {
},
})
})

t.Run("Frontend with TCP keepalive", func(t *testing.T) {
test(t, translatorTestCase{
inputFile: "frontend/tcp-keepalive.yaml",
outputFile: "frontend/tcp-keepalive.yaml",
gwNN: types.NamespacedName{
Namespace: "default",
Name: "example-gateway",
},
})
})

t.Run("Frontend with TLS handshake timeout", func(t *testing.T) {
test(t, translatorTestCase{
inputFile: "frontend/tls-handshake.yaml",
outputFile: "frontend/tls-handshake.yaml",
gwNN: types.NamespacedName{
Namespace: "default",
Name: "example-gateway",
},
})
})

t.Run("Frontend with HTTP configuration", func(t *testing.T) {
test(t, translatorTestCase{
inputFile: "frontend/http-config.yaml",
outputFile: "frontend/http-config.yaml",
gwNN: types.NamespacedName{
Namespace: "default",
Name: "example-gateway",
},
})
})

t.Run("Frontend with AccessLog filter", func(t *testing.T) {
test(t, translatorTestCase{
inputFile: "frontend/accesslog-filter.yaml",
outputFile: "frontend/accesslog-filter.yaml",
gwNN: types.NamespacedName{
Namespace: "default",
Name: "example-gateway",
},
})
})

t.Run("Frontend with combined TCP, TLS, and HTTP", func(t *testing.T) {
test(t, translatorTestCase{
inputFile: "frontend/combined-tcp-tls-http.yaml",
outputFile: "frontend/combined-tcp-tls-http.yaml",
gwNN: types.NamespacedName{
Namespace: "default",
Name: "example-gateway",
},
})
})

t.Run("Frontend with invalid tracing configuration", func(t *testing.T) {
test(t, translatorTestCase{
inputFile: "frontend/invalid-tracing.yaml",
outputFile: "frontend/invalid-tracing.yaml",
gwNN: types.NamespacedName{
Namespace: "default",
Name: "example-gateway",
},
})
})
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: example-gateway
spec:
gatewayClassName: agentgateway
listeners:
- name: http
protocol: HTTP
port: 80
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: example-route
spec:
parentRefs:
- name: example-gateway
hostnames:
- "example.com"
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: example-svc
port: 8080
---
apiVersion: v1
kind: Service
metadata:
name: example-svc
spec:
ports:
- port: 8080
protocol: TCP
---
apiVersion: gateway.kgateway.dev/v1alpha1
kind: AgentgatewayPolicy
metadata:
name: frontend-accesslog-policy
spec:
targetRefs:
- kind: Gateway
name: example-gateway
frontend:
accessLog:
filter: 'response.code >= 400'
attributes:
remove:
- "http.method"
- "http.user_agent"
add:
- name: "custom_field"
expression: 'request.headers["x-custom-id"]'
- name: "status_class"
expression: 'string(response.code)[0] + "xx"'
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: example-gateway
spec:
gatewayClassName: agentgateway
listeners:
- name: https
protocol: HTTPS
port: 443
tls:
mode: Terminate
certificateRefs:
- kind: Secret
name: example-cert
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: example-route
spec:
parentRefs:
- name: example-gateway
hostnames:
- "example.com"
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: example-svc
port: 8080
---
apiVersion: v1
kind: Service
metadata:
name: example-svc
spec:
ports:
- port: 8080
protocol: TCP
---
apiVersion: v1
kind: Secret
metadata:
name: example-cert
type: kubernetes.io/tls
data:
tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURFVENDQWZtZ0F3SUJBZ0lVQk40RjJZZjN2T1Y4M0xWMGFQRkJqZGZJSVdnd0RRWUpLb1pJaHZjTkFRRUwKQlFBd0dERVdNQlFHQTFVRUF3d05aWGhoYlhCc1pTNWpiMjB3SGhjTk1qUXhNVEEwTVRJek1qQXdXaGNOTXpRdwpNekF6TVRJek1qQXdXakFZTVJZd0ZBWURWUVFEREExbGVHRnRjR3hsTG1OdmJUQ0NBU0l3RFFZSktvWklodmNOCkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFNVGc0UjBnV0VvRjVOSVpORlBFdE5PNEhYMnVqWjBxaFhGRzNkaGcKOUpSaHlxWjNyTGRGVHhXcDBhK1FlTzh0SlNaRGcyMGRYZXB3N0k4ZVdMRUpHZVNYdzBGQzFzOHhvY2RVdTRGawppK0pRWFFDbzRBRlZjY3k3MjBzN21JVGxsWkUzN3R0UFphQ2F2Q0J6SEZtQ3RZTWlLNWhvN1JHcDJabmFhRGx0CmdtaW5EOG5mUGozYnR6UUZLaFhYK0ZoS2J5SXdSQVNCTGdqQmNVMW4wK0VZbzFjdENnSGdLRWM3VW1SekNxNzUKWDBWU21XT1N1WTBQSGpGY2V5TXZyQy9FcXN2cnVrMW1US0FuNEZOQ0tJL2E0YU5IU1l0SzlkdGpxeE43VmE2MwpmOW5VREZROEtxR2Zvb1RwaHk4WHVrMmpJV0pmMVZ6azB1VjBHemZqbXFGdGJlOENBd0VBQWFOVE1GRXdIUVlEClZSMEVCQllFRkNMTnVRa0VGMzREV0JsVm9vMWhPc0QxV2llZk1COEdBMVVkSXdRWU1CYUFGQkxOdVFrRUYzNEQKV0JsVm9vMWhPc0QxV2llZk1BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQgpBQmN3Wnd1Q3h0TVlSbHNaVSszV3dpdUU5VzU2YWdyRzNGdEFxYlB4R0ZGZUhCSTJaTkd4ZldRR08xYXFXNnJkCmVwQ0hNYkJhVGkyQWJ2cXk4ZkRwMVE4UFVxY2krZUFIOXBiN0tVRnNFU2NpRzJMZDBVRVlrS3I0dTBnazN2NmMKejJCbTF4R1R1bE9xNTNjNjBOeTRKdmlOMzFSNXBHMlFRU3NZbDdJemkyTlNxRDU4L0NnMGRJRGMybDVaeHQ3VgpnRnBNN0NhbG9sMFdTZlVOT0s5WkM4d05XUWZ0eXlXSEw2dEZ6SWZHRWxWWHNqZndnY1FHT1NkeEJmU1ZnSjdaCkZTaDdmdUl6SEdKbHN4M1VQdU9iRkxabWdMdzlNTU85TnFYdmRxb0RXMlhjMFpKdEpqWjZZWFFKUERIZkV5OXoKcGE1UllQdWJYNnBZU1lzcm1wVWVWVmc9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
tls.key: LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2UUlCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktjd2dnU2pBZ0VBQW9JQkFRREU0T0VkSUZoS0JlVFMKR1RSVHhMVFR1QjE5cm8yZEtvVnhSdDNZWVBTVVljcW1kNnkzUlU4VnFkR3ZrSGp2TFNVbVE0TnRIVjNxY095UApIbGl4Q1Jua2w4TkJRdGJQTWFISFZMdUJaSXZpVUYwQXFPQUJWWEhNdTl0TE81aUU1WldSTis3YlQyV2dtcndnCmN4eFpnckdESWl1WWFPMFJxZG1aMm1nNWJZSm9wdy9KM3o0OTI3YzBCU29WMS9oWVNtOGlNRVFFZ1M0SXdYRk4KWjlQaEdLTlhMUW9CNENoSE8xSmtjd3F1K1Y5RlVwbGprcm1ORHg0eFhIc2pMNnd2eEtyTDY3cE5aa3lnSitCVApRaWlQMnVHalIwbUxTdlhiWTZzVGUxV3V0My9aMUF4VVBDcWhuNktFNlljdkY3cE5veUZpWDlWYzVOTGxkQnMzCjQ1cWhiVzN2QWdNQkFBRUNnZ0VBUmRoVTdQZm5WVmVTazZSalltdUVTRkFCSmpMbzJCQmRKMzVMS2l4M3FRRE8KbnlYQXJ5eDhxZ2NxQ3JqV0oxOXBmdDNaMmh2aFl3MHFVM1VVZFJrL3BxNzYxYTBORUd3Y2pjZGpVN0RHcHlaMwpIYXp1VU5uL1ZuRUIrRDZlZnkyZVloTHhsTE1aVXNNYno3NFppRmVScGh2S3lySHRjY0N3SEFsU29MYUt6OUk0CmRZU01TZlRMRkNMSDBzYzArdjBSRHJzcnR1dExyaTJqTzF1c3JxdmE3TGVWdGdCTEQvdFhGQUVCUVRJNU1UY0MKQ0ZOYU9qNGpwL28wbnlwUGhsUHk4UmZYMndGUGxGMlhCNml0R3l3aUVrTGJTdUJqZlBkWXg0emFxYUUvVFhrWgpGdGYwWVluT1hQYjBORWF0V0RlR2JHR3VObllkcTJndHBLRzZycU9pQVFLQmdRRHozTlk2N1FvWWNDWHlkVzd6CmlqVktRNzhWSW9zRE42RWZ6N2FQNllHbWUyRkFOZ0ppb2Y4VTNDV3F2RGdmWktobytYdDRqdjcyMC9UTHlxNVoKcWxJdVQ3T25MRmZ1RFZhQUZZRmJqSElaT1A3RnlreGllRnQ5QUhNNW1TdWhQZjhHRDVkbFhVdUo4cXhrdmpnWQpVV3JFcHNENkZPZ0NQbElueXR0akp3OERRUUtCZ1FETnZCY1ZPUFEvVmQ5ZGlvQlM5TjdFMnNmSkxGNHBwZlBsCkI4UHJmU0Y4b0VuTE9VR1piTDFYcXNqRFFKY1ZWTDE3N1U0b1k0eVI1YWxuQTVOMWZkT2hHQjJRR0tRU2xkSmUKQTlsZXMvdllRVVFQUmNvQ2xQUEpRbWdmSGdqY0M5UUU4N2UyNVFDNnVrYmxSUHBORjJJU3FNUGEvZXBGZ3ZjawpJaW9JRThxRmd3S0JnUURiU3lLbE4rN1VRbS9oNnRDbHV6VVhiN3U5ZEE0KzI2Uk1LTjUrZExHZktGRVdJZGNaCm4rSjJYWWJLWWQ5UGw2QmhHR2h4V1JLQzBFQTdoQXNLcC84bnBjcHBGczFZZU1UWnRJdHZGUVdWaUhCckxCNGkKZ2xubVhQTXhFWWJZek1FWjJvWGJhZFdvTndHYTZjQ1lOcVRNbGhLRStQVmUrWUYvSU5aSFE0ZU13UUtCZ0M2UgprZzRDdFpMYXpKcEJDb3Q2N1kyaU5xUGhmYXNxVjBlaW94V2t2eGtNeHFxVExZcGJHZlp2U0EyNmdjRCtLcE05CjJoSllvVWIrUkpEU0gxZVJOdHZ5T0JsSVNOYVJDbTFjZDlXQzBOMGs4WHJXdFVmdVhIdGxLdHhxNGwzWWQzY3EKYnh6L3c1OXlOQzJqdjdDRXBQaTB0YmI0SFpjR0dST0h5ekFSWTdQQkFvR0FHSW1xVmxhWlV4eHk2SE02R3FXdApvcExGRE1RTnJ0dGVIcU1CQkJBNjU0RnBvdEFzRVppQ1JPbUNxd0ZwTmM5TjB2UGcrSjYxdnlsZ2RtczNIOThCCm1nRGtLeE42M0N4dFhURDFrSEU0dWZYcHVpZmhUSWIrZUg2RDlPQUJPS0VtUGt2NHdTZTl3OXhMMXZBdEwyMGcKTTYybDlCVitlTjBReEhpS3hqRUQ3T0U9Ci0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K
---
apiVersion: gateway.kgateway.dev/v1alpha1
kind: AgentgatewayPolicy
metadata:
name: frontend-combined-policy
spec:
targetRefs:
- kind: Gateway
name: example-gateway
frontend:
tcp:
keepalive:
retries: 3
time: 60s
interval: 15s
tls:
handshakeTimeout: 10s
http:
maxBufferSize: 2097152
http1IdleTimeout: 600s
http2KeepaliveInterval: 60s
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: example-gateway
spec:
gatewayClassName: agentgateway
listeners:
- name: http
protocol: HTTP
port: 80
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: example-route
spec:
parentRefs:
- name: example-gateway
hostnames:
- "example.com"
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: example-svc
port: 8080
---
apiVersion: v1
kind: Service
metadata:
name: example-svc
spec:
ports:
- port: 8080
protocol: TCP
---
apiVersion: gateway.kgateway.dev/v1alpha1
kind: AgentgatewayPolicy
metadata:
name: frontend-http-policy
spec:
targetRefs:
- kind: Gateway
name: example-gateway
frontend:
http:
maxBufferSize: 4194304
http1MaxHeaders: 200
http1IdleTimeout: 300s
http2WindowSize: 65536
http2ConnectionWindowSize: 131072
http2FrameSize: 32768
http2KeepaliveInterval: 30s
http2KeepaliveTimeout: 10s
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's change the example to test a valid tracing config to check the output xds config looks correct.

Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: example-gateway
spec:
gatewayClassName: agentgateway
listeners:
- name: http
protocol: HTTP
port: 80
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: example-route
spec:
parentRefs:
- name: example-gateway
hostnames:
- "example.com"
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: example-svc
port: 8080
---
apiVersion: v1
kind: Service
metadata:
name: example-svc
spec:
ports:
- port: 8080
protocol: TCP
---
apiVersion: gateway.kgateway.dev/v1alpha1
kind: AgentgatewayPolicy
metadata:
name: frontend-invalid-tracing
spec:
targetRefs:
- kind: Gateway
name: example-gateway
frontend:
tcp:
keepalive:
retries: 3
tracing:
backendRef:
name: otlp-backend
port: 4317
protocol: GRPC
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: example-gateway
spec:
gatewayClassName: agentgateway
listeners:
- name: http
protocol: HTTP
port: 80
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: example-route
spec:
parentRefs:
- name: example-gateway
hostnames:
- "example.com"
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: example-svc
port: 8080
---
apiVersion: v1
kind: Service
metadata:
name: example-svc
spec:
ports:
- port: 8080
protocol: TCP
---
apiVersion: gateway.kgateway.dev/v1alpha1
kind: AgentgatewayPolicy
metadata:
name: frontend-tcp-policy
spec:
targetRefs:
- kind: Gateway
name: example-gateway
frontend:
tcp:
keepalive:
retries: 5
time: 120s
interval: 30s
Loading
Loading