kubernetes搭建 一、基础环境和证书

一、基本环境

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

猜你喜欢

转载自blog.csdn.net/qq_41475058/article/details/88802602