Skip to content

Commit a783fc4

Browse files
committed
simplify BackendTLSPolicy test infrastructure and remove unnecessary code
Signed-off-by: Norwin Schnyder <[email protected]>
1 parent 22b29c1 commit a783fc4

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
@@ -45,7 +45,7 @@ metadata:
4545
namespace: gateway-conformance-infra
4646
spec:
4747
selector:
48-
app: backendtlspolicy-test
48+
app: tls-backend
4949
ports:
5050
- name: "btls"
5151
protocol: TCP
@@ -59,7 +59,7 @@ metadata:
5959
namespace: gateway-conformance-infra
6060
spec:
6161
selector:
62-
app: backendtlspolicy-test
62+
app: tls-backend
6363
ports:
6464
- name: "btls"
6565
protocol: TCP
@@ -74,80 +74,14 @@ metadata:
7474
namespace: gateway-conformance-infra
7575
spec:
7676
selector:
77-
app: backendtlspolicy-test
77+
app: tls-backend
7878
ports:
7979
- name: "btls"
8080
protocol: TCP
8181
appProtocol: HTTPS
8282
port: 443
8383
targetPort: 8443
8484
---
85-
# Deployment must not be applied until after the secret is generated.
86-
apiVersion: apps/v1
87-
kind: Deployment
88-
metadata:
89-
name: backendtlspolicy-test
90-
namespace: gateway-conformance-infra
91-
labels:
92-
app: backendtlspolicy-test
93-
spec:
94-
replicas: 1
95-
selector:
96-
matchLabels:
97-
app: backendtlspolicy-test
98-
template:
99-
metadata:
100-
labels:
101-
app: backendtlspolicy-test
102-
spec:
103-
containers:
104-
- name: backendtlspolicy-test
105-
image: gcr.io/k8s-staging-gateway-api/echo-basic:v20240412-v1.0.0-394-g40c666fd
106-
volumeMounts:
107-
- name: ca-volume
108-
mountPath: /etc/ca-volume
109-
- name: secret-volume
110-
mountPath: /etc/secret-volume
111-
env:
112-
- name: POD_NAME
113-
valueFrom:
114-
fieldRef:
115-
fieldPath: metadata.name
116-
- name: NAMESPACE
117-
valueFrom:
118-
fieldRef:
119-
fieldPath: metadata.namespace
120-
- name: CA_CERT
121-
value: /etc/ca-volume/crt
122-
- name: CA_CERT_KEY
123-
value: /etc/ca-volume/key
124-
- name: TLS_SERVER_CERT
125-
value: /etc/secret-volume/crt
126-
- name: TLS_SERVER_PRIVKEY
127-
value: /etc/secret-volume/key
128-
resources:
129-
requests:
130-
cpu: 10m
131-
volumes:
132-
- name: ca-volume
133-
configMap:
134-
# This configMap is generated dynamically by the test suite.
135-
name: backend-tls-checks-certificate
136-
items:
137-
- key: ca.crt
138-
path: crt
139-
- key: key.crt
140-
path: key
141-
- name: secret-volume
142-
secret:
143-
# This secret is generated dynamically by the test suite.
144-
secretName: tls-checks-certificate
145-
items:
146-
- key: tls.crt
147-
path: crt
148-
- key: tls.key
149-
path: key
150-
---
15185
apiVersion: gateway.networking.k8s.io/v1alpha3
15286
kind: BackendTLSPolicy
15387
metadata:
@@ -163,8 +97,9 @@ spec:
16397
caCertificateRefs:
16498
- group: ""
16599
kind: ConfigMap
166-
# This secret is generated dynamically by the test suite.
167-
name: "backend-tls-checks-certificate"
100+
# This ConfigMap is generated dynamically by the test suite.
101+
# It contains the CA certificate used to sign the tls-backend serving certificate.
102+
name: "tls-checks-ca-certificate"
168103
hostname: "abc.example.com"
169104
---
170105
apiVersion: gateway.networking.k8s.io/v1alpha3
@@ -182,8 +117,9 @@ spec:
182117
caCertificateRefs:
183118
- group: ""
184119
kind: ConfigMap
185-
# This secret is generated dynamically by the test suite.
186-
name: "backend-tls-checks-certificate"
120+
# This ConfigMap is generated dynamically by the test suite.
121+
# It contains the CA certificate used to sign the tls-backend serving certificate.
122+
name: "tls-checks-ca-certificate"
187123
hostname: "mismatch.example.com"
188124
---
189125
apiVersion: gateway.networking.k8s.io/v1alpha3
@@ -201,6 +137,7 @@ spec:
201137
caCertificateRefs:
202138
- group: ""
203139
kind: ConfigMap
204-
# This secret is generated dynamically by the test suite.
205-
name: "backend-tls-mismatch-certificate"
140+
# This ConfigMap is generated dynamically by the test suite.
141+
# It contains a random, unused CA certificate to force validation to fail.
142+
name: "mismatch-ca-certificate"
206143
hostname: "abc.example.com"

