Skip to content

Commit 37defa3

Browse files
committed
simplify BackendTLSPolicy test infrastructure and remove unnecessary code
Signed-off-by: Norwin Schnyder <[email protected]>
1 parent 8fe8316 commit 37defa3

File tree

4 files changed

+21
-196
lines changed

4 files changed

+21
-196
lines changed

conformance/tests/backendtlspolicy.yaml

Lines changed: 12 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ metadata:
7878
namespace: gateway-conformance-infra
7979
spec:
8080
selector:
81-
app: backendtlspolicy-test
81+
app: tls-backend
8282
ports:
8383
- name: "btls"
8484
protocol: TCP
@@ -92,7 +92,7 @@ metadata:
9292
namespace: gateway-conformance-infra
9393
spec:
9494
selector:
95-
app: backendtlspolicy-test
95+
app: tls-backend
9696
ports:
9797
- name: "btls"
9898
protocol: TCP
@@ -107,80 +107,14 @@ metadata:
107107
namespace: gateway-conformance-infra
108108
spec:
109109
selector:
110-
app: backendtlspolicy-test
110+
app: tls-backend
111111
ports:
112112
- name: "btls"
113113
protocol: TCP
114114
appProtocol: HTTPS
115115
port: 443
116116
targetPort: 8443
117117
---
118-
# Deployment must not be applied until after the secret is generated.
119-
apiVersion: apps/v1
120-
kind: Deployment
121-
metadata:
122-
name: backendtlspolicy-test
123-
namespace: gateway-conformance-infra
124-
labels:
125-
app: backendtlspolicy-test
126-
spec:
127-
replicas: 1
128-
selector:
129-
matchLabels:
130-
app: backendtlspolicy-test
131-
template:
132-
metadata:
133-
labels:
134-
app: backendtlspolicy-test
135-
spec:
136-
containers:
137-
- name: backendtlspolicy-test
138-
image: gcr.io/k8s-staging-gateway-api/echo-basic:v20240412-v1.0.0-394-g40c666fd
139-
volumeMounts:
140-
- name: ca-volume
141-
mountPath: /etc/ca-volume
142-
- name: secret-volume
143-
mountPath: /etc/secret-volume
144-
env:
145-
- name: POD_NAME
146-
valueFrom:
147-
fieldRef:
148-
fieldPath: metadata.name
149-
- name: NAMESPACE
150-
valueFrom:
151-
fieldRef:
152-
fieldPath: metadata.namespace
153-
- name: CA_CERT
154-
value: /etc/ca-volume/crt
155-
- name: CA_CERT_KEY
156-
value: /etc/ca-volume/key
157-
- name: TLS_SERVER_CERT
158-
value: /etc/secret-volume/crt
159-
- name: TLS_SERVER_PRIVKEY
160-
value: /etc/secret-volume/key
161-
resources:
162-
requests:
163-
cpu: 10m
164-
volumes:
165-
- name: ca-volume
166-
configMap:
167-
# This configMap is generated dynamically by the test suite.
168-
name: backend-tls-checks-certificate
169-
items:
170-
- key: ca.crt
171-
path: crt
172-
- key: key.crt
173-
path: key
174-
- name: secret-volume
175-
secret:
176-
# This secret is generated dynamically by the test suite.
177-
secretName: tls-checks-certificate
178-
items:
179-
- key: tls.crt
180-
path: crt
181-
- key: tls.key
182-
path: key
183-
---
184118
apiVersion: gateway.networking.k8s.io/v1alpha3
185119
kind: BackendTLSPolicy
186120
metadata:
@@ -196,8 +130,9 @@ spec:
196130
caCertificateRefs:
197131
- group: ""
198132
kind: ConfigMap
199-
# This secret is generated dynamically by the test suite.
200-
name: "backend-tls-checks-certificate"
133+
# This ConfigMap is generated dynamically by the test suite.
134+
# It contains the CA certificate used to sign the tls-backend serving certificate.
135+
name: "tls-checks-ca-certificate"
201136
hostname: "abc.example.com"
202137
---
203138
apiVersion: gateway.networking.k8s.io/v1alpha3
@@ -215,8 +150,9 @@ spec:
215150
caCertificateRefs:
216151
- group: ""
217152
kind: ConfigMap
218-
# This secret is generated dynamically by the test suite.
219-
name: "backend-tls-checks-certificate"
153+
# This ConfigMap is generated dynamically by the test suite.
154+
# It contains the CA certificate used to sign the tls-backend serving certificate.
155+
name: "tls-checks-ca-certificate"
220156
hostname: "mismatch.example.com"
221157
---
222158
apiVersion: gateway.networking.k8s.io/v1alpha3
@@ -234,6 +170,7 @@ spec:
234170
caCertificateRefs:
235171
- group: ""
236172
kind: ConfigMap
237-
# This secret is generated dynamically by the test suite.
238-
name: "backend-tls-mismatch-certificate"
173+
# This ConfigMap is generated dynamically by the test suite.
174+
# It contains a random, unused CA certificate to force validation to fail.
175+
name: "mismatch-ca-certificate"
239176
hostname: "abc.example.com"

