生产环境使用kubeadm1.5版本证书到期解决方案

问题

生产环境使用k8s-1.5版本并且使用kubeadm直接安装后,出现证书一年到期,整个集群无法使用的情况。

解决方案

生产新的证书替换就的证书

【解决方法与步骤】

1、从github上获取相应版本的k8s源码;

2、修改源码使生成证书的有效期为100年(自己定义);

3、Linux测试服务器上搭建go编译环境,go版本必须是1.9版本;

4、单独只编译kubeadm组件;

5、Linux服务器模拟部署过期环境集群,使用编译好的kubeadm init生成证书;

6、将新生产的证书替换到过期环境master节点下的/etc/kubenetes目录下;

7、将master节点/etc/kubenetes下的kubelet.conf文件拷贝到全部node节点/etc/kubenetes下

8,删除重新全部的sever account服务(default、flannel),重新生成kube-system下的pod

【详细步骤】

1、下载源码

https://codeload.github.com/kubernetes/kubernetes/tar.gz/v1.5.1

2、上传到到测试服务器上并解压

# tar -zxvf XXX.tar.gz -C /root

3、安装go环境

3.1 https://golang.org/dl/

下载最新安装包go1.9.2.Linux-amd64.tar.gz

3.2 解压

# tar -zxvf XX.tar.gz -C /usr/lib

3.3 配置环境变量

# echo “export GOROOT=/usr/lib/golang” >> /etc/profile
# echo “export PATH=PATH: PATH:PATH:GOROOT/bin” >> /etc/profile
# source /etc/profile

3.4 配置k8s编辑目录

# mkdir -p /usr/lib/golang/src/k8s.io
# cd /usr/lib/golang/src/
# ln -s /root/kubernetes k8s.io/

3.5 修改源码

# cd /usr/lib/golang/src/k8s.io/kubernetes/pkg/util/cert
# vim cert.go

修改函数列表

NewSelfSignedCACert
NewSignedCert
GenerateSelfSignedCertKey

分别将上面证书时间修改为100年

func NewSelfSignedCACert(cfg Config, key *rsa.PrivateKey) (*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(),
    NotAfter:              now.Add(duration365d * 100).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)
}

4、编译kubeadm

# cd /usr/lib/golang/src/k8s.io/kubernetes/cmd/kubeadm
# go build

生成新的kubeadm二进制文件

将编译好的kubeadm文件拷贝到/usr/bin/目录下

# mv kubeadm /usr/bin

5、k8s证书替换

在Linux测试服务器上模拟生产环境搭建,将就的kubeadm二进制文件替换为新生成的二进制文件

模拟部署新环境

会在/etc/kubernetes/pki目录下生成新的证书

# cd /etc/kubernetes/pki
# openssl x509 -in apiserver.pem -noout -text

查看新生成证书的期限是否为100年

5.1 master节点

将新证书拷贝到生产环境master节点上/etc/kubernetes/目录下

重启kubelet、kube-apiserver、kube-controller-manager、kube-schedule、kube-proxy、kube-discovery等服务(或者重启服务器)

5.2 node节点

将node节点上的/etc/kubernetes目录下的kubelet.conf文件替换为master上新的文件,然后直接重启kubelet服务或者服务器

5.3 重新server account(全部名空间下的服务)

# kubectl get sa
# kubectl get sa -n kube-system

例如:

# kubectl delete sa default -n kube-system
# kubectl delete sa default  

5.4 删除重新网络ds

# kubectl delete ds kube-flannel-ds -n kube-system --grace-period=0 --force
# kubectl apply -f XXX --namesapace=kube-system

文章来源:https://blog.csdn.net/sixintadi888/article/details/89818794

作者:sixintadi888

本文分享自微信公众号 - kubernetes中文社区(DailyDev)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券