参考

kubeadm 部署的 kubernetes 集群,默认的证书有效时间是1年,需要每年手工更新。

1. 重新编译kubeadm

1.1 准备

# 下载对应的kubernetes源代码,这里采用 "v1.14.1" 版本
wget https://codeload.github.com/kubernetes/kubernetes/tar.gz/v1.14.1 # untar
tar -zxvf kubernetes-1.14.1.tar.gz
cd kubernetes-1.14.1 # 进入源代码目录
cd kubernetes-1.14.1

1.2 修改源代码-cert.go

  • 文件:staging/src/k8s.io/client-go/util/cert/cert.go
  • NewSelfSignedCACert 方法,签发以下证书,且默认为10年有效期:
    • front-proxy-ca.crt
    • front-proxy-client.crt
    • ca.crt
    • etcd/ca.crt
    • etcd/peer.crt
# 1.14.0版本开始,此文件不需要修改
vim staging/src/k8s.io/client-go/util/cert/cert.go const duration365d = time.Hour * 24 * 365 // Config contains the basic fields required for creating a certificate
type Config struct {
CommonName string
Organization []string
AltNames AltNames
Usages []x509.ExtKeyUsage
} // AltNames contains the domain names and IP addresses that will be added
// to the API Server's x509 certificate SubAltNames field. The values will
// be passed directly to the x509.Certificate object.
type AltNames struct {
DNSNames []string
IPs []net.IP
} // NewSelfSignedCACert creates a CA certificate
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)
}

1.3 修改源代码-pki_helpers.go

  • ,以下证书由 NewSignedCert 方法签发,但签发的证书默认只有一年有效期:

    • apiserver.crt
    • apiserver-etcd-client.crt
    • etcd/server.crt
    • etcd/healthcheck-client.crt
    • apiserver-kubelet-client.crt
# `NewSignedCert` 方法:
# 部分证书是通过NewSignedCert这个方法签发,而这个方法签发的证书默认只有一年有效期,查看代码逻辑
vim cmd/kubeadm/app/util/pkiutil/pki_helpers.go // NewSignedCert creates a signed certificate using the given CA certificate and key
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,
# 修改签发相关证书的默认有效期为10年
// NotAfter: time.Now().Add(duration365d).UTC(),
NotAfter: time.Now().Add(duration365d * 10).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)
}

1.4 编译

# go环境已经准备好
# kubeadm
make WHAT=cmd/kubeadm GOFLAGS=-v # 补充:编译kubelet
# make all WHAT=cmd/kubelet GOFLAGS=-v # 补充:编译kubectl
# make all WHAT=cmd/kubectl GOFLAGS=-v # 编译生成的二进制文件在 _output/bin/ 目录下

1.5 更新kubeadm

# 将kubeadm 文件拷贝替换系统中原有kubeadm
cp /usr/bin/kubeadm /usr/bin/kubeadm.origin
cp _output/bin/kubeadm /usr/bin/kubeadm

2. 更新证书

2.1 更新 kube-master (任一)节点证书

  • 1.13.x 版本(含)之后的处理方式;
  • 不更新 kubeadm 的情况下,也可手动更新证书,但更新的证书有效期默认仍是一年。
# 备份
cp -r /etc/kubernetes/pki /etc/kubernetes/pki.origin # 更新证书;
# "--config" 指定 "kubeadm" 的配置文件,建议使用部署集群时使用的配置文件;
# 其他参数可参考官方文档
cd /etc/kubernetes/pki
kubeadm alpha certs renew all --config=/root/kubeadm/kubeadm-config.yaml # 验证
openssl x509 -in apiserver.crt -text -noout | grep Not # 关于kubeconfig:$HOME/.kube/config
# service account的密钥是以rsa密钥对形式生成,没有过期时间

2.2 (optional) HA集群其余mater节点证书更新

  • 在已更新证书的master节点运行脚本,将更新的证书同步到其余master节点
# 如果可以,请提前在被同步master节点做备份
cat certificate.sh
#!/bin/bash
# 2019-05-27 v0.1
# scp certificate files from the first control plane node to the rest. USER=root # customizable
CONTROL_PLANE_IPS="100.64.198.137 100.64.198.138"
for host in ${CONTROL_PLANE_IPS}; do
scp /etc/kubernetes/pki/ca.crt "${USER}"@$host:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/ca.key "${USER}"@$host:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/sa.key "${USER}"@$host:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/sa.pub "${USER}"@$host:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/front-proxy-ca.crt "${USER}"@$host:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/front-proxy-ca.key "${USER}"@$host:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/etcd/ca.crt "${USER}"@$host:/etc/kubernetes/pki/etcd/ca.crt
scp /etc/kubernetes/pki/etcd/ca.key "${USER}"@$host:/etc/kubernetes/pki/etcd/ca.key
scp /etc/kubernetes/admin.conf "${USER}"@$host:/etc/kubernetes/
done

3. 补充:go 环境

