k8s

kubeadm 1.24.16 编译证书有效期100年

步骤

默认的kubeadm生成的证书有效期只有1年,官方推荐的是1年续签一次,但是在不通外网的集群中,这样升级不太友好。所以最好还是一次搞定。

获取源码

github地址:https://github.com/kubernetes/kubernetes/tree/v1.24.16

创建Codespace。

file

修改源码

修改CA有效期

NotAfter 定义了有效期是10年,改为100年。

vim ./staging/src/k8s.io/client-go/util/cert/cert.go

file

file

修改证书有效期

CertificateValidity 定义了证书有效期是10年,改为100年。

vim ./cmd/kubeadm/app/constants/constants.go

file

查看差异

git diff

file

编译源码

编译kubeadm。

make all WHAT=cmd/kubeadm GOFLAGS=-v
# make all WHAT=cmd/kubelet GOFLAGS=-v
# make all WHAT=cmd/kubectl GOFLAGS=-v

编译完成。

file

下载kubeadm

编译后的应用程序在_output/bin/kubeadm下,其中_output/bin/目录是个软链接,实际目录是_output/local/bin/linux/amd64/kubeadm

_output/local/bin/linux/amd64/kubeadm version

file

拷贝kubeadm到当前目录,在左侧文件目录中右键kubeadm,点击下载到本地。

cp _output/local/bin/linux/amd64/kubeadm .

file

验证

上传kubeadm,添加权限,使用原kubeadm查询证书到期时间,备份原kubeadm。(我这里ca显示98y是我原kubeadm也编译过)

kubeadm version
kubeadm certs check-expiration

拷贝新kubeadm到/usr/bin下,renew证书,使用新kubeadm查询证书到期时间。

file

证书到期时间为99years。

补充

上面方法编译的kubeadm也能达到续签证书到100年的效果。但是在使用这个kubeadm初始化集群时,会无法使用。
报错:could not fetch a Kubernetes version from the internet,falling back to the local client version: v1.24.15

file

因为这个kubeadm的GitVersion是"v1.24.16-dirty",找不到这个版本的kubeadm,进而使用了低一个版本的kubeadm。

带这个dirty的原因是在修改源码后,没有使用git addgit commit。commit后GitTreeState就是clean了。

但是这个clean版本的kubeadm在初始化集群时也无法使用。

file

解决方法是使用第二种方法github action来编译kubeadm。

github action

先把kubernetes 源码fork到自己的仓库。然后创建action。

file

示例yaml如下:

name: Go

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:

  build:
    name: Build
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3

    - name: Set up Go
      id: go
      uses: actions/setup-go@v3
      with:
        go-version: 1.20.6

    - name: SET GitHub ENV k8s version
      env:
        packageName: v1.24.16
      run: echo "packageName=${{ env.packageName }}" >> $GITHUB_ENV

    - name: Get github Env
      run: echo '${{ env.packageName }}'

    - name: Check out code into the Go module directory
      uses: actions/checkout@v3
      with:
        ref: ${{ env.packageName }}

    - name: modify cert time file
      run: |
        sed -i "s/365/365 * 99/" /home/runner/work/kubernetes/kubernetes/cmd/kubeadm/app/constants/constants.go
        sed -i "s/10)/99)/"  /home/runner/work/kubernetes/kubernetes/staging/src/k8s.io/client-go/util/cert/cert.go
    - name: Get modify file
      run: |
        find . -name constants.go |xargs cat |grep 365
        find . -name cert.go |xargs cat |grep 365d
    - name: Get dependencies
      run: |
        go get -v -t -d ./...
        if [ -f Gopkg.toml ]; then
            curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh
            dep ensure
        fi
    - name: Get workpath
      run: pwd

    - name: Build kubeadm
      run: KUBE_GIT_TREE_STATE=clean make all WHAT=cmd/kubeadm GOFLAGS=-v

    - name: Get paGth
      run: find . -name kubeadm

    - name: Kubeadm version
      run: |
        chmod +x ./_output/local/bin/linux/amd64/kubeadm
        ./_output/local/bin/linux/amd64/kubeadm version
    - name: Package file dirname
      run: mkdir kube && cp ./_output/local/bin/linux/amd64/kubeadm kube

    - uses: actions/upload-artifact@v3
      with:
        name: kubeadm-${{ env.packageName }}
        path: kube

yaml保存后,等待workflow完成,点击Artifacts中的kubeadm-1.24.16下载。上传压缩包,解压测试。

file

这样编译生成的kubeadm初始化集群使用的k8s版本还是1.24.16,而不是1.24.15。

分类: k8s
0 0 投票数
文章评分
订阅评论
提醒
guest

0 评论
最旧
最新 最多投票
内联反馈
查看所有评论

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部
0
希望看到您的想法,请您发表评论x