一、基本环境
k8s-master | 10.0.0.101 |
---|---|
k8s-node1 | 10.0.0.102 |
k8s-node2 | 10.0.0.103 |
glusterfs-node1 | 10.0.0.104 |
glusterfs-node2 | 10.0.0.105 |
registry | 10.0.0.106 |
nfs | 10.0.0.31 |
在各个机器上修改一下yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache
systemctl stop firewalld & systemctl disable firewalld
添加阿里云的Docker仓库:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache
关闭swap,在安装K8s集群时,Linux的Swap内存交换机制是一定要关闭的,否则会因为内存交换而影响性能以及稳定性,编辑 /etc/fastab,注释掉包含swap的那一行,重启后可永久关闭。
[root@k8s-master-101 ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed Sep 19 08:19:17 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=ca8ea0be-c2bc-46a0-9aa1-fad6566d8e09 / xfs defaults 0 0
UUID=26cfac22-eb00-4c43-bb88-89f2818aa569 /boot xfs defaults 0 0
#UUID=cef36fc7-b4e6-46d0-ae13-7eaafb2d7fbf swap swap defaults
然后top查看
[root@k8s-master-101 ~]# top
top - 18:02:41 up 2:47, 1 user, load average: 0.15, 0.23, 0.28
Tasks: 233 total, 1 running, 232 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.8 us, 2.5 sy, 0.0 ni, 96.4 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
KiB Mem : 3861512 total, 1797128 free, 872572 used, 1191812 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 2451592 avail Mem
安装最新版Docker:
yum install docker-ce -y
[root@k8s-master-101 ~]# docker --version
Docker version 18.09.3, build 774a1f4
systemctl start docker
systemctl enable docker
二、证书
创建生成证书的目录,下载相关工具
mkdir /root/ssl
cd /root/ssl
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 #用于生成证书
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 #用于导入json数据
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 #用于查看证书信息
chmod +x cfssl-certinfo_linux-amd64 cfssljson_linux-amd64 cfssl_linux-amd64 #添加执行权限
#移动到/usr/local/bin
mv cfssl_linux-amd64 /usr/local/bin/cfssl
mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
mv cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo
可以创建模板文件然后修改
cfssl print-defaults config > config.json #证书模板文件
cfssl print-defaults csr > csr.json #请求颁发证书的一个模板文件
组件及使用的证书
组件 | 使用的证书 |
---|---|
etcd | ca.pem server.pem server-key.pem |
kube-apiserver | ca.pem server.pem server-key.pem |
kubelet | ca.pem ca-key.pem |
kube.proxy | ca.pem kube-proxy.pem kube-proxy-key.pem |
kubectl | ca.pem admin.pem admin-key.pem |
flannel | ca.pem server.pem server-key.pem |
新建CA配置文件
[root@k8s-master-101 ssl]# vim ca-config.json
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"kubernetes": {
"expiry": "87600h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}
}
字段说明
ca-config.json:可以定义多个 profiles,分别指定不同的过期时间、使用场景等参数;后续在签名证书时使用某个 profile;
signing:表示该证书可用于签名其它证书;生成的 ca.pem 证书中 CA=TRUE;
server auth:表示client可以用该 CA 对server提供的证书进行验证;
client auth:表示server可以用该CA对client提供的证书进行验证;
新建CA证书签发请求文件
[root@k8s-master-101 ssl]# vim ca-csr.json
{
"CN": "kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "Shenzhen",
"ST": "Guangzhou",
"O": "k8s",
"OU": "System"
}
]
}
生成CA证书和私钥 这一步后将生成ca-key.pem ca.pem ca-csr这三个文件
cfssl gencert -initca ca-csr.json | cfssljson -bare ca –
[root@k8s-master-101 ssl]# ls ca*
ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem
新建server证书签发请求文件,这里的10.10.10.1是后面service分配的地址段,一定要指定,根据自己的环境,否则后面service无法通信。
这个server证书是后面的master的API和etcd集群使用的,这里如果严谨一点的话应该分开做证书的,再做一个etcd的证书,不过放一起好像也没什么问题就是了。如果分开做的话,在etcd的证书里指定master节点和node节点的IP地址,在api的证书里指定127.0.0.1,以及master节点地址还有service分配的地址段。
[root@k8s-master-101 ssl]# vim server-csr.json
{
"CN": "kubernetes",
"hosts": [
"127.0.0.1",
"10.10.10.1",
"10.0.0.101",
"10.0.0.102",
"10.0.0.103",
"kubernetes",
"kubernetes.default",
"kubernetes.default.svc",
"kubernetes.default.svc.cluster",
"kubernetes.default.svc.cluster.local"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "Shenzhen",
"ST": "Guangzhou",
"O": "k8s",
"OU": "System"
}
]
生成server证书和私钥,这一步后生成了server-key.pem 和server.pem
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes server-csr.json | cfssljson -bare server
[root@k8s-master-101 ssl]# ls server*
server.csr server-csr.json server-key.pem server.pem
新建admin证书签发请求文件
[root@k8s-master-101 ssl]# vim admin-csr.json
{
"CN": "admin",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "Shenzhen",
"ST": "Guangzhou",
"O": "system:masters",
"OU": "System"
}
]
}
生成admin证书和私钥,这一步后生成了admin-key.pem和admin.pem两个文件
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin
[root@k8s-master-101 ssl]# ls admin*
admin.csr admin-csr.json admin-key.pem admin.pem
新建kube-proxy证书签发请求文件
[root@k8s-master-101 ssl]# cat kube-proxy-csr.json
{
"CN": "system:kube-proxy",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "Shenzhen",
"ST": "Guangzhou",
"O": "k8s",
"OU": "System"
}
]
}
生成kube-proxy证书和私钥,这一步后生成了kube-proxy-key.pem 和kube-proxy.pem
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy
[root@k8s-master-101 ssl]# ls kube-proxy*
kube-proxy.csr kube-proxy-csr.json kube-proxy-key.pem kube-proxy.pem
证书生成完了,查看一下现在有这些文件
[root@k8s-master-101 ssl]# ll
总用量 68
-rw-r--r--. 1 root root 1013 3月 8 00:23 admin.csr
-rw-r--r--. 1 root root 232 3月 8 00:22 admin-csr.json
-rw-------. 1 root root 1675 3月 8 00:23 admin-key.pem
-rw-r--r--. 1 root root 1407 3月 8 00:23 admin.pem
-rw-r--r--. 1 root root 294 3月 8 00:18 ca-config.json
-rw-r--r--. 1 root root 1005 3月 8 00:19 ca.csr
-rw-r--r--. 1 root root 267 3月 8 00:18 ca-csr.json
-rw-------. 1 root root 1679 3月 8 00:19 ca-key.pem
-rw-r--r--. 1 root root 1367 3月 8 00:19 ca.pem
-rw-r--r--. 1 root root 1013 3月 8 00:23 kube-proxy.csr
-rw-r--r--. 1 root root 233 3月 8 00:23 kube-proxy-csr.json
-rw-------. 1 root root 1679 3月 8 00:23 kube-proxy-key.pem
-rw-r--r--. 1 root root 1411 3月 8 00:23 kube-proxy.pem
-rw-r--r--. 1 root root 1265 3月 8 00:22 server.csr
-rw-r--r--. 1 root root 553 3月 8 00:22 server-csr.json
-rw-------. 1 root root 1679 3月 8 00:22 server-key.pem
-rw-r--r--. 1 root root 1635 3月 8 00:22 server.pem
pem结尾的为所需要的证书和私钥
[root@k8s-master-101 ssl]# ll *pem
-rw-------. 1 root root 1675 3月 8 00:23 admin-key.pem
-rw-r--r--. 1 root root 1407 3月 8 00:23 admin.pem
-rw-------. 1 root root 1679 3月 8 00:19 ca-key.pem
-rw-r--r--. 1 root root 1367 3月 8 00:19 ca.pem
-rw-------. 1 root root 1679 3月 8 00:23 kube-proxy-key.pem
-rw-r--r--. 1 root root 1411 3月 8 00:23 kube-proxy.pem
-rw-------. 1 root root 1679 3月 8 00:22 server-key.pem
-rw-r--r--. 1 root root 1635 3月 8 00:22 server.pem