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

news/2024/4/29 15:34:06/文章来源:https://blog.csdn.net/l17605229954/article/details/127633943

文章目录

  • CA证书
    • 制作K8S集群证书流程
  • K8S 二进制集群部署
    • K8S二进制部署
    • ETCD集群部署
      • 1、docker部署(所有节点)
    • ETCD集群部署
      • master节点操作
        • 小结:
      • 查看etcd 启动脚本
    • 创建ca证书
    • 创建cfssl类型工具下载脚本
    • 到node节点修改


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、docker部署(所有节点)

yum install -y yum-utils device-mapper-persistent-data lvm2cd /etc/yum.repos.d/
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum install -y docker-cesystemctl stop firewalld
systemctl disable firewalldsetenforce 0systemctl start docker
systemctl enable dockertee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://jqqwsp8f.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart dockervim /etc/sysctl.conf
net.ipv4.ip_forward=1sysctl -p
systemctl restart network
systemctl restart docker swapoff -a 

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

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 <<EOF			#CA证书配置文件
{"signing": {					#键名称"default": {"expiry": "87600h"			#证书有效期(10年)},"profiles": {				#简介"www": {					#名称"expiry": "87600h","usages": [				#使用方法"signing",				#键"key encipherment",		#密钥验证(密钥验证要设置在CA证书中)"server auth",			#服务器端验证"client auth"			#客户端验证]}}}
}
EOFcat > ca-csr.json <<EOF				#CA签名文件
{"CN": "etcd CA",				#CA签名为etcd指定(三个节点均需要)"key": {"algo": "rsa",				#使用rsa非对称密钥的形式"size": 2048				#密钥长度为2048},"names": [					#在证书中定义信息(标准格式){"C": "CN",				#名称"L": "Beijing",		"ST": "Beijing"		}]
}
EOFcfssl gencert -initca ca-csr.json | cfssljson -bare ca -#-----------------------cat > server-csr.json <<EOF			#服务器端的签名
{"CN": "etcd","hosts": [					#定义三个节点的IP地址"192.168.32.10","192.168.32.30","192.168.32.40"],"key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","L": "BeiJing","ST": "BeiJing"}]
}
EOFcfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server
#cfssl 为证书制作工具

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

小结:

① 首先,必须先向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:2380ETCD_NAME=$1						#位置变量1:etcd节点名称
ETCD_IP=$2							#位置变量2:节点地址
ETCD_CLUSTER=$3						#位置变量3:集群WORK_DIR=/opt/etcd					#指定工作目录(⭐⭐⭐⭐一定要写绝对路径)cat <<EOF >$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"			#状态,重新创建
EOFcat <<EOF >/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						#进行启动
EOFsystemctl daemon-reload							#参数重载
systemctl enable etcd
systemctl restart etcd

创建ca证书

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

mkdir etcd-cert
mv etcd-cert.sh etcd-cert
ls
ls etcd-cert

在这里插入图片描述

创建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

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

cat > ca-config.json <<EOF
{"signing": {"default": {"expiry": "87600h"},"profiles": {"www": {"expiry": "87600h","usages": ["signing","key encipherment","server auth","client auth"     ]  } }         }
}
EOF 

#定义证书签名文件

cat > ca-csr.json <<EOF 
{   "CN": "etcd CA","key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","L": "Beijing","ST": "Beijing"}]
}
EOF

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

cat > server-csr.json <<EOF
{"CN": "etcd","hosts": ["192.168.32.10","192.168.32.30","192.168.32.40"],"key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","L": "BeiJing","ST": "BeiJing"}]
}
EOF

#根据服务端签名文件生成证书
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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_410452.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅谈 web3

web3——互联网的未来? web3,很多人觉得是个骗局,是在割韭菜。因为大部分介绍 web3 的文章都离不开 NFT、数字货币、区块链、比特币、以太坊、元宇宙等概念,玄之又玄,脱离我们的生活,没解决我们的痛点。一般文章最后还教给我们怎么炒币,怎么买卖 NFT,妥妥的割韭菜套路,…

