Kubernetes / 云原生

二进制部署一套高可用K8s集群-1.25+(一)

浅时光博客 · 3月21日 · 2022年 9.6w 次已读

一、系统初始化

说明:本文档的角色规划和系统初始化流程跟下面链接中的文章规划一致,本文不在赘诉!

提示:

(1)本文档使用的K8s版本为1.25+;注:本系列文章同样可以完美部署最新的1.25、1.26 、1.27版本的K8s集群

(2)本文档使用的容器运行时为 Containerd

(3)本文档使用的网络插件为 Calico

(4)本文档使用的系统为 CentOS 7.6

(5)执行下面的操作之前,请确保K8s-master1节点机器与其它集群节点已经实现了主机名免密和IP免密登入

二、创建CA根证书和秘钥


为确保安全,kubernetes系统各组件需要使用x509证书对通信进行加密和认证。

CA (Certificate Authority) 是文章来源(Source):https://dqzboy.com自签名的根证书,用来签名后续创建的其它证书。

CA 证书是集群所有节点共享的,只需要创建一次,后续用它签名其它所有证书。

  • 本文档使用 CloudFlare的 PKI 工具集cfssl创建所有证书。

1、安装cfssl工具集

  • 注意:所有命令和文件在k8s-master1上在执行,然后将文件分发给其他节点
[root@k8s-master1 ~]# mkdir -p /opt/k8s/cert && cd /opt/k8s

[root@k8s-master1 k8s]# wget https://github.com/cloudflare/cfssl/releases/download/v1.6.1/cfssl_1.6.1_linux_amd64
[root@k8s-master1 k8s]# mv cfssl_1.6.1_linux_amd64 /opt/k8s/bin/cfssl

[root@k8s-master1 k8s]# wget https://github.com/cloudflare/cfssl/releases/download/v1.6.1/cfssljson_1.6.1_linux_amd64 
[root@k8s-master1 k8s]# mv cfssljson_1.6.1_linux_amd64 /opt/k8s/bin/cfssljson

[root@k8s-master1 k8s]# wget https://github.com/cloudflare/cfssl/releases/download/v1.6.1/cfssl-certinfo_1.6.1_linux_amd64 
[root@k8s-master1 k8s]# mv cfssl-certinfo_1.6.1_linux_amd64 /opt/k8s/bin/cfssl-certinfo

[root@k8s-master1 k8s]# chmod +x /opt/k8s/bin/*
[root@k8s-master1 k8s]# export PATH=/opt/k8s/bin:$PATH

2、创建根证书(CA)

2.1:创建配置文件

[root@k8s-master1 k8s]# cd /opt/k8s/work
[root@k8s-master1 work]# 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 提供的证书进行验证;
  • "expiry": "876000h":证书有效期设置为 100 年;

2.2:创建证书签名请求文件

  • CSR:证书签名请求文件,配置了一些域名、公司、单位、组织信息
[root@k8s-master1 work]# cat > ca-csr.json <<EOF
{
  "CN": "kubernetes-ca",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "ShangHai",
      "L": "ShangHai",
      "O": "k8s",
      "OU": "dqz"
    }
  ],
  "ca": {
    "expiry": "876000h"
 }
}
EOF

2.3:生成CA证书和私钥

  • CA证书用来颁发客户端证书的
[root@k8s-master1 work]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca
[root@k8s-master1 work]# ls ca*
ca-config.json  ca.csr  ca-csr.json  ca-key.pem  ca.pem

3、分发证书文件

worker 节点需要使用与 kubernetes-master 节点相同的 CA 证书进行身份验证,文章来源(Source):https://dqzboy.com并使用该证书进行加密通信。因此,在部署 Kubernetes 集群时,应该将 CA 证书部署到所有节点上,并定期更新证书以确保集群的安全性。

[root@k8s-master1 work]# for node_ip in ${NODE_IPS[@]}
  do
    echo ">>> ${node_ip}"
    ssh root@${node_ip} "mkdir -p /etc/kubernetes/cert"
    scp ca*.pem ca-config.json root@${node_ip}:/etc/kubernetes/cert
  done

本文作者:浅时光博客
原文链接:https://www.dqzboy.com/9710.html
版权声明:知识共享署名-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)协议进行许可,转载时请以>超链接形式标明文章原始出处和作者信息
免责声明:本站内容仅供个人学习与研究,严禁用于商业或非法目的。请在下载后24小时内删除相应内容。继续浏览或下载即表明您接受上述条件,任何后果由用户自行承担。

63 条回应
  1. huiquan安徽·宿州2023-1-12 · 17:42

    受教,受教很详细

  2. johnny菲律宾2022-11-24 · 2:11

    非常详细,谢谢分享

  3. Lucifer广东·深圳2022-11-19 · 11:15

    非常详细,谢谢分享

  4. callname广东·广州2022-10-28 · 15:38

    先赞后看,谢谢!

  5. johnny菲律宾2022-10-27 · 17:06

    感谢作者整理,先谢过再看。

  6. dviwang2022-10-25 · 11:38

    先赞后看,谢谢!

  7. allenjol上海2022-10-20 · 13:58

    先赞后看,谢谢

  8. wx_a29f639a64广东·深圳2022-10-10 · 16:11

    先赞后看,谢谢

  9. 随风四川·达州2022-9-25 · 18:46

    感谢作者整理,先谢过再看。

  10. xiaochun上海2022-9-19 · 22:03

    OK OK 先评论在学习 作者整理这些辛苦了