• K8S二进制部署之定义CA证书与ETCD



    CA证书

    CA证书中包含密钥对 (rsa 非对称密钥)
    CA证书可以对通信加密,同时标识身份的唯一性
    .pem :证书
    .

    制作K8S集群证书流程

    1、制作官方颁发的证书:
    ① 、创建ca密钥(文件定义) ca-key.pem
    ② 、创建ca证书(文件定义) ca.pem
    2、制作master端的证书(用于内部加密通讯,同时为了给与Client端颁发master签名的证书)
    ① 创建过程:需要以下几部
    设置私钥 确保安全加密 .pem
    私钥签名 确保身份真实 .csr
    制作证书(需要CA官方颁发) cert.pem
    ② 创建私钥
    ③ 私钥签名
    ④ 使用ca证书与密钥证书签名

    3、制作worker node端证书
    ① 由master端制作node端密钥
    ② 对node端的证书进行签名
    ③ 创建一个配置文件(区别于服务端,进行客户端验证)
    ④ 生成证书

    CA 证书机构 (签发电子证书)

    在 Kubernetes 的组件之间进行通信时,数字证书的验证是在协议层面通过 TLS 完成的,除了需要在建立通信时提供相关的证书和密钥外,在应用层面并不需要进行特殊处理。采用 TLS 进行验证有两种方式:

    1、 服务器单向认证:只需要服务器端提供证书,客户端通过服务器端证书验证服务的身份,但服务器并不验证客户端的身份。这种情况
    一般适用于对Internet开放的服务,例如搜索引擎网站,任何客户端都可以连接到服务器上进行访问,但客户端需要验证服务器的身份,以避免连接到伪造的恶意服务器。
    2 双向 TLS 认证:除了客户端需要验证服务器的证书,服务器也要通过客户端证书验证客户端的身份。这种情况下服务器提供的是敏感信息
    ,只允许特定身份的客户端访问。在Kubernetes中,各个组件提供的接口中包含了集群的内部信息。如果这些接口被非法访问,将影响集群的安全,因此组件之间的通信需要采用双向TLS认证。即客户端和服务器端都需要验证对方的身份信息。在两个组件进行双向认证时,会涉及到下面这些证书相关的文件:

    ① 服务器端证书:服务器用于证明自身身份的数字证书,里面主要包含了服务器端的公钥以及服务器的身份信息。
    ② 服务器端私钥:服务器端证书中包含的公钥所对应的私钥。公钥和私钥是成对使用的,在进行TLS验证时,服务器使用该私钥来向客户端
    证明自己是服务器端证书的拥有者
    ③ 客户端证书:客户端用于证明自身身份的数字证书,里面主要包含了客户端的公钥以及客户端的身份信息。
    ④ 客户端私钥:客户端证书中包含的公钥所对应的私钥,同理,客户端使用该私钥来向服务器端证明自己是客户端证书的拥有者。
    ⑤ 服务器端 CA 根证书:签发服务器端证书的 CA 根证书,客户端使用该 CA 根证书来验证服务器端证书的合法性。
    ⑥ 客户端端 CA 根证书:签发客户端证书的 CA 根证书,服务器端使用该 CA 根证书来验证客户端证书的合法性。

    K8S 二进制集群部署

    k8s 默认有三种部署方式:Minikube 、kubeadm、 二进制 ————》工具部署/云平台部署

    K8S二进制部署

    分为几个模块部署
    1、ETCD集群
    2、FLANNEL网络
    3、单master部署
    4、node部署
    5、多master署(LB部署haproxy + keepalived 或者nginx + keepalived )

    ETCD集群部署

    一、环境部署
    官网源码包下载:https://github.com/kubernetes/kubernetes/releases?after=v1.13.1
    ETCD 二进制包地址:https://github.com/etcd-io/etcd/releases

    Master:192.168.32.10/24
    Node01:192.168.32.30/24
    Node02:192.168.32.40/24

    vim /etc/hosts
    192.168.32.10 master01
    192.168.32.30 node01
    192.168.32.40 node02
    
    • 1
    • 2
    • 3
    • 4

    1、docker部署(所有节点)

    yum install -y yum-utils device-mapper-persistent-data lvm2
    
    cd /etc/yum.repos.d/
    yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    yum install -y docker-ce
    
    systemctl stop firewalld
    systemctl disable firewalld
    
    setenforce 0
    
    systemctl start docker
    systemctl enable docker
    
    tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://jqqwsp8f.mirror.aliyuncs.com"]
    }
    EOF
    systemctl daemon-reload
    systemctl restart docker
    
    vim /etc/sysctl.conf
    net.ipv4.ip_forward=1
    
    sysctl -p
    systemctl restart network
    systemctl restart docker 
    
    swapoff -a 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    ETCD集群部署

    master节点操作

    1、定义两个脚本

    mkdir k8s
    cd k8s
    ls
    etcd-cert.sh  etcd.sh
    #etcd-cert.sh 是证书制作的脚本
    #etcd.sh etcd启动脚本
    
    cat etcd-cert.sh 
    cat > ca-config.json < ca-csr.json < server-csr.json <
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74

    在这里插入图片描述
    在这里插入图片描述

    小结:

    ① 首先,必须先向CA机构申请证书,并且说明申请证书的用途(ca-config.json ——》www模块)
    ② 制作CA官方的证书文件,包含ca-Key.pem 密钥文件+ ca.pem 证书文件 ——————》官方的
    ③ 再根据官方认证的CA.PEM + CA-KEY.PEM 来制作server端的证书

    查看etcd 启动脚本

    #!/bin/bash
    #以下为使用格式:etcd名称 当前etcd的IP地址+完整的集群名称和地址
    # example: ./etcd.sh etcd01 192.168.1.10 etcd02=https://192.168.1.11:2380,etcd03=https://192.168.1.12:2380
    
    ETCD_NAME=$1						#位置变量1:etcd节点名称
    ETCD_IP=$2							#位置变量2:节点地址
    ETCD_CLUSTER=$3						#位置变量3:集群
    
    WORK_DIR=/opt/etcd					#指定工作目录(⭐⭐⭐⭐一定要写绝对路径)
    
    cat <$WORK_DIR/cfg/etcd				#在指定工作目录创建ETCD的配置文件
    #[Member]
    ETCD_NAME="${ETCD_NAME}"				#etcd名称
    ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
    ETCD_LISTEN_PEER_URLS="https://${ETCD_IP}:2380"		#etcd IP地址:2380端口。用于集群之间通讯
    ETCD_LISTEN_CLIENT_URLS="https://${ETCD_IP}:2379"	#etcd IP地址:2379端口,用于开放给外部客户端通讯
    
    #[Clustering]
    ETCD_INITIAL_ADVERTISE_PEER_URLS="https://${ETCD_IP}:2380"
    ETCD_ADVERTISE_CLIENT_URLS="https://${ETCD_IP}:2379"	#对外提供的url使用https的协议进行访问
    ETCD_INITIAL_CLUSTER="etcd01=https://${ETCD_IP}:2380,${ETCD_CLUSTER}"		#多路访问
    ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"		#tokens 令牌环名称:etcd-cluster
    ETCD_INITIAL_CLUSTER_STATE="new"			#状态,重新创建
    EOF
    
    cat </usr/lib/systemd/system/etcd.service		#定义ectd的启动脚本
    [Unit]										#基本项			
    Description=Etcd Server						#类似为 etcd 服务
    After=network.target						
    After=network-online.target
    Wants=network-online.target
    
    [Service]									#服务项
    Type=notify
    EnvironmentFile=${WORK_DIR}/cfg/etcd		#etcd文件位置
    ExecStart=${WORK_DIR}/bin/etcd \			#准启动状态及以下的参数
    --name=\${ETCD_NAME} \
    --data-dir=\${ETCD_DATA_DIR} \
    --listen-peer-urls=\${ETCD_LISTEN_PEER_URLS} \
    --listen-client-urls=\${ETCD_LISTEN_CLIENT_URLS},http://127.0.0.1:2379 \
    --advertise-client-urls=\${ETCD_ADVERTISE_CLIENT_URLS} \ #以下为群集内部的设定
    --initial-advertise-peer-urls=\${ETCD_INITIAL_ADVERTISE_PEER_URLS} \
    --initial-cluster=\${ETCD_INITIAL_CLUSTER} \
    --initial-cluster-token=\${ETCD_INITIAL_CLUSTER_TOKEN} \	#群集内部通信,也是使用的令牌,为了保证安全(防范中间人窃取)
    --initial-cluster-state=new \
    --cert-file=${WORK_DIR}/ssl/server.pem \		#证书相关参数
    --key-file=${WORK_DIR}/ssl/server-key.pem \
    --peer-cert-file=${WORK_DIR}/ssl/server.pem \
    --peer-key-file=${WORK_DIR}/ssl/server-key.pem \
    --trusted-ca-file=${WORK_DIR}/ssl/ca.pem \
    --peer-trusted-ca-file=${WORK_DIR}/ssl/ca.pem
    Restart=on-failure
    LimitNOFILE=65536								#开放最多的端口号
    
    [Install]
    WantedBy=multi-user.target						#进行启动
    EOF
    
    systemctl daemon-reload							#参数重载
    systemctl enable etcd
    systemctl restart etcd
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61

    创建ca证书

    首先,创建证书目录,复制k8s目录下的证书创建脚本

    mkdir etcd-cert
    mv etcd-cert.sh etcd-cert
    ls
    ls etcd-cert
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    创建cfssl类型工具下载脚本

    先从官网源中制作证书的工具下载下来
    cat cfssl.sh
    在这里插入图片描述

    #先从官网源中制作证书的工具下载下来,(-o:导出)放在/usr/local/bin中便于系统识别
    curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o /usr/local/bin/cfssl
    
    #从另一个站点源中下载cfssljson工具,用于识别json配置文件格式
    curl -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -o /usr/local/bin/cfssljson
    
    #下载cfssl-certinfo工具
    curl -L https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -o /usr/local/bin/cfssl-certinfo
    
    #给与权限
    chmod +x /usr/local/bin/cfssl /usr/local/bin/cfssljson /usr/local/bin/cfssl-certinfo
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    bash cfssl.sh
    在这里插入图片描述
    cd /usr/local/bin
    ls
    在这里插入图片描述
    chmod +x *
    在这里插入图片描述
    #返回etcd-cert目录
    在这里插入图片描述
    #定义ca证书

    cat > ca-config.json <
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    #定义证书签名文件

    cat > ca-csr.json <

