1
16
17 package apimachinery
18
19 import (
20 "crypto/x509"
21 "os"
22 "testing"
23
24 utiltesting "k8s.io/client-go/util/testing"
25 "k8s.io/kubernetes/test/utils"
26
27 "k8s.io/client-go/util/cert"
28 "k8s.io/client-go/util/keyutil"
29 "k8s.io/kubernetes/test/e2e/framework"
30 )
31
32 type certContext struct {
33 cert []byte
34 key []byte
35 signingCert []byte
36 }
37
38
39
40 func setupServerCert(namespaceName, serviceName string) *certContext {
41 certDir, err := os.MkdirTemp("", "test-e2e-server-cert")
42 if err != nil {
43 framework.Failf("Failed to create a temp dir for cert generation %v", err)
44 }
45 defer os.RemoveAll(certDir)
46 signingKey, err := utils.NewPrivateKey()
47 if err != nil {
48 framework.Failf("Failed to create CA private key %v", err)
49 }
50 signingCert, err := cert.NewSelfSignedCACert(cert.Config{CommonName: "e2e-server-cert-ca"}, signingKey)
51 if err != nil {
52 framework.Failf("Failed to create CA cert for apiserver %v", err)
53 }
54 caCertFile, err := os.CreateTemp(certDir, "ca.crt")
55 if err != nil {
56 framework.Failf("Failed to create a temp file for ca cert generation %v", err)
57 }
58 defer utiltesting.CloseAndRemove(&testing.T{}, caCertFile)
59 if err := os.WriteFile(caCertFile.Name(), utils.EncodeCertPEM(signingCert), 0644); err != nil {
60 framework.Failf("Failed to write CA cert %v", err)
61 }
62 key, err := utils.NewPrivateKey()
63 if err != nil {
64 framework.Failf("Failed to create private key for %v", err)
65 }
66 signedCert, err := utils.NewSignedCert(
67 &cert.Config{
68 CommonName: serviceName + "." + namespaceName + ".svc",
69 AltNames: cert.AltNames{DNSNames: []string{serviceName + "." + namespaceName + ".svc"}},
70 Usages: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth},
71 },
72 key, signingCert, signingKey,
73 )
74 if err != nil {
75 framework.Failf("Failed to create cert%v", err)
76 }
77 certFile, err := os.CreateTemp(certDir, "server.crt")
78 if err != nil {
79 framework.Failf("Failed to create a temp file for cert generation %v", err)
80 }
81 defer utiltesting.CloseAndRemove(&testing.T{}, certFile)
82 keyFile, err := os.CreateTemp(certDir, "server.key")
83 if err != nil {
84 framework.Failf("Failed to create a temp file for key generation %v", err)
85 }
86 if err = os.WriteFile(certFile.Name(), utils.EncodeCertPEM(signedCert), 0600); err != nil {
87 framework.Failf("Failed to write cert file %v", err)
88 }
89 privateKeyPEM, err := keyutil.MarshalPrivateKeyToPEM(key)
90 if err != nil {
91 framework.Failf("Failed to marshal key %v", err)
92 }
93 if err = os.WriteFile(keyFile.Name(), privateKeyPEM, 0644); err != nil {
94 framework.Failf("Failed to write key file %v", err)
95 }
96 defer utiltesting.CloseAndRemove(&testing.T{}, keyFile)
97 return &certContext{
98 cert: utils.EncodeCertPEM(signedCert),
99 key: privateKeyPEM,
100 signingCert: utils.EncodeCertPEM(signingCert),
101 }
102 }
103
View as plain text