1、kubernetes集群部署

  • 注:若没有特别指明操作的节点,默认所有操作均在k8s-01节点中执行
  • kubernetes master 节点运行组件:etcd、kube-apiserver、kube-controller-manager、kube-scheduler
  • kubernetes node 节点运行组件:docker、flannel、kubelet、kube-proxy、coredns、dashboard
  • 因为master也当node节点使用,所以所有节点都部署了docker和flannel

1.0、创建CA证书和秘钥

  • 为确保安全,kubernetes各个组件需要使用x509证书对通信进行加密和认证
  • CA(Certificate Authority)是自签名的根证书,用来签名后续创建的其他证书
  • 使用CloudFlare的PKI工具cfssl创建所有证书
1.0.0、安装cfssl工具
k8s-01:~ # cd /opt/k8s/packages/
k8s-01:/opt/k8s/packages # wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
k8s-01:/opt/k8s/packages # wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
k8s-01:/opt/k8s/packages # wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
k8s-01:/opt/k8s/packages # mv cfssl_linux-amd64 /opt/k8s/bin/cfssl
k8s-01:/opt/k8s/packages # mv cfssljson_linux-amd64 /opt/k8s/bin/cfssljson
k8s-01:/opt/k8s/packages # mv cfssl-certinfo_linux-amd64 /opt/k8s/bin/cfssl-certinfo
k8s-01:/opt/k8s/packages # chmod +x /opt/k8s/bin/*
1.0.1、创建根证书
k8s-01:~ # cd /opt/k8s/ssl/
k8s-01:/opt/k8s/ssl # cat > ca-config.json <<EOF
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"kubernetes": {
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
],
"expiry": "876000h"
}
}
}
}
EOF
  • signing 表示该证书可用于签名其它证书,生成的ca.pem证书找中CA=TRUE
  • server auth 表示client可以用该证书对server提供的证书进行验证
  • client auth 表示server可以用该证书对client提供的证书进行验证
1.0.2、创建证书签名请求文件
k8s-01:/opt/k8s/ssl # cat > ca-csr.json <<EOF
{
"CN": "kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "ShangHai",
"L": "ShangHai",
"O": "k8s",
"OU": "bandian"
}
],
"ca": {
"expiry": "876000h"
}
}
EOF
  • CN:CommonName kube-apiserver从证书中提取该字段作为请求的用户名(User Name),浏览器使用该字段验证网站是否合法
  • O :Organization kube-apiserver从证书中提取该字段作为请求的用户和所属组(Group)
  • kube-apiserver将提取的UserGroup作为RBAC授权用户和标识
1.0.3、生成CA证书和秘钥
k8s-01:/opt/k8s/ssl # cfssl gencert -initca ca-csr.json | cfssljson -bare ca
1.0.4、分发CA证书到所有节点
#!/usr/bin/env bash
source /opt/k8s/bin/k8s-env.sh for host in ${NODE_IPS[@]}
do
printf "\e[1;34m${host}\e[0m\n"
scp /opt/k8s/ssl/{ca*.pem,ca-config.json} ${host}:/etc/kubernetes/cert
done

1.1、部署kubectl命令

  • kubectl默认从~/.kube/config读取kube-apiserver地址和认证信息
"kubernetes二进制包的github网址,包含了kubernetes-1.9到kubernetes-1.21所有版本"
https://github.com/kubernetes/kubernetes/tree/master/CHANGELOG
"将下载好的包,上传到k8s-01的/opt/k8s/packages目录下,解压即可"
k8s-01:~ # cd /opt/k8s/packages/
k8s-01:/opt/k8s/packages # tar xf kubernetes-server-linux-amd64.tar.gz
1.1.0、分发kubectl命令到所有节点
#!/usr/bin/env bash
source /opt/k8s/bin/k8s-env.sh for host in ${NODE_IPS[@]}
do
printf "\e[1;34m${host}\e[0m\n"
scp /opt/k8s/packages/kubernetes/server/bin/kubectl ${host}:/opt/k8s/bin
ssh root@${host} "kubectl completion bash > /etc/bash_completion.d/kubectl"
done
  • kubectl completion bash > /etc/bash_completion.d/kubectl 配置kubectl命令自动补全,依赖bash-completion,如果没有,需要先安装bash-completion(suse一般都自带,centos发行版需要执行yum -y install bash-completion
1.1.1、创建admin证书和秘钥
  • kubectl作为集群的管理工具,需要被授予最高权限,这里创建具有最高权限的admin证书
  • kubectlapiserver进行https通信apiserver对提供的证书进行认证授权
k8s-01:~ # cd /opt/k8s/ssl/
k8s-01:/opt/k8s/ssl # cat > admin-csr.json <<EOF
{
"CN": "admin",
"hosts": [
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "ShangHai",
"L": "ShangHai",
"O": "system:masters",
"OU": "bandian"
}
]
}
EOF
  • O 为system:masters,kube-apiserver收到该证书后将请求的Group设置为system:masters
  • 预定的ClusterRoleBinding cluster-admin将Group system:masters与Role cluster-admin绑定,该Role授予API的权限
  • 该证书只有被kubectl当做client证书使用,所以hosts字段为空
