centos7 kubernetes(k8s)1.12集群部署与使用(二):证书制作和etcd集群部署

概述

    上一篇已经为大家简单介绍了kubernetes集群的架构和做了基本的系统初始化,这一篇我们继续,这篇主要进行证书制作和etcd集群的部署。kubernetes集群的安全严,整个集群的交互都需要很多的证书相互认证,这里通过手动制作证书来完成。etcd作为kubernetes集群的数据存储方式,是基础依赖,需要先部署。

ps: 为了更好的让大家理解集群的整个结构,整个系列部署都是采用二进制包手动部署方式。

   整个系列具体会出多少篇博客,也不一定,每有更新,便会在每篇博客的开头,进行导航:

《centos7 kubernetes(k8s)1.12集群部署与使用(一):基础知识介绍和系统初始化》

《centos7 kubernetes(k8s)1.12集群部署与使用(二):证书制作和etcd集群部署》

《centos7 kubernetes(k8s)1.12集群部署与使用(三):master节点部署》

《centos7 kubernetes(k8s)1.12集群部署与使用(四):Node节点部署》

《centos7 kubernetes(k8s)1.12集群部署与使用(五):Flannel网络部署》

 

 

正文

整个系列环境:

centos7 服务器3台   1master + 2node  

master  ip: 192.168.1.1

node1   ip: 192.168.1.2

node2   ip: 192.168.1.3

 

    首先,需要进行ca证书制作,制作证书有很多工具,这里使用比较简单方便的cfssl工具

1. 下载 cfssl 证书制作工具

官方下载地址: https://pkg.cfssl.org/  。需要下载三个文件,分别是 cfssl_linux-amd64,cfssljson_linux-amd64,cfssl-certinfo_linux-amd64

centos7 kubernetes(k8s)1.12集群部署与使用(二):证书制作和etcd集群部署_第1张图片

# 在master上操作, 192.168.1.1 上进行操作
# 下载到cfssl相关工具 到 /usr/local/src 下
cd /usr/local/src
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64

# 授权
chmod +x cfssl*

# 将cfssl 移动到 /opt/kubernetes/bin 下面并更名方便使用
mv cfssl_linux-amd64 /opt/kubernetes/bin/cfssl
mv cfssljson_linux-amd64 /opt/kubernetes/bin/cfssljson_linux-amd64
mv cfssl-certinfo_linux-amd64 /opt/kubernetes/bin/cfssl-certinfo

# 将cfssl 文件同步到所有node节点上
scp /opt/kubernetes/bin/cfssl* 192.168.1.2:/opt/kubernetes/bin/
scp /opt/kubernetes/bin/cfssl* 192.168.1.3:/opt/kubernetes/bin/

 

2. 初始化cfssl

# 在master上 /usr/local/src/ssl 目录下操作

mkdir ssl && cd ssl
cfssl print-defaults config > config.json
cfssl print-defaults csr > csr.json

 

3. 创建用来生成 CA 文件的 JSON 配置文件

# 在master上 /usr/local/src/ssl 目录下操作

vim ca-config.json
----------------------------------
{
  "signing": {
    "default": {
      "expiry": "23780h"   # 过期时间,自定义
    },
    "profiles": {
      "kubernetes": {
        "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ],
        "expiry": "23780h"   # 同上
      }
    }
  }
}
----------------------------------

 

4. 创建用来生成 CA 证书签名请求(CSR)的 JSON 配置文件

# 在master上 /usr/local/src/ssl 目录下操作

vim ca-csr.json
----------------------------------
{
  "CN": "kubernetes",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",   # 都可以自定义,国家
      "ST": "ShenZhen",  # 地区
      "L": "ShenZhen",   # 城市
      "O": "k8s",    # 组织名
      "OU": "system"    # 组织单位
    }
  ]
}
----------------------------------

 

5. 生成CA证书(ca.pem)和密钥(ca-key.pem)

# 在master上 /usr/local/src/ssl 目录下操作

cfssl gencert -initca ca-csr.json | cfssljson -bare ca

ll ca*
-rw-r--r-- 1 root root  292 Jan 8 12:02 ca-config.json
-rw-r--r-- 1 root root 1009 Jan 8 12:05 ca.csr
-rw-r--r-- 1 root root  215 Jan 8 12:03 ca-csr.json
-rw------- 1 root root 1675 Jan 8 12:05 ca-key.pem
-rw-r--r-- 1 root root 1379 Jan 8 12:05 ca.pem

 

