Kubernetes / 云原生

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

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

一、系统初始化

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

文章来源(Source):https://dqzboy.com

提示:

(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) 是自签名的根证书,用来签名后续创建的其它证书。

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 节点需要使用与 kubern原文链接:https://dqzboy.cometes-master 节点相同的 CA 证书进行身份验证,并使用该证书进行加密通信。因此,在部署 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. xiaochun上海2022-9-19 · 14:32

    感谢博主无私,谢谢分享

  2. wx_970f0fe071北京2022-8-19 · 15:49

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

  3. 小悳LL广东·广州2022-8-18 · 16:11

    感谢博主无私,谢谢分享

  4. 嘿嘿克湖北·襄阳2022-8-17 · 22:19

    学习下,感谢博主分享

  5. 流年2022-8-17 · 11:53

    学习下,感谢博主分享

  6. kkkkk山东·青岛2022-8-10 · 10:16

    学习学习学习学习

  7. _209上海2022-8-2 · 14:49

    牛牛牛牛牛

  8. wang0219北京2022-7-18 · 15:59

    学习,学习,谢谢分享

  9. fish浙江·杭州2022-7-9 · 18:13

    学习,学习,谢谢分享

  10. seasonjj上海2022-6-28 · 17:26

    学习学习,感谢分享