顺序结构综合练习

顺序结构综合练习 数学头文件#include<cmath> 幂函数 pow10(x)结果等于10^x pow()函数是cmath标头的库函数,用于查找幂的加数。计算x的y次方 pow()函数语法:pow(x,y); #include<cstdio>// main(){int a,b,c;scanf("%d%d",&a,&b);//格式化…

长时间久坐危害竟然这么大,这4项检查,男性朋友一定要定期查

对于男性而言&#xff0c;生殖系统健康尤为重要&#xff0c;但很多人却并不是那么重视&#xff0c;家住昆山的小王就是其中一员&#xff0c;作为一名程序员的他&#xff0c;上班坐着&#xff0c;上班路上坐着&#xff0c;下班路上也是坐着&#xff0c;回家更是坐着。小伙身体棒…

Bootstrap概述和Bootstrap快速入门

Bootstrap概述 1.概念:一个前端开发的框架,Bootstrap,来自Twitter,是目前很受欢迎的前端框架。Bootstrap是基于HTML、CSS、JavaScript的,它简洁灵活,使用得Web开发更加快捷。框架:一个半成品软件,开发人员可以在框架基础上,在进行开发,简化编码。好处:1.定义了很多的…

css 居中

阅读目录水平居中垂直居中垂直居中: position 绝对定位演示垂直居中: flex 演示垂直居中: transform 演示水平&垂直居中flex 1flex 2position水平居中 1 行内块居中 设置父元素的 text-align: center 2 块级元素 设置当前块级元素(宽度) margin: 0 auto; 3 绝对定位 元素…

【微机接口】中断的基本概念

中断&#xff1a; CPU在执行程序的过程中&#xff0c;由于某种外部或内部事件的作用&#xff0c;使CPU停止当前正在执行的程序转去为该事件服务&#xff0c;待事件服务结束后&#xff0c;又能自动返回到被中止的程序继续执行。 主程序&#xff1a; 被中断的原程…

@DateTimeFormat和@JsonFormat介绍

文章目录1.DateTimeFormat注解1.1DateTimeFormat注解简介1.2DateTimeFormat注解的功能1.3DateTimeFormat注解的注意点1.4DateTimeFormat功能演示1.4.1类型转换异常情况测试1.4.2接收url路径传参格式测试1.4.3接收Form-Data数据格式测试1.4.4接收JSON数据格式测试2.JsonFormat注…

基于协同过滤推荐算法的在线教育平台(Vue+Node.js+SSM)

基于协同过滤推荐算法的在线教育平台&#xff08;前后端分离&#xff09;。 back为后端&#xff0c;front为前端&#xff0c;config-files为相关配置文件 摘要 随着科技的不断变迁&#xff0c;信息技术的不断迭代升级。人们对于互联网方方面面的需求都开始涌现了出来&#xf…

第9章实验作业

实验9:异常处理及程序调试 一、实验目的和要求 1、了解代码异常知识; 2、掌握异常处理的try…except语句、try…except…else语句、try…except…finally语句。raise语句; 3、掌握程序调试的方法。 二、实验环境 软件版本:Python 3.10 64_bit 三,实验过程 实验1 (1) def…

实战经验:如何根据系统的业务场景需求定制自己的线程池?

线程池有那么多的参数和类型&#xff0c;在实际的开发中&#xff0c;我们应该如何设置呢&#xff1f;是直接使用Executors提供的线程池实现&#xff0c;还是自定义线程池&#xff1f;这都是我们本篇文章要回答的问题&#xff0c;那么就请跟随笔者一起分析一下在实战中如何根据系…

uniapp开发微信小程序-用户授权登录和获取手机号码

