前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >生产环境使用kubeadm1.5版本证书到期解决方案

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

作者头像
kubernetes中文社区
发布2019-06-24 16:16:57
1.5K0
发布2019-06-24 16:16:57
举报

问题

生产环境使用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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 kubernetes中文社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档