kubeadm部署的kubernets證書一直都是個詬病,默認都只有一年有效期,kubeadm 1.14.x安裝後有部分證書仍是一年有效期,但個別證書已修改成10年有效期,但對咱們使用來講,一年有效期仍是一個比較的坑,須要進行調整。
/etc/kubernetes/pki/apiserver.crt /etc/kubernetes/pki/front-proxy-ca.crt #10年有效期 /etc/kubernetes/pki/ca.crt #10年有效期 /etc/kubernetes/pki/apiserver-etcd-client.crt /etc/kubernetes/pki/front-proxy-client.crt #10年有效期 /etc/kubernetes/pki/etcd/server.crt /etc/kubernetes/pki/etcd/ca.crt #10年有效期 /etc/kubernetes/pki/etcd/peer.crt #10年有效期 /etc/kubernetes/pki/etcd/healthcheck-client.crt /etc/kubernetes/pki/apiserver-kubelet-client.crt
如上所示,除了標註說明的證書爲10年有效期,其他都是1年有效期,咱們查看下原先調整證書有效期的源碼,克隆kubernetes 源碼,切換到1.14.1 tag 查看:
代碼目錄: staging/src/k8s.io/client-go/util/cert/cert.go
html
const duration365d = time.Hour * 24 * 365 func NewSelfSignedCACert(cfg Config, key crypto.Signer) (*x509.Certificate, error) { now := time.Now() tmpl := x509.Certificate{ SerialNumber: new(big.Int).SetInt64(0), Subject: pkix.Name{ CommonName: cfg.CommonName, Organization: cfg.Organization, }, NotBefore: now.UTC(), //這裏已經調整爲10年有效期 NotAfter: now.Add(duration365d * 10).UTC(), KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign, BasicConstraintsValid: true, IsCA: true, } certDERBytes, err := x509.CreateCertificate(cryptorand.Reader, &tmpl, &tmpl, key.Public(), key) if err != nil { return nil, err } return x509.ParseCertificate(certDERBytes) }
如上所示,經過NewSelfSignedCACert
這個方法簽發的證書都默認爲10年有效期了,但這個隻影響部分證書,但這樣還沒知足咱們的需求,個別證書的有效期調整,在通過對源碼的分析後,找到了以下的邏輯:git
發現部分證書是經過NewSignedCert
這個方法簽發,而這個方法簽發的證書默認只有一年有效期,查看代碼邏輯:
代碼: cmd/kubeadm/app/util/pkiutil/pki_helpers.go
api
const duration365d = time.Hour * 24 * 365 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) }
至此,調整NewSignedCert
這個方法,從新進行編譯,將證書有效期調整爲你想要的任什麼時候間。app
如何從新編譯kubeadm源碼,請參考以前的文章,連接以下:Kubeadm證書過時時間調整code
k8s 1.14.x 離線一鍵安裝包教程&&地址: kubernetes 1.14 離線安裝地址
原文連接server