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