kubeadm是Kubernetes官方提供的用于快速安装Kubernetes集群的工具,伴随Kubernetes每个版本的发布都会同步更新,kubeadm会对集群配置方面的一些实践做调整,通过实验kubeadm可以学习到Kubernetes官方在集群配置上一些新的最佳实践。

最近发布的Kubernetes 1.15中,kubeadm对HA集群的配置已经达到beta可用,说明kubeadm距离生产环境中可用的距离越来越近了。

受以下消息影响,决定作一次K8S升级的探索。

漏洞详细信息

  • Netflix最近宣布了一项安全公告,该公告确定了几个可能影响HTTP/2协议服务器实现的拒绝服务攻击向量,并发布了8个CVE。[1]
  • Go受两个漏洞(CVE-2019-9512和CVE-2019-9514)的影响,因此服务于HTTP/2流量(including / healthz)的Kubernetes组件也会受到影响。[2]
  • 这些漏洞允许不受信任的客户端分配无限量的内存,直到服务器崩溃。产品安全委员会已将这组漏洞分配为CVSS评分为7.5 [3]

如何解决漏洞?

Go发布了go1.12.8和go1.11.13版本,我们也发布了使用修补版本的Go构建的以下版本的Kubernetes。

  • Kubernetes
    v1.15.3 - go1.12.9
  • Kubernetes
    v1.14.6 - go1.12.9
  • Kubernetes
    v1.13.10 - go1.11.13

升级到上面列出的Kubernetes修补版本。

本文档以kubernetes 1.14.6作为升级目标。由于kubeadm历来是手工下载升级,籍由此次机会,顺便更改证书过期时间,并手工编译成二进制文件。
一,生成编译镜像

1,Dockerfile内容(注意,一定要下载go1.12.9以后版本,才修复了漏洞):

FROM centos:centos7.6.1811

MAINTAINER 4k

ENV GOROOT /usr/local/go
ENV GOPATH /usr/local/gopath
ENV PATH /usr/local/go/bin:$PATH

RUN yum install rpm-build which where rsync gcc gcc-c++ automake autoconf libtool make -y \
    && curl -L https://studygolang.com/dl/golang/go1.12.9.linux-amd64.tar.gz | tar zxvf - -C /usr/local

2,生成镜像

docker build –t harbor.xxx.cn/4k/build-k8s:centos--k8s- .

二,下载github源码

Github下载地址(注意linux下载tar.gz包,不要下载zip包):

wget https://github.com/kubernetes/kubernetes/releases/download/v1.14.6/kubernetes.tar.gz

三,镜像挂载目录

1,运行docker run 命令,将生成的镜像和下载的源码解压挂载

docker run -it --rm –v \
/build-k8s/kubernetes-:/usr/local/gopath/src/k8s.io/kubernetes \
harbor.xxx.cn/build-k8s:centos--k8s-

四,编译二进制

1,进入容器,在k8s项目根目录下运行如下命令,编译Kubeadm

KUBE_BUILD_PLATFORMS=linux/amd64 make all WHAT=cmd/kubeadm GOFLAGS=-v GOGCFLAGS="-N -l"

五,kubeadm二进制验证

1,运行命令进行验证

./kubeadm version
kubeadm version: &version.Info{Major:", GitVersion:"v1.14.6", GitCommit:"96fac5cd13a5dc064f7d9f4f23030a6aeface6cc", GitTreeState:"archive", BuildDate:"2019-09-05T02:41:12Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"linux/amd64"}

2,将此kubeadm二进制下载保存,用于将来升级。

六,kubeadm修改记录(证书100年过期)

1,kubernetes-1.14.6\staging\src\k8s.io\client-go\util\cert\cert.go

2,kubernetes-1.14.6\cmd\kubeadm\app\util\pkiutil\pki_helpers.go

