Skip to content

Commit a165403

Browse files
committed
Added snippet check to transport server validation
1 parent 1ab1650 commit a165403

File tree

6 files changed

+57
-8
lines changed

6 files changed

+57
-8
lines changed

cmd/nginx-ingress/main.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -604,7 +604,7 @@ func main() {
604604
templateExecutorV2, *nginxPlus, isWildcardEnabled, plusCollector, *enablePrometheusMetrics, latencyCollector, *enableLatencyMetrics)
605605
controllerNamespace := os.Getenv("POD_NAMESPACE")
606606

607-
transportServerValidator := cr_validation.NewTransportServerValidator(*enableTLSPassthrough)
607+
transportServerValidator := cr_validation.NewTransportServerValidator(*enableTLSPassthrough, *enableSnippets)
608608
virtualServerValidator := cr_validation.NewVirtualServerValidator(*nginxPlus)
609609

610610
lbcInput := k8s.NewLoadBalancerControllerInput{

examples-of-custom-resources/basic-tcp-udp/transport-server-tcp.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ kind: TransportServer
33
metadata:
44
name: dns-tcp
55
spec:
6+
serverSnippets: "deny 192.168.123.123;"
67
listener:
78
name: dns-tcp
89
protocol: TCP

internal/configs/transportserver.go

-3
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,6 @@ func generateTransportServerConfig(transportServerEx *TransportServerEx, listene
6060
}
6161

6262
serverSnippets := generateSnippets(snippetsEnabled, transportServerEx.TransportServer.Spec.ServerSnippets, []string{})
63-
if !snippetsEnabled && (transportServerEx.TransportServer.Spec.ServerSnippets != "") {
64-
return nil, fmt.Errorf("snippet specified but snippets feature is not enabled")
65-
}
6663

6764
statusZone := transportServerEx.TransportServer.Spec.Listener.Name
6865
if transportServerEx.TransportServer.Spec.Listener.Name == conf_v1alpha1.TLSPassthroughListenerName {

internal/k8s/configuration_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ func createTestConfiguration() *Configuration {
2222
appProtectEnabled := false
2323
internalRoutesEnabled := false
2424
isTLSPassthroughEnabled := true
25+
snippetsEnabled := true
2526
return NewConfiguration(
2627
lbc.HasCorrectIngressClass,
2728
isPlus,
@@ -32,7 +33,7 @@ func createTestConfiguration() *Configuration {
3233
80: true,
3334
443: true,
3435
}),
35-
validation.NewTransportServerValidator(isTLSPassthroughEnabled),
36+
validation.NewTransportServerValidator(isTLSPassthroughEnabled, snippetsEnabled),
3637
isTLSPassthroughEnabled,
3738
)
3839
}

pkg/apis/configuration/validation/transportserver.go

+16-3
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,15 @@ import (
1111

1212
// TransportServerValidator validates a TransportServer resource.
1313
type TransportServerValidator struct {
14-
tlsPassthrough bool
14+
tlsPassthrough bool
15+
snippetsEnabled bool
1516
}
1617

1718
// NewTransportServerValidator creates a new TransportServerValidator.
18-
func NewTransportServerValidator(tlsPassthrough bool) *TransportServerValidator {
19+
func NewTransportServerValidator(tlsPassthrough bool, snippetsEnabled bool) *TransportServerValidator {
1920
return &TransportServerValidator{
20-
tlsPassthrough: tlsPassthrough,
21+
tlsPassthrough: tlsPassthrough,
22+
snippetsEnabled: snippetsEnabled,
2123
}
2224
}
2325

@@ -48,6 +50,17 @@ func (tsv *TransportServerValidator) validateTransportServerSpec(spec *v1alpha1.
4850
allErrs = append(allErrs, validateTransportServerAction(spec.Action, fieldPath.Child("action"), upstreamNames)...)
4951
}
5052

53+
allErrs = append(allErrs, validateSnippets(spec.ServerSnippets, fieldPath.Child("serverSnippets"), tsv.snippetsEnabled)...)
54+
55+
return allErrs
56+
}
57+
58+
func validateSnippets(serverSnippet string, fieldPath *field.Path, snippetsEnabled bool) field.ErrorList {
59+
allErrs := field.ErrorList{}
60+
if !snippetsEnabled && serverSnippet != "" {
61+
return append(allErrs, field.Forbidden(fieldPath, "snippet specified but snippets feature is not enabled"))
62+
}
63+
5164
return allErrs
5265
}
5366

pkg/apis/configuration/validation/transportserver_test.go

+37
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,43 @@ func TestValidateTransportServerHost(t *testing.T) {
206206
}
207207
}
208208

209+
func TestValidateTransportServerSnippet(t *testing.T) {
210+
tests := []struct {
211+
snippet string
212+
isSnippetsEnabled bool
213+
expectError bool
214+
}{
215+
{
216+
snippet: "",
217+
isSnippetsEnabled: false,
218+
expectError: false,
219+
},
220+
{
221+
snippet: "deny 192.168.1.1;",
222+
isSnippetsEnabled: false,
223+
expectError: true,
224+
},
225+
{
226+
snippet: "deny 192.168.1.1;",
227+
isSnippetsEnabled: true,
228+
expectError: false,
229+
},
230+
}
231+
232+
for _, test := range tests {
233+
allErrs := validateSnippets(test.snippet, field.NewPath("serverSnippet"), test.isSnippetsEnabled)
234+
if test.expectError {
235+
if len(allErrs) < 1 {
236+
t.Errorf("validateSnippets(%q, %v) failed to return an error for invalid input", test.snippet, test.isSnippetsEnabled)
237+
}
238+
} else {
239+
if len(allErrs) > 0 {
240+
t.Errorf("validateSnippets(%q, %v) returned errors %v for valid input", test.snippet, test.isSnippetsEnabled, allErrs)
241+
}
242+
}
243+
}
244+
}
245+
209246
func TestValidateTransportServerHostFails(t *testing.T) {
210247
tests := []struct {
211248
host string

0 commit comments

Comments
 (0)