购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.4 生成证书

和Kubeadm安装方式不同的是,二进制安装方式需要自己生成所有的证书,包括Etcd、Kubernetes组件证书。由于证书是和IP地址和域名进行绑定的,因此在生成证书时,需要注意IP地址等相关配置的修改。

本示例采用CFSSL工具生成证书,读者也可以使用OpenSSL等工具生成。由于生成证书只需要在Master01进行,因此只需要在Master01节点生成下载CFSSL工具即可。

Master01下载生成证书工具:

2.4.1 Etcd证书

首先生成Etcd的证书,由于Etcd是3个节点组成的集群,因此证书需要包含每个节点的IP地址。

所有Master节点创建Etcd证书目录:

     # mkdir /etc/etcd/ssl -p

所有节点创建Kubernetes相关目录,Kubernetes所用的配置文件会放置在/etc/kubernetes下,证书文件会放置在/etc/kubernetes/pki下:

     # mkdir -p /etc/kubernetes/pki

接下来在Master01节点生成Etcd证书,生成证书的CSR(证书签名请求文件,配置了一些域名、公司、单位)文件已放置在前文clone的k8s-ha-install:

将证书复制到其他Master节点:

2.4.2 K8s组件证书

相较于Etcd的证书,Kubernetes的证书更为复杂,因为Kubernetes要求组件之间双向加密通信,所以生成Kubernetes的组件会涉及每个组件之间通信的证书,同时也会包含一些聚合证书。

首先在Master01节点生成Kubernetes的根证书,之后其他证书都是根据该证书来生成的:

     # cd /root/k8s-ha-install/pki
     
     # cfssl gencert -initca ca-csr.json | cfssljson -bare /etc/kubernetes/pki/ca

接下来生成kube-apiserver的证书,需要注意更改如下配置:

生成聚合证书,用于扩展的CRD请求验证,比如metrics-server的metrics.k8s.io和apiserver进行通信时就会使用到该证书:

同样的方式生成controller-manage的证书,使用的还是最初的CA文件:

由于Controller Manager需要和APIServer进行通信,此时可以使用kubeconfig配置链接APIServer的信息,比如需要用到的证书、APIServer的地址等。

接下来使用Kubectl生成一个Controller Manager所用的kubeconfig。需要注意更改的位置如下:

首先设置一个集群项,即配置一个集群到kubeconfig:

为该kubeconfig文件设置一个上下文环境:

为该kubeconfig设置一个用户项:

使用system:kube-controller-manager@kubernetes环境作为默认环境:

同样的逻辑生成scheduler的证书,参数不再解释:

同样的方式生成scheduler的kubeconfig文件。注意,如果不是高可用集群,把master的地址改为10.0.0.236:16443,把apiserver的端口改为16443,默认是6443。

至此,Kubernetes Master节点的组件证书已经配置完成。接下来需要生成一个Kubectl连接API Server的kubeconfig。

使用Kubeadm安装的Kubernetes集群,Kubectl连接API Server用到的kubeconfig文件为/etc/kubernetes/admin.conf,由Kubeadm自动生成。使用二进制安装方式需要手动生成,生成步骤与上述方式类似。

首先生成管理员用户的证书文件:

接下来生成kubeconfig文件。注意,如果不是高可用集群,把Master的地址改为10.0.0.236:16443,把API Server的端口改为16443,默认是6443:

生成用于创建ServiceAccount Secret Token和验证Token的密钥对:

     # openssl genrsa -out /etc/kubernetes/pki/sa.key 2048
     # openssl rsa -in /etc/kubernetes/pki/sa.key -pubout -out /etc/kubernetes/pki/sa.pub

所有的证书签发完成后,需要将证书发送至其他节点: CzmaQLT/axNUlOGq7rgzT5/oYmNBh4WnOhHzP8KbqMdpRfY8HJaFdD3B/wBuilsI

     # for NODE in k8s-master02 k8s-master03; do
     for FILE in $(ls /etc/kubernetes/pki | grep -v etcd); do
     scp /etc/kubernetes/pki/${FILE} $NODE:/etc/kubernetes/pki/${FILE};
     done;
     for FILE in admin.kubeconfig controller-manager.kubeconfig scheduler.kubeconfig; do
     scp /etc/kubernetes/${FILE} $NODE:/etc/kubernetes/${FILE};
     done;
     done
点击中间区域
呼出菜单
上一章
目录
下一章
×

打开