#生成证书,生成ca-key.pem 和ca.pem
cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
##指定etcd三个节点之间的通信验证使用的证书
#etcd节点服务端的签名文件

cat > server-csr.json <

#根据服务端签名文件生成证书
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server

##以上签名文件制作完毕
在这里插入图片描述

mkdir /opt/etcd/{cfg,bin,ssl} -p
ls /opt/etcd/*

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

cp etcd etcdctl /opt/etcd/bin/
到k8s目录下
cd etcd-cert/
cp *.pem /opt/etcd/ssl/
ls /opt/etcd/ssl

在这里插入图片描述
在这里插入图片描述
这里会卡,会报错,因为其他节点还没用加入进来

bash etcd.sh etcd01 192.168.32.10 etcd02=https://192.168.32.30:2380,etcd03=https://192.168.32.40:2380

在这里插入图片描述

ps -aux | grep etcd | grep -v grep

在这里插入图片描述

scp -r /opt/etcd/ root@192.168.32.30:/opt/
scp -r /opt/etcd/ root@192.168.32.40:/opt/
scp /usr/lib/systemd/system/etcd.service root@192.168.32.30:/usr/lib/systemd/system/
scp /usr/lib/systemd/system/etcd.service root@192.168.32.40:/usr/lib/systemd/system/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

到node节点修改

vim /opt/etcd/cfg/etcd

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

/opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://192.168.32.10:2379,https://192.168.32.30:2379,https://192.168.32.40:2379" cluster-health

在这里插入图片描述

  • 相关阅读:
    Hutool工具包中BeanUtil的使用
    java学习第二天笔记-java基础概念11-键盘输入-33
    NLP入门——数据预处理:子词切分及应用
    Unity基于Text的快捷键修改组件
    1.Android逆向协议-环境搭建
    位图的详细介绍及模拟实现
    打车APP开发平台具体解决了哪些出行问题?
    Computed
    react父子组件传参demo
    智慧养殖方案:浅谈视频监控与AI智能识别技术助力奶牛高效、智慧养殖
  • 原文地址:https://blog.csdn.net/l17605229954/article/details/127633943