小程序开放文档 uniapp开发的小程序配置&#xff0c;找到manifest.json&#xff0c;填入正确的小程序appId&#xff1b; hbuilderx>运行>运行到小程序模拟器(安装开发者工具)&#xff0c;编译完成之后会直接在微信开发者工具内打开&#xff1b; 登录流程解析&#xff1…

【SpringBoot】一文了解SpringBoot热部署

文章目录前言手动启动热部署热部署种类手动进行热部署自动启动热部署热部署范围配置热部署的关闭总结&#x1f315;博客x主页&#xff1a;己不由心王道长&#x1f315;! &#x1f30e;文章说明&#xff1a;一文彻底搞懂SpringBoot热部署&#x1f30e; ✅系列专栏&#xff1a;Sp…

程序人生:去了字节跳动,才知道年薪40W的测试有这么多?

今年大环境不好&#xff0c;内卷的厉害&#xff0c;薪资待遇好的工作机会更是难得。最近脉脉职言区有一条讨论火了&#xff1a; 哪家互联网公司薪资最‘厉害’&#xff1f; 下面的评论多为字节跳动&#xff0c;还炸出了很多年薪40W的测试工程师 我只想问一句&#xff0c;现在的…

【C#】async和await

大概理解 查了一个小时的资料&#xff1a;async和await 发现这个大神的解释一针见血&#xff0c;深得我心&#xff01;以最简单的例子&#xff0c;解释了async和await。妙~~~ 大多情况下&#xff0c;分开才能体现async和await的价值&#xff01; 但&#xff0c;await 并没有…

C#中的弃元

从C#7.0开始,推出了一种新的特性:弃元,这种思想可能来源于Golang。弃元,就是不想要了的元素变量,用单下划线(_)表示,弃元在编译时起作用,就是搞编译器:这个变量我不要,你可以优化处理。我们经常在下面几个过程中使用弃元:1、元组解构赋值在使用元组解构赋值时,我们…

Linux——进程间通信——管道(文件)通信

目录 前言 一、有名管道 1、用法 2、管道分类 3、有名管道的创建 4、思考&#xff1a;如何进程a要将键盘获取的数据传递给另一个进程b&#xff1f; 5、有名管道实现进程间通信 二、无名管道 1、无名管道的创建 2、管道操作分为以下步骤 3、无名管道实现进程间通信 前言…

string类详解

文章目录1:构造string类1.1:方法1.2:测试2:size和length2.1:用途2.2:测试3:capacity3.1:用途3.2:测试4:clear4.1:用途4.2:测试5:empty5.1:用途5.2:测试6:reserve6.1:用途6.2:测试7:resize7.1:用途7.2:测试8:string的三种遍历8.1:方法一 for循环和[]重载8.2:方法二 迭代器8.2.1:…

基于CNTK/C#实现逻辑回归【附源码】

文章目录前言一、VS2022CNTK环境搭建二、逻辑回归代码构建1.逻辑回归构建2.训练数据的生成3.模型训练三、效果展示前言 本文基于CNTK实现逻辑回归二分类&#xff0c;并以之前的不同&#xff0c;本次使用C#实现&#xff0c;不适用python&#xff0c;python版的CNTK比较简单&…

Java多线程-ThreadPool线程池(三)

开完一趟车完整的过程是启动、行驶和停车,但老司机都知道,真正费油的不是行驶,而是长时间的怠速、频繁地踩刹车等动作。因为在速度切换的过程中,发送机要多做一些工作,当然就要多费一些油。 而一个Java线程完整的生命周期就包括:1、T1:创建(启动) 2、T2:运行(行驶)…

苹果IOS应用上架AppStore的流程与教程

快打包生成的苹果APP上架到苹果官方appstore商店的详细流程与教程第一步:创建app发布证书以及配置文件1、打开苹果开发者中心网站:https://developer.apple.com,点击右上角 Account 使用开发者账号登录,如下图所示:​编辑切换为居中添加图片注释,不超过 140 字(可选)2、…