6. 分发证书

# 在master上 /usr/local/src/ssl 目录下操作

cp ca.csr ca.pem ca-key.pem ca-config.json /opt/kubernetes/ssl/

# 将证书分发到所有node节点上
scp ca.csr ca.pem ca-key.pem ca-config.json 192.168.1.2:/opt/kubernetes/ssl/ 
scp ca.csr ca.pem ca-key.pem ca-config.json 192.168.1.3:/opt/kubernetes/ssl/

 

ok,到此,CA证书已经制作完成。下面进行etcd集群的部署

 

etcd集群部署

1. 准备etcd软件包

etcd 官方github地址: https://github.com/etcd-io/etcd 。 etcd是独立于kubernetes集群的,但是又是kubernetes集群不可或缺的依赖,部署etcd集群,最少需要三台服务器,这里我们直接将etcd集群和kubernetes集群都部署在相同的三台服务器上,也就是192.168.1.1,192.168.1.2,192.168.1.3 。当然也可以部署在别的服务器上,并不影响,增加节点时,也不需要增加etcd集群的节点。这样部署,主要是节约资源而已,因为我这里的etcd集群只用于kubernetes集群,数据量有限,为了方便节省资源,则部署在一起。当然,实际上随便你,视具体情况而定。

# 在master上 /usr/local/src 目录下操作

wget https://github.com/etcd-io/etcd/releases/download/v3.2.25/etcd-v3.2.25-linux-amd64.tar.gz
tar -zxvf etcd-v3.2.25-linux-amd64.tar.gz
cd etcd-v3.2.25-linux-amd64

# 将二进制文件复制到 /opt/kubernetes/bin ,并分发到其他节点
cp etcd etcdctl /opt/kubernetes/bin/
scp scp etcd etcdctl 192.168.1.2:/opt/kubernetes/bin/
scp scp etcd etcdctl 192.168.1.3:/opt/kubernetes/bin/

 

2. 创建 etcd 证书签名请求

# 在master上 /usr/local/src/ssl 目录下操作

vim etcd-csr.json
--------------------------------------
{
  "CN": "etcd",
  "hosts": [
    "127.0.0.1",
"192.168.1.1",    # 这里需要将集群所有节点的ip写进去
"192.168.1.2",
"192.168.1.3"
  ],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",   # 同样,都可以自定义,下同
      "ST": "ShenZhen",
      "L": "ShenZhen",
      "O": "k8s",
      "OU": "system"
    }
  ]
}
---------------------------------------

 

3. 生成 etcd 证书和私钥

# 在master上 /usr/local/src/ssl 目录下操作

cfssl gencert -ca=/opt/kubernetes/ssl/ca.pem \
  -ca-key=/opt/kubernetes/ssl/ca-key.pem \
  -config=/opt/kubernetes/ssl/ca-config.json \
  -profile=kubernetes etcd-csr.json | cfssljson -bare etcd


ll etcd*
-rw-r--r-- 1 root root 1074 Jan 8 14:09 etcd.csr
-rw-r--r-- 1 root root  295 Jan 8 14:09 etcd-csr.json
-rw------- 1 root root 1679 Jan 8 14:09 etcd-key.pem
-rw-r--r-- 1 root root 1452 Jan 8 14:09 etcd.pem

 

4.将证书移动到/opt/kubernetes/ssl目录下

# 在master上 /usr/local/src/ssl 目录下操作
# 复制并分发到所有 etcd 集群节点上(因为我这里etcd集群节点跟k8s集群节点一致所以如下)
cp etcd*.pem /opt/kubernetes/ssl/
scp etcd*.pem 192.168.1.2:/opt/kubernetes/ssl/
scp etcd*.pem 192.168.1.3:/opt/kubernetes/ssl/

 

5. 设置ETCD配置文件