conformance/utils/kubernetes/certificate.go

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

152152
// MustCreateCACertConfigMap will create a ConfigMap containing a CA Certificate, given a TLS Secret
153153
// for that CA certificate. Also returns the CA certificate.
154-
func MustCreateCACertConfigMap(t *testing.T, namespace, configMapName string, hosts []string) (*corev1.ConfigMap, *x509.Certificate, *rsa.PrivateKey) {
155-
require.NotEmpty(t, hosts, "require a non-empty hosts for Subject Alternate Name values")
156-
154+
func MustCreateCACertConfigMap(t *testing.T, namespace, configMapName string) (*corev1.ConfigMap, *x509.Certificate, *rsa.PrivateKey) {
157155
var certData, keyData bytes.Buffer
158156

159-
ca, caBytes, caPrivKey, err := generateCACert(hosts)
157+
ca, caBytes, caPrivKey, err := generateCACert()
160158
if err != nil {
161159
t.Errorf("failed to generate CA certificate and key: %v", err)
162160
return nil, nil, nil
@@ -187,8 +185,8 @@ func MustCreateCACertConfigMap(t *testing.T, namespace, configMapName string, ho
187185
return caConfigMap, ca, caPrivKey
188186
}
189187

190-
// generateCACert generates a CA and a CA-signed certificate valid for a year.
191-
func generateCACert(hosts []string) (*x509.Certificate, []byte, *rsa.PrivateKey, error) {
188+
// generateCACert generates a CA certificate valid for a year.
189+
func generateCACert() (*x509.Certificate, []byte, *rsa.PrivateKey, error) {
192190
var caBytes []byte
193191

194192
// Create the CA certificate template.
@@ -212,17 +210,6 @@ func generateCACert(hosts []string) (*x509.Certificate, []byte, *rsa.PrivateKey,
212210
BasicConstraintsValid: true,
213211
}
214212

215-
// Ensure only valid hosts make it into the CA cert.
216-
for _, h := range hosts {
217-
if ip := net.ParseIP(h); ip != nil {
218-
ca.IPAddresses = append(ca.IPAddresses, ip)
219-
} else if err := validateHost(h); err == nil {
220-
ca.DNSNames = append(ca.DNSNames, h)
221-
} else if u, err := url.Parse(h); err == nil {
222-
ca.URIs = append(ca.URIs, u)
223-
}
224-
}
225-
226213
// Generate the private key to sign certificates.
227214
caPrivKey, err := rsa.GenerateKey(rand.Reader, rsaBits)
228215
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,9 +388,7 @@ 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)
@@ -400,6 +398,10 @@ func (suite *ConformanceTestSuite) Setup(t *testing.T, tests []ConformanceTest)
400398
secret = kubernetes.MustCreateCASignedCertSecret(t, "gateway-conformance-infra", "tls-with-san-certificate", []string{"abc.example.com", "spiffe://abc.example.com/test-identity"}, ca, caPrivKey)
401399
suite.Applier.MustApplyObjectsWithCleanup(t, suite.Client, suite.TimeoutConfig, []client.Object{secret}, suite.Cleanup)
402400

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

0 commit comments

Comments
 (0)