conformance/utils/kubernetes/certificate.go

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -148,12 +148,10 @@ func generateRSACert(hosts []string, keyOut, certOut io.Writer, ca *x509.Certifi
148148

149149
// MustCreateCACertConfigMap will create a ConfigMap containing a CA Certificate, given a TLS Secret
150150
// for that CA certificate. Also returns the CA certificate.
151-
func MustCreateCACertConfigMap(t *testing.T, namespace, configMapName string, hosts []string) (*corev1.ConfigMap, *x509.Certificate, *rsa.PrivateKey) {
152-
require.NotEmpty(t, hosts, "require a non-empty hosts for Subject Alternate Name values")
153-
151+
func MustCreateCACertConfigMap(t *testing.T, namespace, configMapName string) (*corev1.ConfigMap, *x509.Certificate, *rsa.PrivateKey) {
154152
var certData, keyData bytes.Buffer
155153

156-
ca, caBytes, caPrivKey, err := generateCACert(hosts)
154+
ca, caBytes, caPrivKey, err := generateCACert()
157155
if err != nil {
158156
t.Errorf("failed to generate CA certificate and key: %v", err)
159157
return nil, nil, nil
@@ -177,15 +175,13 @@ func MustCreateCACertConfigMap(t *testing.T, namespace, configMapName string, ho
177175
},
178176
Data: map[string]string{
179177
"ca.crt": certData.String(),
180-
// Don't do this in production, this is just for conformance testing.
181-
"key.crt": keyData.String(),
182178
},
183179
}
184180
return caConfigMap, ca, caPrivKey
185181
}
186182

187-
// generateCACert generates a CA and a CA-signed certificate valid for a year.
188-
func generateCACert(hosts []string) (*x509.Certificate, []byte, *rsa.PrivateKey, error) {
183+
// generateCACert generates a CA certificate valid for a year.
184+
func generateCACert() (*x509.Certificate, []byte, *rsa.PrivateKey, error) {
189185
var caBytes []byte
190186

191187
// Create the CA certificate template.
@@ -209,15 +205,6 @@ func generateCACert(hosts []string) (*x509.Certificate, []byte, *rsa.PrivateKey,
209205
BasicConstraintsValid: true,
210206
}
211207

212-
// Ensure only valid hosts make it into the CA cert.
213-
for _, h := range hosts {
214-
if ip := net.ParseIP(h); ip != nil {
215-
ca.IPAddresses = append(ca.IPAddresses, ip)
216-
} else if err := validateHost(h); err == nil {
217-
ca.DNSNames = append(ca.DNSNames, h)
218-
}
219-
}
220-
221208
// Generate the private key to sign certificates.
222209
caPrivKey, err := rsa.GenerateKey(rand.Reader, rsaBits)
223210
if err != nil {

conformance/utils/kubernetes/certificate_test.go

Lines changed: 0 additions & 101 deletions
This file was deleted.

conformance/utils/suite/suite.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -388,13 +388,15 @@ func (suite *ConformanceTestSuite) Setup(t *testing.T, tests []ConformanceTest)
388388
suite.Applier.MustApplyObjectsWithCleanup(t, suite.Client, suite.TimeoutConfig, []client.Object{secret}, suite.Cleanup)
389389
secret = kubernetes.MustCreateSelfSignedCertSecret(t, "gateway-conformance-app-backend", "tls-passthrough-checks-certificate", []string{"abc.example.com"})
390390
suite.Applier.MustApplyObjectsWithCleanup(t, suite.Client, suite.TimeoutConfig, []client.Object{secret}, suite.Cleanup)
391-
caConfigMapBST, _, _ := kubernetes.MustCreateCACertConfigMap(t, "gateway-conformance-infra", "backend-tls-mismatch-certificate", []string{"nex.example.com"})
392-
suite.Applier.MustApplyObjectsWithCleanup(t, suite.Client, suite.TimeoutConfig, []client.Object{caConfigMapBST}, suite.Cleanup)
393-
caConfigMap, ca, caPrivKey := kubernetes.MustCreateCACertConfigMap(t, "gateway-conformance-infra", "backend-tls-checks-certificate", []string{"abc.example.com"})
391+
caConfigMap, ca, caPrivKey := kubernetes.MustCreateCACertConfigMap(t, "gateway-conformance-infra", "tls-checks-ca-certificate")
394392
suite.Applier.MustApplyObjectsWithCleanup(t, suite.Client, suite.TimeoutConfig, []client.Object{caConfigMap}, suite.Cleanup)
395393
secret = kubernetes.MustCreateCASignedCertSecret(t, "gateway-conformance-infra", "tls-checks-certificate", []string{"abc.example.com"}, ca, caPrivKey)
396394
suite.Applier.MustApplyObjectsWithCleanup(t, suite.Client, suite.TimeoutConfig, []client.Object{secret}, suite.Cleanup)
397395

396+
// The following CA ceritficate is used for BackendTLSPolicy testing to intentionally force TLS validation to fail.
397+
caConfigMap, _, _ = kubernetes.MustCreateCACertConfigMap(t, "gateway-conformance-infra", "mismatch-ca-certificate")
398+
suite.Applier.MustApplyObjectsWithCleanup(t, suite.Client, suite.TimeoutConfig, []client.Object{caConfigMap}, suite.Cleanup)
399+
398400
tlog.Logf(t, "Test Setup: Ensuring Gateways and Pods from base manifests are ready")
399401
namespaces := []string{
400402
"gateway-conformance-infra",

0 commit comments

Comments
 (0)