源码编译Kubeadm二进制文件的更多相关文章

  1. 在Linux下源码编译安装GreatSQL/MySQL

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 本 ...

  2. Go源码编译安装

    参考文档1:https://www.cnblogs.com/majianguo/p/7258975.html 参考文档2:http://www.loongson.cn/news/company/456 ...

  3. nginx源码编译以及源码编译过程中遇到的问题

    本文主要讲nginx安装以及安装过程中遇到的问题. 谈到nginx 必须聊聊它的起源和发展. nginx是由俄罗斯工程师Igor Sysoev 用C语言开发的一个免费开源的Web服务器软件,于2004 ...

  4. linux下c语言源码编译

    一.源码编译过程   源码  ---> 预处理 ---> 编译 ---> 汇编 ---> 链接 --->执行    我们可以把它分为三部分来完成: ./configure ...

  5. Centos7通过yum跟源码编译安装Nginx

    源码编译安装 http://nginx.org/en/download.html 到官网下载,然后用XFTP上传到root目录 把文件解压出来 tar -zxvf nginx-1.16.0.tar.g ...

  6. Httpd服务进阶知识-LAMP源码编译安装

    Httpd服务进阶知识-LAMP源码编译安装 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 想必大家都知道,动态资源交给fastcgi程序处理,静态资源依旧由httpd服务器处理  ...

  7. 如何顺利完成Kubernetes源码编译?

    为什么要编译源码 ? Kubernetes是一个非常棒的容器集群管理平台.通常情况下,我们并不需要修改K8S代码即可直接使用.但如果,我们在环境中发现了某个问题/缺陷,或按照特定业务需求需要修改K8S ...

  8. centos7.6环境zabbix3.2源码编译安装版升级到zabbix4.0长期支持版

    zabbix3.2源码编译安装版升级到zabbix4.0长期支持版 项目需求: .2版本不再支持,想升级成4.0的长期支持版 环境介绍: zabbix服务端是编译安装的,数据库和web在一台机器上 整 ...

  9. Dubbo入门到精通学习笔记(十九):MySQL源码编译安装、MySQL主从复制的配置

    文章目录 MySQL 源码编译安装(CentOS-6.6+MySQL-5.6) 一.服务器配置: 二.源码安装 MySQL5.6.26: MySQL主从复制的配置 环境 依赖课程 MySQL 主从复制 ...

随机推荐

  1. mongodb4版本,windows下的安装与配置(史上步骤最全最详细+图解)

    安装的是4.2.1版本,安装途中出现过很多错误,找遍各种博客基本没能解决 1.mongodb安装的官方地址: https://www.mongodb.com/download-center/commu ...

  2. Druid-代码段-1-4

    所属文章:池化技术(一)Druid是如何管理数据库连接的? 本代码段对应流程1.3,连接可用性测试: //数据库连接可用性测试 protected boolean testConnectionInte ...

  3. nginx学习(五):nginx.conf 核心配置文件详解

    整体结构 详细信息 1.设置worker进程的用户,指的linux中的用户,会涉及到nginx操作目录或文件的一些权限,默认为nobody user root; 2.worker进程工作数设置,一般来 ...

  4. (day67)作业

    有以下广告数据(实际数据命名可以略做调整) ad_data = { tv: [ {img: 'img/tv/001.png', title: 'tv1'}, {img: 'img/tv/002.png ...

  5. wepy安装后提示Cannot read property 'addDeps'

    最近准备做一个微信小程序,以前一直用的小程序原始api做,但是这次准备用一个框架来做练习,当然在做之前需要比较一下现在小程序框架的优缺点. 经过认真挑选,选定wepy,Taro,uni-app,mpv ...

  6. 初学者用js做的计算题

    1.苹果3元一个,鸭梨2元一个,桃子1元一个.现在想用200元买100个水果,在控制台中打印出来. var apple = 0; //苹果 var pear = 0; //梨 var peach = ...

  7. centos6和centos7的防火墙基本命令

    一.centos6: 1.firewall的基本启动/停止/重启命令 $查看防火墙状态: service iptables status (/etc/init.d/iptables status) $ ...

  8. 【Linux命令】id,usermod用户管理命令(包括/etc/passwd、shadow、group、gshadow文件)

    一.id命令 可以用来查看用户的UID.GID和附加组信息 id会显示用户以及所属群组的实际与有效ID.若两个ID相同,则仅显示实际ID.若仅指定用户名称,则显示目前用户的ID. 1.格式 id [O ...

  9. selenium常用的三种等待方式

    一.强制等待 使用方法:sleep(X),等待X秒后,进行下一步操作. 第一种也是使用最简单的一种办法就是强制等待sleep(X),强制让浏览器等待X秒,不管当前操作是否完成,是否可以进行下一步操作, ...

  10. mysql多表关联update

    日常的开发中一般都是写的单表update语句,很少写多表关联的update. 不同于SQL Server,在MySQL中,update的多表连接更新和select的多表连接查询在使用的方法上存在一些小 ...