# 在master上操作
# 分发到每个etcd集群节点上,需要手动修改
vim /opt/kubernetes/cfg/etcd.conf
----------------------------------------------------------------------------
#[member]
ETCD_NAME="etcd-node1"   # 节点名称,每个节点都不同,节点名称和ip一一对应
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
#ETCD_SNAPSHOT_COUNTER="10000"
#ETCD_HEARTBEAT_INTERVAL="100"
#ETCD_ELECTION_TIMEOUT="1000"
ETCD_LISTEN_PEER_URLS="https://192.168.1.1:2380"   # 每个node都要改成自身本机ip,在192.168.1.2上就要改成192.168.1.2,下面类似
ETCD_LISTEN_CLIENT_URLS="https://192.168.1.1:2379,https://127.0.0.1:2379" # 每个node都要改成自身本机ip
#ETCD_MAX_SNAPSHOTS="5"
#ETCD_MAX_WALS="5"
#ETCD_CORS=""
#[cluster]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.1.1:2380"  每个node都要改成自身本机ip
# if you use different ETCD_NAME (e.g. test),
# set ETCD_INITIAL_CLUSTER value for this name, i.e. "test=http://..."
ETCD_INITIAL_CLUSTER="etcd-node1=https://192.168.1.1:2380,etcd-node2=https://192.168.1.2:2380,etcd-node3=https://192.168.1.3:2380"   # 这里要写完整个集群的节点名称和和ip,一一对应
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="k8s-etcd-cluster"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.1.1:2379"  # 每个node都要改成自身本机ip
#[security]
CLIENT_CERT_AUTH="true"
ETCD_CA_FILE="/opt/kubernetes/ssl/ca.pem"
ETCD_CERT_FILE="/opt/kubernetes/ssl/etcd.pem"
ETCD_KEY_FILE="/opt/kubernetes/ssl/etcd-key.pem"
PEER_CLIENT_CERT_AUTH="true"
ETCD_PEER_CA_FILE="/opt/kubernetes/ssl/ca.pem"
ETCD_PEER_CERT_FILE="/opt/kubernetes/ssl/etcd.pem"
ETCD_PEER_KEY_FILE="/opt/kubernetes/ssl/etcd-key.pem"
----------------------------------------------------------------------------

 

6.创建ETCD系统服务

# 在master上操作
# 什么都不用改,分发到别的节点上可直接使用
vim /etc/systemd/system/etcd.service
----------------------------------------------------------
[Unit]
Description=Etcd Server
After=network.target

[Service]
Type=simple
WorkingDirectory=/var/lib/etcd
EnvironmentFile=-/opt/kubernetes/cfg/etcd.conf
# set GOMAXPROCS to number of processors
ExecStart=/bin/bash -c "GOMAXPROCS=$(nproc) /opt/kubernetes/bin/etcd"
Type=notify

[Install]
WantedBy=multi-user.target
----------------------------------------------------------

 

7. 所有etcd集群节点上重载启动etcd集群

# 在master上操作

# 分发etcd配置文件和系统服务文件到所有 etcd节点上。
scp /opt/kubernetes/cfg/etcd.conf 192.168.1.2:/opt/kubernetes/cfg/   # 配置文件分发到别的节点,需要手动改一下,怎么修改见上面第5步
scp /opt/kubernetes/cfg/etcd.conf 192.168.1.3:/opt/kubernetes/cfg/
scp /etc/systemd/system/etcd.service 192.168.1.2:/etc/systemd/system/
scp /etc/systemd/system/etcd.service 192.168.1.3:/etc/systemd/system/

# 在所有 etcd 节点上启动etcd服务
mkdir /var/lib/etcd   # 配置文件中数据存放为止,需要手动创建文件夹
systemctl daemon-reload
systemctl enable etcd
systemctl start etcd

# 查看状态
systemctl status etcd

 

8. 验证集群

# 在master上操作
etcdctl --endpoints=https://192.168.1.1:2379 \
  --ca-file=/opt/kubernetes/ssl/ca.pem \
  --cert-file=/opt/kubernetes/ssl/etcd.pem \
  --key-file=/opt/kubernetes/ssl/etcd-key.pem cluster-health

输出如下:
member 4c62005dec42cd23 is healthy: got healthy result from https://192.168.1.1:2379
member 7a0dacac4b10af69 is healthy: got healthy result from https://192.168.1.2:2379
member 9b1a4796c252096d is healthy: got healthy result from https://192.168.1.3:2379
cluster is healthy

 

结束

    ok,到此,CA证书制作和etcd集群部署就完成了,下一篇,我们进行master节点的部署。 有什么问题或建议欢迎大家留言反馈

 

你可能感兴趣的:(Centos7系列)