" name="sm-site-verification"/>
侧边栏壁纸
博主头像
PySuper博主等级

千里之行,始于足下

  • 累计撰写 203 篇文章
  • 累计创建 14 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

Kubernetes入门(四)-- 部署Etcd服务器

PySuper
2020-06-08 / 0 评论 / 0 点赞 / 8 阅读 / 7452 字
温馨提示:
所有牛逼的人都有一段苦逼的岁月。 但是你只要像SB一样去坚持,终将牛逼!!! ✊✊✊

SSL证书和相关概念

PKI
  • 公钥基础设
  • 一个完整的PKI包括以下几个部分:
    • 端实体(申请者,发给谁的)
    • 注册机构(RC)
    • 签证机构(CA,谁发的)
    • 证书撤销列表(CRL,什么时候过期)
    • 证书存取库
SSL
  • SSL证书来源
    • 网络第三方机构购买(看不同的安全级别,中等的3000左右):通常用于外部用户访问使用
    • 自签证书:自己给自己发证书,通常用于内部环境
  • 签证机构
    • 自建CA
      • openssl
      • cfssl(简单)

加密

  • 对称加密
    • 区分:加密解密用相同的秘钥
    • 隐患:数据传输过程中,同时发送加密数据和加密秘钥
  • 非对称加密
    • 使用密钥对(公钥-私钥)的形式进行加解密
    • 使用:银行、淘宝
  • 单向加密
    • 只能加密,不能解密
    • 如MD5(md5sum,md5sum -c)

三、给etcd颁发证书

  • 创建证书颁发机构
  • 填写表单,写明etcd所在节点的IP
  • 向证书颁发机构申请证书
  1. 上传TLS安装包:
cd /home/zheng/Documents/Kubernetes/

sudo scp TLS.tar.gz zheng@xx.xx.xx.xx:/home/zheng/Documents/K8sFile
  1. 解压缩:
tar xvf /home/zheng/Documents/K8sFile/TLS.tar.gz

cd /home/zheng/Documents/K8sFile/TLS

# 使用管理员权限执行
sudo ./cfssl.sh
  1. 注册表单
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

(未完待续…)

0

评论区