SSL证书和相关概念
PKI
- 公钥基础设
- 一个完整的PKI包括以下几个部分:
- 端实体(申请者,发给谁的)
- 注册机构(RC)
- 签证机构(CA,谁发的)
- 证书撤销列表(CRL,什么时候过期)
- 证书存取库
SSL
- SSL证书来源
- 网络第三方机构购买(看不同的安全级别,中等的3000左右):通常用于外部用户访问使用
- 自签证书:自己给自己发证书,通常用于内部环境
- 签证机构
- 自建CA
- openssl
- cfssl(简单)
- 自建CA
加密
- 对称加密
- 区分:加密解密用相同的秘钥
- 隐患:数据传输过程中,同时发送加密数据和加密秘钥
- 非对称加密
- 使用密钥对(公钥-私钥)的形式进行加解密
- 使用:银行、淘宝
- 单向加密
- 只能加密,不能解密
- 如MD5(md5sum,md5sum -c)
三、给etcd颁发证书
- 创建证书颁发机构
- 填写表单,写明etcd所在节点的IP
- 向证书颁发机构申请证书
- 上传TLS安装包:
cd /home/zheng/Documents/Kubernetes/
sudo scp TLS.tar.gz zheng@xx.xx.xx.xx:/home/zheng/Documents/K8sFile
- 解压缩:
tar xvf /home/zheng/Documents/K8sFile/TLS.tar.gz
cd /home/zheng/Documents/K8sFile/TLS
# 使用管理员权限执行
sudo ./cfssl.sh
- 注册表单
vim server-csr.json
# 修改hosts中的IP地址,这里的IP是etcd所在节点的IP地址
{
"CN": "etcd",
"hosts": [
"172.16.23.147", # 颁发etcd所在的节点IP
"172.16.23.131",
"172.16.23.134"
],
... ...
}
cd etcd/
# 创建CA,颁发证书
./generate_etcd_cert.sh
# 创建CA(证书颁发机构)
-- cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
# 给server.json中指定的节点,颁发证书
-- cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server
# 出现4个pem的文件
ls *pem
四、部署etcd
etcd需要三台虚拟机
在master,node1,node2 上分别安装一个etcd
- 准备文件
# 准备etcd安装包
sudo scp etcd.tar.gz zheng@xx.131:/home/zheng/Documents/K8sFile
sudo scp etcd.tar.gz zheng@xx.134:/home/zheng/Documents/K8sFile
# 解压文件
tar xvf etcd.tar.gz
# 这个文件只能放到这个位置
sudo mv etcd.service /usr/lib/systemd/system
# 将etcd的执行目录移动到/opt/下
# ==> 如果放到其他位置,需要修改etcs.service的前两行(指定了路径)
sudo mv etcd /opt/
- 修改etcd的配置文件
vim /opt/etcd/cfg/etcd.conf
#[Member] # 单节点配置
# etcd的唯一名称,默认为etcd-1,可修改,但不能冲突
ETCD_NAME="etcd-1"
# 用etcd存储数据时,etcd的数据库位置,数据存储位置
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
# 当前etcd和其他etcd通信时,使用的端口==>接受/发送其他etcd发来的数据
ETCD_LISTEN_PEER_URLS="https://192.168.31.61:2380"
# 接受master中的APIServer发送来的数据,和APIServer(外部接口-客户端)通信时,使用的端口
ETCD_LISTEN_CLIENT_URLS="https://192.168.31.61:2379"
#[Clustering] # 集群配置
# 通告端口,告诉其他etcd,我正在监听2380这个端口
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.31.61:2380"
# 通告端口,告诉其他的客户端,我正在监听2379这个端口
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.31.61:2379"
# 所有etcd的名称=对应的IP:etcd的通信端口
ETCD_INITIAL_CLUSTER="etcd-1=https://192.168.31.61:2380,etcd-2=https://192.168.31.62:2380,etcd-3=https://192.168.31.63:2380"
# etcd通信的时候会进行认证,使用的就是这个token,可以修改,但所有的都得改(保持一致)
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
# 当前集群的状态(new-新的集群)
ETCD_INITIAL_CLUSTER_STATE="new"
- 复制证书文件
cd TLS/etcd/
# 删除之前的文件
rm -rf /opt/etcd/ssl/*
# 将证书文件复制过去
cp {ca,server,server-key}.pem /opt/etcd/ssl/
# 如果存在文件-覆盖
# alias 命令别名 # 查看定义的别名 ==> 可以直接使用 alias key=="终端命令", 然后用key替代比较长的终端命令
# unalias cp(终端命令) / `\cp 命令` # 通过这种方式取消别名(cp 原本为cp -i--> -i表示交互, 不交互就直接复制了)
- 配置worker节点
# etcd 的管理程序
# 把master上配置好的文件直接发送到worker节点上
sudo scp etcd.tar.gz zheng@172.16.23.134:/home/zheng/Documents/K8sFile
# 解压
tar xvf etcd.tar.gz
# 可以直接scp到这个位置,但是考虑权限问题,还是分两步操作
sudo mv etcd.service /usr/lib/systemd/system/
# etcd的程序目录
cd TLS
# 发送etcd的执行目录
scp -r etcd/ zheng@k8s-node-2:/home/zheng/Documents/K8sFile
# 复制到指定的文件夹中
sudo mv etcd /opt/
- 在node1上修改etcd的配置文件
# vim /opt/etcd/cfg/etcd.conf
# [Member]
ETCD_NAME="etcd-2"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://172.16.23.131:2380"
ETCD_LISTEN_CLIENT_URLS="https://172.16.23.131:2379"
# [Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://172.16.23.131:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://172.16.23.131:2379"
ETCD_INITIAL_CLUSTER="etcd-1=https://172.16.23.147:2380,etcd-2=https://172.16.23.131:2380,etcd-3=https://172.16.23.134:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
- 在node2上修改etcd的配置文件
# vim /opt/etcd/cfg/etcd.conf
#[Member]
ETCD_NAME="etcd-3"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://172.16.23.134:2380"
ETCD_LISTEN_CLIENT_URLS="https://172.16.23.134:2379"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://172.16.23.134:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://172.16.23.134:2379"
ETCD_INITIAL_CLUSTER="etcd-1=https://172.16.23.147:2380,etcd-2=https://172.16.23.131:2380,etcd-3=https://172.16.23.134:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
- 在三个节点上依次启动etcd服务
# 启动etcd
systemctl start etcd
# 停止etcd
systemctl stop etcd
# 重启etcd
systemctl restart etcd
# 开机自启etcd
systemctl enable etcd
# 验证etcd服务
systemctl status etcd.service
# /opt/etcd/bin/etcdctl --ca-file=/opt/etcd/ssl/ca.pem --cert-file=/opt/etcd/ssl/server.pem --key-file=/opt/etcd/ssl/server-key.pem --endpoints="https://172.16.23.147:2379,https://172.16.23.131:2379,https://172.16.23.134:2379" cluster-health
- 两个配置文件
sudo vim /usr/lib/systemd/system/etcd.service
# 重载配置文件
systemctl daemon-reload
sudo vim /opt/etcd/cfg/etcd.conf
(未完待续…)
评论区