1.1.2、生成admin证书和秘钥
k8s-01:/opt/k8s/ssl # cfssl gencert -ca=/opt/k8s/ssl/ca.pem \
-ca-key=/opt/k8s/ssl/ca-key.pem \
-config=/opt/k8s/ssl/ca-config.json \
-profile=kubernetes admin-csr.json | cfssljson -bare admin
1.1.3、创建kubeconfig文件
k8s-01:/opt/k8s/ssl # source /opt/k8s/bin/k8s-env.sh
"设置集群参数"
k8s-01:/opt/k8s/ssl # kubectl config set-cluster kubernetes \
--certificate-authority=/opt/k8s/ssl/ca.pem \
--embed-certs=true \
--server=${KUBE_APISERVER} \
--kubeconfig=kubectl.kubeconfig
"设置客户端认证参数"
k8s-01:/opt/k8s/ssl # kubectl config set-credentials admin \
--client-certificate=/opt/k8s/ssl/admin.pem \
--client-key=/opt/k8s/ssl/admin-key.pem \
--embed-certs=true \
--kubeconfig=kubectl.kubeconfig
"设置上下文参数"
k8s-01:/opt/k8s/ssl # kubectl config set-context kubernetes \
--cluster=kubernetes \
--user=admin \
--kubeconfig=kubectl.kubeconfig
"设置默认上下文"
k8s-01:/opt/k8s/ssl # kubectl config use-context kubernetes --kubeconfig=kubectl.kubeconfig
  • --certificate-authority 验证kube-apiserver证书的根证书
  • --client-certificate--client-key 刚生成的admin证书和私钥,连接kube-apiserver时使用
  • --embed-certs=true 将ca.pem和admin.pem证书嵌入到生成的kubectl.kubeconfig文件中 (如果不加入,写入的是证书文件路径,后续拷贝kubeconfig到其它机器时,还需要单独拷贝证书)
1.1.4、分发kubeconfig文件
  • 分发到使用kubectl命令的节点(一般在master上管理)
#!/usr/bin/env bash
source /opt/k8s/bin/k8s-env.sh for host in ${MASTER_IPS[@]}
do
printf "\e[1;34m${host}\e[0m\n"
ssh root@${host} "mkdir ~/.kube"
scp /opt/k8s/ssl/kubectl.kubeconfig ${host}:~/.kube/config
done

