mirror of
https://github.com/kubernetes/client-go.git
synced 2025-07-30 22:35:10 +00:00
Re-use private key after failed CSR
If we create a new key on each CSR, if CSR fails the next attempt will create a new one instead of reusing previous CSR. If approver/signer don't handle CSRs as quickly as new nodes come up, they can pile up and approver would keep handling old abandoned CSRs and Nodes would keep timing out on startup. Kubernetes-commit: 2c0f043957d25da162fe4e1026c50e2587529ff9
This commit is contained in:
parent
2f61378d31
commit
321986595f
@ -88,7 +88,8 @@ func WriteKey(keyPath string, data []byte) error {
|
||||
// can't find one, it will generate a new key and store it there.
|
||||
func LoadOrGenerateKeyFile(keyPath string) (data []byte, wasGenerated bool, err error) {
|
||||
loadedData, err := ioutil.ReadFile(keyPath)
|
||||
if err == nil {
|
||||
// Call verifyKeyData to ensure the file wasn't empty/corrupt.
|
||||
if err == nil && verifyKeyData(loadedData) {
|
||||
return loadedData, false, err
|
||||
}
|
||||
if !os.IsNotExist(err) {
|
||||
@ -181,3 +182,12 @@ func PublicKeysFromFile(file string) ([]interface{}, error) {
|
||||
}
|
||||
return keys, nil
|
||||
}
|
||||
|
||||
// verifyKeyData returns true if the provided data appears to be a valid private key.
|
||||
func verifyKeyData(data []byte) bool {
|
||||
if len(data) == 0 {
|
||||
return false
|
||||
}
|
||||
_, err := ParsePrivateKeyPEM(data)
|
||||
return err == nil
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user