k8s 机器搭建之etcd

生成证书

k8s 集群内部通过https通信的,需要签发两个证书,一个给apiserver另一个给etcd。

由于是集群内部使用所以证书自己签发就可以,无需通过正规CA机构购买。证书生成工具有两种openssl  和 cfssl  ,这里采用的是cfssl  ,cfssl 是通过json 文件来生成证书的。

一、安装cfssl ,安装过程省略。

二、生成根CA证书

1、生成证书依据的配置文件
cat ca-config.json                   {
  "signing": {
    "default": {
      "expiry": "87600h"    
    },
    "profiles": {
      "www": {
         "expiry": "87600h",  #有效期
         "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ]
    }
  }
 }
}
2、用于生成根CA证书的请求文件cat ca-csr.json     
{
    "CN": "etcd CA",
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "Beijing",
            "ST": "Beijing"
        }
    ]
}3、生成ca 根证书
cfssl gencert -initca ca-csr.json | cfssljson -bare ca -产生 ca-key.pem  ca.pem

三、生成etcd 证书

1、制作证书的请求文件[1 cert]# cat server-csr.json 
{
    "CN": "etcd",
    "hosts": [
        "10.10.118.161",
        "10.10.118.164",
        "10.10.118.165"
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "BeiJing",
            "ST": "BeiJing"
        }
    ]
}2、根据根CA证书和秘钥及证书请求文件生成etcd 的证书及秘钥cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server

etcd 集群搭建

etcd 分布式机器,有主备节点之分,选举机制,为了高可用一般都是搭建集群,集群实例数必须是奇数,最小规模3 ,3个最多可以故障1个,5个最多可故障2个,7个最多可故障3个。

本地搭建用的是编译好的二进制文件以及配置[1 soft]# ls etcd
bin  cfg  ssl
 [ soft]# ls etcd.service  etcd.service


cat etcd/cfg/etcd.conf

#[Member]ETCD_NAME="etcd-1"                             #当前节点名字,名字不能重复ETCD_DATA_DIR="/var/lib/etcd/default.etcd"ETCD_LISTEN_PEER_URLS="https://10.10.118.161:2380"          #当前机器ipETCD_LISTEN_CLIENT_URLS="https://10.10.118.161:2379"
#[Clustering]ETCD_INITIAL_ADVERTISE_PEER_URLS="https://10.10.118.161:2380"ETCD_ADVERTISE_CLIENT_URLS="https://10.10.118.161:2379"ETCD_INITIAL_CLUSTER="etcd-1=https://10.10.118.161:2380,etcd-2=https://10.10.118.162:2380,etcd-3=https://10.10.118.163:2380"ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"            #集群之间通信所用tokenETCD_INITIAL_CLUSTER_STATE="new"                  #新建,如果已经存在,再加入的话就是exsiting


cat etcd.service

[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
EnvironmentFile=/data/etcd/cfg/etcd.conf
ExecStart=/data/etcd/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=/data/etcd/ssl/server.pem         --key-file=/data/etcd/ssl/server-key.pem         --peer-cert-file=/data/etcd/ssl/server.pem         --peer-key-file=/data/etcd/ssl/server-key.pem         --trusted-ca-file=/data/etcd/ssl/ca.pem         --peer-trusted-ca-file=/data/etcd/ssl/ca.pem
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

创建目录,移动文件(三个机器都重复下面操作,注意每个节点配置文件中Ip 更改,以及节点名字更改)

mkdir  /data/mv etcd /data/mv etcd.service  /usr/lib/systemd/system/etcd.servicesystemctl  daemon-reloadsystemctl start etcd              #启动第一个会卡主,因为在寻找其他节点,启动第二个后就会正常了把之前生成的秘钥证书复制到ssl 目录

检查机器是否正常

/data/etcd/bin/etcdctl --cert-file=/data/etcd/ssl/ca.pem --cert-file=/data/etcd/ssl/server.pem --key-file=/data/etcd/ssl/server-key.pem --endpoints="https://10.10.118.161:2379,https://10.10.118.164:2379,https://10.10.118.165:2379"  cluster-health

相关推荐