suse 12 二进制部署 Kubernetets 1.19.7 - 第01章 - 创建CA证书和kubectl集群管理命令的更多相关文章

  1. suse 12 二进制部署 Kubernetets 1.19.7 - 第13章 - 部署metrics-server插件

    文章目录 1.13.0.创建metrics-server证书和私钥 1.13.1.生成metrics-server证书和私钥 1.13.2.开启kube-apiserver聚合配置 1.13.3.分发 ...

  2. suse 12 二进制部署 Kubernetets 1.19.7 - 第02章 - 部署etcd集群

    文章目录 1.2.部署etcd集群 1.2.0.下载etcd二进制文件 1.2.1.创建etcd证书和私钥 1.2.2.生成etcd证书和私钥 1.2.3.配置etcd为systemctl管理 1.2 ...

  3. suse 12 二进制部署 Kubernetets 1.19.7 - 第03章 - 部署flannel插件

    文章目录 1.3.部署flannel网络 1.3.0.下载flannel二进制文件 1.3.1.创建flannel证书和私钥 1.3.2.生成flannel证书和私钥 1.3.3.将pod网段写入et ...

  4. suse 12 二进制部署 Kubernetets 1.19.7 - 第04章 - 部署docker服务

    文章目录 1.4.部署docker 1.4.0.下载docker二进制文件 1.4.1.配置docker镜像加速 1.4.2.配置docker为systemctl管理 1.4.3.启动docker服务 ...

  5. suse 12 二进制部署 Kubernetets 1.19.7 - 第05章 - 部署kube-nginx

    文章目录 1.5.部署kube-nginx 1.5.0.下载nginx二进制文件 1.5.1.编译部署nginx 1.5.2.配置nginx.conf 1.5.3.配置nginx为systemctl管 ...

  6. suse 12 二进制部署 Kubernetets 1.19.7 - 第06章 - 部署kube-apiserver组件

    文章目录 1.6.部署kube-apiserver 1.6.0.创建kubernetes证书和私钥 1.6.1.生成kubernetes证书和私钥 1.6.2.创建metrics-server证书和私 ...

  7. suse 12 二进制部署 Kubernetets 1.19.7 - 第07章 - 部署kube-controller-manager组件

    文章目录 1.7.部署kube-controller-manager 1.7.0.创建kube-controller-manager请求证书 1.7.1.生成kube-controller-manag ...

  8. suse 12 二进制部署 Kubernetets 1.19.7 - 第08章 - 部署kube-scheduler组件

    文章目录 1.8.部署kube-scheduler 1.8.0.创建kube-scheduler请求证书 1.8.1.生成kube-scheduler证书和私钥 1.8.2.创建kube-schedu ...

  9. suse 12 二进制部署 Kubernetets 1.19.7 - 第09章 - 部署kubelet组件

    文章目录 1.9.部署kubelet 1.9.0.创建kubelet bootstrap kubeconfig文件 1.9.1.创建kubelet配置文件 1.9.2.配置kubelet为system ...

随机推荐

  1. Linux上天之路(五)之Linux基本命令

    1. Linux命令格式 命令 命令选项 学会看语法: {必选项}[可选项] 举例 ls -a /tmp 等价 ls –all /tmp ls 命令 -a 命令选项 简写使用- 全写-- /tmp 参 ...

  2. 微信小程序base64图片保存到手机相册

    问题:base64图片不能直接用wx.saveImageToPhotosAlbum保存到手机相册 解决: 先用fs.writeFile写入本地文件,再wx.saveImageToPhotosAlbum ...

  3. SYCOJ411

    题面描述 MasMas在面试某大厂时遇到了一道有趣的题.面试官要求MasMas写一个程序找出几个数中,出现次数为奇数的那个数.MasMas抓耳挠腮,请你帮帮他. 输入描述 第一行输入一个数nn (1 ...

  4. 有道翻译js加密参数分析

    平时在渗透测试过程中,遇到传输的数据被js加密的比较多,这里我以有道翻译为例,来分析一下它的加密参数 前言 这是有道翻译的界面,我们随便输入一个,抓包分析 我们发现返回了一段json的字符串,内容就是 ...

  5. 使用.NET 6开发TodoList应用(26)——实现Configuration和Option的强类型绑定

    系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求 在上一篇文章使用.NET 6开发TodoList应用(25)--实现RefreshToken中,我们通过使用Configura ...

  6. 使用.NET 6开发TodoList应用(29)——实现静态字符串本地化功能

    系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求 在开发一些需要支持多种语言的应用程序时,我们需要根据切换的语言来对应展示一些静态的字符串字段,在本文中我们暂时不去讨论如何结合 ...

  7. day 9 scanf输入和gets输入的区别

    (1).计算机高级语言程序运行方法有编译执行和编译解释两种,一下叙述中正确的是[A] A.C语言程序仅可以编译执行 B.C语言程序仅可以解释执行 C.C语言程序既可以编译执行又可以解释执行 D.以上说 ...

  8. NPOI Excel导入Invalid header signature

    excel是从网页下载或者其他第三方软件导出的解决方法:使用excel打开,另存为2003版的excel,再导入就好了或者保存为 xlsx

  9. 【记录一个问题】opencv官网的opencv android sdk使用opencl并未用到GPU

    UMat u_mat;mat.copyTo(u_mat);cv::cvtColor(u_mat, cv::BGR2GARY);这样的代码反复执行,并未发现GPU占用提升.执行时间与不使用UMat相当. ...

  10. WSL与gnome-desktop

    WSL与gome-desktop 经过测试和检索 确定WSL1无法在gome-desktop实现GUI桌面 只能实现其中应用的现实,比如打开记事本在Xserver https://www.reddit ...