Skip to content

Commit 6c9013c

Browse files
author
Mengqi Yu
committed
address comments
1 parent f79791f commit 6c9013c

File tree

5 files changed

+59
-22
lines changed

5 files changed

+59
-22
lines changed

pkg/webhook/certprovisioner/certprovisioner.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,16 @@ limitations under the License.
1616

1717
package certprovisioner
1818

19+
// Certs hosts a private key, its corresponding serving certificate and
20+
// the CA certificate that signs the serving certificate.
21+
type Certs struct {
22+
Key []byte
23+
Cert []byte
24+
CACert []byte
25+
}
26+
1927
// CertProvisioner is an interface to provision the serving certificate.
2028
type CertProvisioner interface {
21-
// ProvisionServingCert returns the key, serving certificate and the CA certificate.
22-
ProvisionServingCert() (key []byte, cert []byte, caCert []byte, err error)
29+
// ProvisionServingCert returns a Certs struct.
30+
ProvisionServingCert() (*Certs, error)
2331
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/*
2+
Copyright 2018 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package certprovisioner
18+
19+
import "fmt"
20+
21+
func ExampleServiceToCommonName() {
22+
fmt.Println(ServiceToCommonName("myservicenamespace", "myservicename"))
23+
// Output: myservicename.myservicenamespace.svc
24+
}

pkg/webhook/certprovisioner/doc.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ Create a implementation instance of certprovisioner.
2424
}
2525
2626
Provision the certificates.
27-
key, cert, caCert, err := cp.ProvisionServingCert()
27+
certs, err := cp.ProvisionServingCert()
2828
if err != nil {
2929
// handle error
3030
}

pkg/webhook/certprovisioner/selfsignedcertprovisioner.go

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ import (
2323
"k8s.io/client-go/util/cert"
2424
)
2525

26+
// ServiceToCommonName generates the CommonName for the certificate when using a k8s service.
27+
func ServiceToCommonName(serviceNamespace, serviceName string) string {
28+
return fmt.Sprintf("%s.%s.svc", serviceName, serviceNamespace)
29+
}
30+
2631
// SelfSignedCertProvisioner implements the CertProvisioner interface.
2732
// It provisions self-signed certificates.
2833
type SelfSignedCertProvisioner struct {
@@ -32,26 +37,23 @@ type SelfSignedCertProvisioner struct {
3237

3338
var _ CertProvisioner = &SelfSignedCertProvisioner{}
3439

35-
// ProvisionServingCert creates and returns a CA certificate and certificate and
40+
// ProvisionServingCert creates and returns a CA certificate, certificate and
3641
// key for the server. serverKey and serverCert are used by the server
3742
// to establish trust for clients, CA certificate is used by the
3843
// client to verify the server authentication chain.
3944
// The cert will be valid for 365 days.
40-
func (cp *SelfSignedCertProvisioner) ProvisionServingCert() (serverKey, serverCert, caCert []byte, err error) {
45+
func (cp *SelfSignedCertProvisioner) ProvisionServingCert() (*Certs, error) {
4146
signingKey, err := cert.NewPrivateKey()
4247
if err != nil {
43-
return nil, nil, nil,
44-
fmt.Errorf("failed to create the CA private key: %v", err)
48+
return nil, fmt.Errorf("failed to create the CA private key: %v", err)
4549
}
4650
signingCert, err := cert.NewSelfSignedCACert(cert.Config{CommonName: "webhook-cert-ca"}, signingKey)
4751
if err != nil {
48-
return nil, nil, nil,
49-
fmt.Errorf("failed to create the CA cert: %v", err)
52+
return nil, fmt.Errorf("failed to create the CA cert: %v", err)
5053
}
5154
key, err := cert.NewPrivateKey()
5255
if err != nil {
53-
return nil, nil, nil,
54-
fmt.Errorf("failed to create the private key: %v", err)
56+
return nil, fmt.Errorf("failed to create the private key: %v", err)
5557
}
5658
signedCert, err := cert.NewSignedCert(
5759
cert.Config{
@@ -61,8 +63,11 @@ func (cp *SelfSignedCertProvisioner) ProvisionServingCert() (serverKey, serverCe
6163
key, signingCert, signingKey,
6264
)
6365
if err != nil {
64-
return nil, nil, nil,
65-
fmt.Errorf("failed to create the cert: %v", err)
66+
return nil, fmt.Errorf("failed to create the cert: %v", err)
6667
}
67-
return cert.EncodePrivateKeyPEM(key), cert.EncodeCertPEM(signedCert), cert.EncodeCertPEM(signingCert), nil
68+
return &Certs{
69+
Key: cert.EncodePrivateKeyPEM(key),
70+
Cert: cert.EncodeCertPEM(signedCert),
71+
CACert: cert.EncodeCertPEM(signingCert),
72+
}, nil
6873
}

pkg/webhook/certprovisioner/selfsignedcertprovisioner_test.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,30 +23,30 @@ import (
2323
)
2424

2525
func TestProvisionServingCert(t *testing.T) {
26-
CN := "mysvc.myns.svc"
27-
cp := SelfSignedCertProvisioner{CommonName: CN}
28-
_, certPEM, caPEM, err := cp.ProvisionServingCert()
26+
cn := "mysvc.myns.svc"
27+
cp := SelfSignedCertProvisioner{CommonName: cn}
28+
certs, err := cp.ProvisionServingCert()
2929

3030
// First, create the set of root certificates. For this example we only
3131
// have one. It's also possible to omit this in order to use the
3232
// default root set of the current operating system.
3333
roots := x509.NewCertPool()
34-
ok := roots.AppendCertsFromPEM([]byte(caPEM))
34+
ok := roots.AppendCertsFromPEM(certs.CACert)
3535
if !ok {
36-
t.Fatalf("failed to parse root certificate: %s", caPEM)
36+
t.Fatalf("failed to parse root certificate: %s", certs.CACert)
3737
}
3838

39-
block, _ := pem.Decode(certPEM)
39+
block, _ := pem.Decode(certs.Cert)
4040
if block == nil {
41-
t.Fatalf("failed to parse certificate PEM: %s", certPEM)
41+
t.Fatalf("failed to parse certificate PEM: %s", certs.Cert)
4242
}
4343
cert, err := x509.ParseCertificate(block.Bytes)
4444
if err != nil {
4545
t.Fatalf("failed to parse certificate: %v", err)
4646
}
4747

4848
opts := x509.VerifyOptions{
49-
DNSName: CN,
49+
DNSName: cn,
5050
Roots: roots,
5151
}
5252

0 commit comments

Comments
 (0)