mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-10-31 05:40:42 +00:00 
			
		
		
		
	The test package imports cmd/kubeadm, which is far from ideal. There are a couple of reasons for the import: 1) Marshaling of Ingress from api/extensions/v1beta1. To fix that include a local function in e2e/manifest/manifest.go that does that same as the kubeadm MarshalToYaml. 2) Using PKI helper function in apimachinery and auth tests. To fix that include a new file under test/utils/pki_helpers.go that only contains the required helpers instead of including the whole kubeadm pkiutil package. There is another related problem: e2e_node/e2e_node_suite_test.go includes: k8s.io/kubernetes/cmd/kubeadm/app/util/system But this has to be done in a follow up.
		
			
				
	
	
		
			88 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| /*
 | |
| Copyright 2019 The Kubernetes Authors.
 | |
| 
 | |
| Licensed under the Apache License, Version 2.0 (the "License");
 | |
| you may not use this file except in compliance with the License.
 | |
| You may obtain a copy of the License at
 | |
| 
 | |
|     http://www.apache.org/licenses/LICENSE-2.0
 | |
| 
 | |
| Unless required by applicable law or agreed to in writing, software
 | |
| distributed under the License is distributed on an "AS IS" BASIS,
 | |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
| See the License for the specific language governing permissions and
 | |
| limitations under the License.
 | |
| */
 | |
| 
 | |
| package utils
 | |
| 
 | |
| import (
 | |
| 	"crypto"
 | |
| 	"crypto/rand"
 | |
| 	cryptorand "crypto/rand"
 | |
| 	"crypto/rsa"
 | |
| 	"crypto/x509"
 | |
| 	"crypto/x509/pkix"
 | |
| 	"encoding/pem"
 | |
| 	"math"
 | |
| 	"math/big"
 | |
| 	"time"
 | |
| 
 | |
| 	"github.com/pkg/errors"
 | |
| 
 | |
| 	certutil "k8s.io/client-go/util/cert"
 | |
| )
 | |
| 
 | |
| const (
 | |
| 	certificateBlockType = "CERTIFICATE"
 | |
| 	rsaKeySize           = 2048
 | |
| 	duration365d         = time.Hour * 24 * 365
 | |
| )
 | |
| 
 | |
| // NewPrivateKey creates an RSA private key
 | |
| func NewPrivateKey() (*rsa.PrivateKey, error) {
 | |
| 	return rsa.GenerateKey(cryptorand.Reader, rsaKeySize)
 | |
| }
 | |
| 
 | |
| // EncodeCertPEM returns PEM-endcoded certificate data
 | |
| func EncodeCertPEM(cert *x509.Certificate) []byte {
 | |
| 	block := pem.Block{
 | |
| 		Type:  certificateBlockType,
 | |
| 		Bytes: cert.Raw,
 | |
| 	}
 | |
| 	return pem.EncodeToMemory(&block)
 | |
| }
 | |
| 
 | |
| // NewSignedCert creates a signed certificate using the given CA certificate and key
 | |
| func NewSignedCert(cfg *certutil.Config, key crypto.Signer, caCert *x509.Certificate, caKey crypto.Signer) (*x509.Certificate, error) {
 | |
| 	serial, err := rand.Int(rand.Reader, new(big.Int).SetInt64(math.MaxInt64))
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 	if len(cfg.CommonName) == 0 {
 | |
| 		return nil, errors.New("must specify a CommonName")
 | |
| 	}
 | |
| 	if len(cfg.Usages) == 0 {
 | |
| 		return nil, errors.New("must specify at least one ExtKeyUsage")
 | |
| 	}
 | |
| 
 | |
| 	certTmpl := x509.Certificate{
 | |
| 		Subject: pkix.Name{
 | |
| 			CommonName:   cfg.CommonName,
 | |
| 			Organization: cfg.Organization,
 | |
| 		},
 | |
| 		DNSNames:     cfg.AltNames.DNSNames,
 | |
| 		IPAddresses:  cfg.AltNames.IPs,
 | |
| 		SerialNumber: serial,
 | |
| 		NotBefore:    caCert.NotBefore,
 | |
| 		NotAfter:     time.Now().Add(duration365d).UTC(),
 | |
| 		KeyUsage:     x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature,
 | |
| 		ExtKeyUsage:  cfg.Usages,
 | |
| 	}
 | |
| 	certDERBytes, err := x509.CreateCertificate(cryptorand.Reader, &certTmpl, caCert, key.Public(), caKey)
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 	return x509.ParseCertificate(certDERBytes)
 | |
| }
 |