# download,根据需要选择版本
wget https://studygolang.com/dl/golang/go1.12.1.linux-amd64.tar.gz # untar
tar -zxvf go1.12.1.linux-amd64.tar.gz -C /usr/local # edit /etc/profile,在文件末尾添加如下内容
vim /etc/profile
# go setting
export GOROOT=/usr/local/go
export GOPATH=/usr/local/gopath
export PATH=$PATH:$GOROOT/bin # enable /etc/profile
source /etc/profile

重新编译kubeadm,修改默认证书时间的更多相关文章

  1. 编译kubeadm使生成证书有效期为100年

    目录 问题 编译 检查结果 问题 当我使用kubeadm部署成功k8s集群时在想默认生成的证书有效期是多久,如下所示 /etc/kubernetes/pki/apiserver.crt #1年有效期 ...

  2. mysql 连接超时解决方案: 怎样修改默认超时时间

    mysql数据库有一个wait_timeout的配置,默认值为28800(即8小时). 在默认配置不改变的情况下,如果连续8小时内都没有访问数据库的操作,再次访问mysql数据库的时候,mysql数据 ...

  3. Openwrt编译时修改默认IP的方法

    在~/openwrt/barrier_breaker/package/base-files/files/lib/functions/ uci-defaults.sh 第178行修改IP地址

  4. Android系统移植与调试之------->如何修改Android设备的默认休眠时间

    1.找到~/mx0831-0525/frameworks/base/packages/SettingsProvider/res/values/ defaults.xml文件 2.修改默认休眠时间 3. ...

  5. 修改Django的默认打印时间

    环境 Django版本:1.10 前言 默认情况下,Django会把日期按照“月份 天数, 年”的格式打印,比如2003年2月4日会打印成“Feb. 4, 2003”,这种格式对于西方人来说很好看,但 ...

  6. K8S 1.14.6中,将kubeadm集群证书颁发时间延长到100年

    更改两个文件,重新编译kubeadm. 1,D:\kubernetes-1.14.6\staging\src\k8s.io\client-go\util\cert\cert.go // NewSelf ...

  7. Unity3D项目实战笔记(10):Unity3D编译IPA的PostEvents–节约时间利器

    最近,SDK支付等接入差不多了,就从Unity3D生成IPA (企业版License), 然,需要手动执行的PostEvents竟然多大10项+, 这些我默默的承受了1周时间,每次约浪费20分钟-额外 ...

  8. MTK 修改默认时区

    首先介绍应用程序修改 : AlarmManager mAlarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); mA ...

  9. 19.Eclipse 修改默认的keystore签名文件

    Android开发中apk运行都需要签名,就算连接手机直接运行调试,apk都有签名,开发工具会有默认的debug_keyStore Eclipse ADT调试运行使用的是临时生成的Debug专用证书, ...

随机推荐

  1. 使用zeebe DebugHttpExporter 查看zeebe 工作流信息

    zeebe 提供了一个DebugHttpExporter 可以方便的查看部署以及wokrflow 运行信息 以下是一个简单的运行试用,同时集成了prometheus,添加了一个简单的grafana d ...

  2. polynote 安装试用

    polynote 是netflix 开源的一个notebook 工具(支持scala,python,sql ...) 下载安装包 https://github.com/polynote/polynot ...

  3. requests--请求头设置

    前戏 在我们进行自动化测试的时候,很多网站都会都请求头做个校验,比如验证 User-Agent,看是不是浏览器发送的请求,如果我们不加请求头,使用脚本访问,默认User-Agent是python,这样 ...

  4. 牛客CSP-S提高组赛前集训营2 ———— 2019.10.31

    比赛链接 期望得分:100+20+20 实际得分:40+20+30 awa  cccc T1 :基于贪心的思路,然后开始爆搜(雾 那必然是会死的,好吧他就是死了 #include<iostrea ...

  5. convert decimal to binary

    public class Solution { public static void main(String[] args) { ; String str = ""; ) { ; ...

  6. IOI 2013 袋熊(线段树+分块+决策单调性)

    题意 http://www.ioi2013.org/wp-content/uploads/tasks/day1/wombats/Wombats%20zh%20(CHN).pdf 思路 ​ 我们设矩形的 ...

  7. 关于i7 8700以上系列主机,安装虚拟机Win7下连接U盘,故障处理的补充说明

    正如前文“虚拟机下怎么连接U盘,如何使用U盘?一策书(湘岳阳万江波)的随笔”所言,我在win10下的虚拟机win7(i7 9700),而且听说了是不支持Win7的,其原因是不支持USB的驱动问题. 我 ...

  8. HTML -------- 标签、元素、属性,

    HTMl 中的标签.元素.属性, one.标签 :HTML是由一套标记标签 (markup tag)组成,通常就叫标签 标签由开始标签和结束标签组成 <p> 这是一个开始标签 </p ...

  9. 中文情感分析——snownlp类库 源码注释及使用

    最近发现了snownlp这个库,这个类库是专门针对中文文本进行文本挖掘的. 主要功能: 中文分词(Character-Based Generative Model) 词性标注(TnT 3-gram 隐 ...

  10. Android 支持库迁移到AndroidX

    一.背景 Android系统版本在不断更新,从最初的Android 1.0到现在Google和各大手机厂商正在推的Android 10,平均下来每个年头都有一个大的版本更新.但用户正在用的手机上的An ...