192.168.75.130 Master 进行
请先阅读《手把手二进制安装K8S教程:第一章《搭建私有docker镜像仓库》》
Master服务器下载最新版本的K8S二进制文件
部署master节点
mkdir /app
cd /app
自行下载完整kubernetes-server-linux-amd64.tar.gz
wget https://dl.k8s.io/v1.11.0/kubernetes-server-linux-amd64.tar.gz #如果不能下载请自行百度或者下载我的
tar -xzvf kubernetes-server-linux-amd64.tar.gz
cd kubernetes
tar -xzvf kubernetes-src.tar.gz
sudo cp -r server/bin/{kube-apiserver,kube-controller-manager,kube-scheduler,kubectl,kube-proxy,kubelet} /usr/local/bin/
如果上述步骤无法下载,可以选择通过CSDN下载我上传的资源,由于CSDN大小限制,需要分包下载
分包下载3个资源
kubernetes-server-linux-amd64.tar.gz
kubernetes_server_bin1.tar.gz
kubernetes_server_bin2.tar.gz
tar -xzvf kubernetes-server-linux-amd64.tar.gz
tar -xzf kubernetes_server_bin1.tar.gz -C kubernetes/server/bin/
tar -xzf kubernetes_server_bin2.tar.gz -C kubernetes/server/bin/
cd kubernetes
tar -xzvf kubernetes-src.tar.gz
sudo cp -r server/bin/{kube-apiserver,kube-controller-manager,kube-scheduler,kubectl,kube-proxy,kubelet} /usr/local/bin/
创建TLS证书和秘钥
安装 CFSSL
mkdir -p /app/kubernetes/ssl
cd /app/
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*
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
export PATH=/usr/local/bin:$PATH
创建 CA 配置文件
cd /app/cfssl
cfssl print-defaults config > config.json
cfssl print-defaults csr > csr.json
#根据config.json文件的格式创建如下的ca-config.json文件
过期时间设置成了 87600h
cat > ca-config.json <
字段说明
ca-config.json:可以定义多个 profiles,分别指定不同的过期时间、使用场景等参数;后续在签名证书时使用某个 profile;
signing:表示该证书可用于签名其它证书;生成的 ca.pem 证书中 CA=TRUE;
server auth:表示client可以用该 CA 对server提供的证书进行验证;
client auth:表示server可以用该CA对client提供的证书进行验证;
3.2、创建 CA 证书签名请求
cat > ca-csr.json <
字段说明
“CN”:Common Name,kube-apiserver 从证书中提取该字段作为请求的用户名 (User Name);浏览器使用该字段验证网站是否合法;
“O”:Organization,kube-apiserver 从证书中提取该字段作为请求用户所属的组 (Group);
3.3、生成 CA 证书和私钥
cfssl gencert -initca ca-csr.json | cfssljson -bare ca
ls ca*
ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem
3.4、创建 kubernetes 证书
需要替换"hosts": [里面的几个IP地址
cat > kubernetes-csr.json <
字段说明
如果 hosts 字段不为空则需要指定授权使用该证书的 IP 或域名列表,由于该证书后续被 etcd 集群和 kubernetes master 集群使用,所以上面分别指定了 etcd 集群、kubernetes master 集群的主机 IP 和 kubernetes 服务的服务 IP(一般是 kube-apiserver 指定的 service-cluster-ip-range 网段的第一个IP,如 10.254.0.1)。
3.5、生成 kubernetes 证书和私钥
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes
#这里会遇到一个[WARNING]警告,可以忽略。大概意思是这个证书不适用于网站。
#[WARNING] This certificate lacks a “hosts” field. This makes it unsuitable for
#websites. For more information see the Baseline Requirements for the Issuance and Management
#of Publicly-Trusted Certificates, v.1.1.6, from the CA/Browser Forum (https://cabforum.org);
#specifically, section 10.2.3 (“Information Requirements”).
ls kubernetes*
kubernetes.csr kubernetes-csr.json kubernetes-key.pem kubernetes.pem
3.6、创建 admin 证书
cat > admin-csr.json <
字段说明
后续 kube-apiserver 使用 RBAC 对客户端(如 kubelet、kube-proxy、Pod)请求进行授权;
kube-apiserver 预定义了一些 RBAC 使用的 RoleBindings,如 cluster-admin 将 Group system:masters 与 Role cluster-admin 绑定,该 Role 授予了调用kube-apiserver 的所有 API的权限;
O 指定该证书的 Group 为 system:masters,kubelet 使用该证书访问 kube-apiserver 时 ,由于证书被 CA 签名,所以认证通过,同时由于证书用户组为经过预授权的 system:masters,所以被授予访问所有 API 的权限;
注意:这个admin 证书,是将来生成管理员用的kube config 配置文件用的,现在我们一般建议使用RBAC 来对kubernetes 进行角色权限控制, kubernetes 将证书中的CN 字段 作为User, O 字段作为 Group(具体参考 Kubernetes中的用户与身份认证授权中 X509 Client Certs 一段)。
3.7、生成 admin 证书和私钥
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin
ls admin*
admin.csr admin-csr.json admin-key.pem admin.pem
3.8、创建 kube-proxy 证书
cat > kube-proxy-csr.json <
字段说明
CN 指定该证书的 User 为 system:kube-proxy;
kube-apiserver 预定义的 RoleBinding system:node-proxier 将User system:kube-proxy 与 Role system:node-proxier 绑定,该 Role 授予了调用 kube-apiserver Proxy 相关 API 的权限;
3.9、生成 kube-proxy 客户端证书和私钥
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy
ls kube-proxy*
kube-proxy.csr kube-proxy-csr.json kube-proxy-key.pem kube-proxy.pem
3.10、校验证书
cfssl-certinfo -cert kubernetes.pem
确认 Issuer 字段的内容和 ca-csr.json 一致;
确认 Subject 字段的内容和 kubernetes-csr.json 一致;
确认 X509v3 Subject Alternative Name 字段的内容和 kubernetes-csr.json 一致;
确认 X509v3 Key Usage、Extended Key Usage 字段的内容和 ca-config.json 中 kubernetes profile 一致;
复制证书
cp -rp /app/cfssl/* /app/kubernetes/ssl/
3.11、将证书和文件同步给Node
scp -rp /app/* 192.168.75.131:/app/
scp -rp /app/* 192.168.75.132:/app/
以上参考文档:
https://jimmysong.io/kubernetes-handbook/practice/create-tls-and-secret-key.html
作者留言:本人也是刚开始接触K8S,如果网友通过本人的教程如果有什么问题欢迎留言,一起排错,互相学习,共同进步!