陈奇网络工作室

组织kubernetesssl证书

云计算

前言

在kubernetes群集安装和配置期间,会使用各种证书来增强群集的安全性,但许多初学者都有漏洞。

前期手动部署集群时,想知道集群组件的协作机制,各种不通,报告了很多奇怪的错误,大多是证书配置错误造成的。

建议在报告错误时仔细查看主节点和调试服务节点的日志。 基本上有用的错误日志、k8s打印的错误日志、指示的错误方向是可信的。

为了不踩漏洞,个人对集群配置中使用的证书信息进行了简单的整理。 详细情况如下。

群集使用证书

ETCD:ca.PEM、server-key.pem、server.pem;

使用kube-apiserver:ca.PEM、server-key.pem和server.pem;

使用Ubelet:ca.PEM;

kube-proxy:ca.PEM、kube-proxy-key.pem、kube-proxy.pem;

使用kubeCTL:ca.PEM、admin-key.pem和admin.pem;

kube-controller-manager:ca-key.PEM,使用ca.pem

注意:

所有证书生成操作都可以在主节点的主机上执行,并且只需创建一次证书。 然后,将证书copy添加到新的附加节点。

根据每个服务使用的证书分别构成即可。

其他几个类证书文件

token.csv

该文件是用户描述文件,基本形式为Token、用户名、UID、用户组; 此文件在apiserver启动时加载到apiserver中。

然后,在集群内创建了该用户; 你可以通过RBAC给他许可

bootstrap.kubeconfig

此文件包含Token.csv中用户的token和apiserver CA证书。 首次启动kubelet时将加载此文件。

使用apiserver CA证书建立与apiserver的TLS通信,使用其中的用户Token作为身份id,像apiserver一样发起CSR请求

证书生成过程概述

cfssl的安装

CFSSL是CloudFlare的开源PKI/TLS工具。 CFSSL包括命令行工具和用于捆绑签名、验证和TLS证书的HTTP API服务。

用Go语言写。

CFSSL包括以下内容:

用于生成自定义TLS PKI的一组工具;

cfssl程序、cfssl命令行工具;

multirootca程序是一种可以使用多个签名密钥的证书颁发机构服务

mkbundle程序用于构建证书池

cfssljson程序从cfssl和multirootca程序获取JSON输出并将证书、密钥、CSR和bundle写入磁盘;

PKI利用数字证书和公钥加密技术提供受信任的网络身份。 证书通常是包含身份信息的文件,例如:

证书中所有组织的信息

公钥

证书颁发组织信息

证书颁发组织授予的权限,包括证书的有效期、适用的主机名和用途

使用证书颁发组织的私钥创建的数字签名

下载

wget https://pkg.cf SSL.org/r 1.2/cf SSL _ Linux-amd64

wget https://pkg.cf SSL.org/r 1.2/cfssljson _ Linux-amd64

wget https://pkg.cf SSL.org/r 1.2/cf SSL-certinfo _ Linux-amd64

安装

chmodxcfssl _ Linux-amd64 cfssljson _ Linux-amd64 cf SSL-certinfo _ Linux-amd64

mvcfssl _ Linux-amd64/usr/local/bin/cf SSL

mvcfssljson _ Linux-amd64/usr/local/bin/cfssljson

mvcfssl-certinfo _ Linux-amd64/usr/bin/cf SSL-certinfo

演示证书生成过程

创建server ca证书

cat EOF | tee ca-config.json

{

signing: {

default: {

expiry: 87600h

(,

配置文件: {

服务器: { :

expiry: 87600h、

usages: [

信号,

密钥加密,

服务器自动、

客户端自动

]

}

}

}

}

EOF

字段说明:

expiry : 87600h 10年

ca-config.json :可以定义多个profiles,分别指定不同的有效期、使用场景等参数; 签名证书时使用配置文件

signing :表示此证书可用于签名其他证书。生成的ca.pem证书的CA=TRUE;

server auth :表示客户端可以使用此CA验证服务器提供的证书

client auth :表示服务器可以使用该CA验证client提供的证书

cat EOF | tee ca-csr.json

{

cn :服务器、

key: {

algo: rsa,

size: 2048

(,

names: [

{

( c ) cn、

l :北井,

ST :弹珠、

O: k8s,

OU: System

}

]

}

EOF

字段说明:

CN:Common Name,kube-apiserver从证书中提取此字段作为请求的用户名( User Name )。 浏览器使用此字段验证网站是否合法。

o :组织,kube-apiserver从证书中提取此字段作为请求用户所属的组( Group );

生成CA证书和私钥

cfsslgencert-init caca-CSR.JSON|cfssljson-bare ca -

验证ca证书

k8s-ssl]# ls

ca-config.json

ca-csr.json

ca.csr

ca-key.pem

ca.pem

创建服务器证书

cat EOF | tee server-csr.json

{

cn :服务器、

hosts: [

10.254.0.1、

127.0.0.1、

172.20.101.157、

172.20.101.165、

172.20.101.164、

172.20.101.160、

172.20.101.166、

172.20.101.167、

冲浪运动员、

server.default,

server.default.svc,

server.default.svc.cluster,

server.default.SVC.cluster.local

]、

key: {

algo: rsa,

size: 2048

(,

names: [

{

( c ) cn、

l :北井,

ST :弹珠、

O: k8s,

OU: System

}

]

}

EOF

字段说明:

如果" hosts "字段不为空,则必须提供允许使用证书的IP或域名列表。 证书将继续用于etcd群集和kubernetes master群集。

上面分别指定了etcd集群。

172.20.101.157、

172.20.101.165、

172.20.101.164、

kubernetes master群集的主机IP :

172.20.101.157、

172.20.101.165、

172.20.101.164、

kubernetes node节点IP :

172.20.101.160、

172.20.101.166、

172.20.101.167、

服务群集范围网段和第一个IP

10.254.0.1、

也可以写物理节点的主机名。

此外,还应填写使用集群配置高可用性vip的IP地址。

生成kubernetes证书和私钥

cfsslgencert-ca=ca.PEM-ca-key=ca-key.PEM-config=ca-config.JSON-profile=server server-CSR.JSON |

验证

ll server*

server.csr

server-csr.json

server-key.pem

server.pem

创建密钥代理证书

cat EOF | tee kube-proxy-csr.json

{

CN: system:kube-proxy,

hosts: [],

key: {

algo: rsa,

size: 2048

(,

names: [

{

( c ) cn、

l :北井,

ST :弹珠、

O: k8s,

OU: System

}

]

}

EOF

字段说明:

将CN证书的Use指定为system:kube-proxy;

kube-apiserver的预定义RoleBinding system:node-proxier将User system:kube-proxy与Role system:node-proxier联系起来,该Role将调用

创建kube-proxy证书

cfsslgencert-ca=ca.PEM-ca-key=ca-key.PEM-config=ca-config.JSON-profile=server kube-proxy-CSR .

验证

kube-*

kube-proxy.csr

kube-proxy-csr.json

kube-proxy-key.pem

kube-proxy.pem

创建管理员证书

cat admin-csr.jsonEOF

{

CN: admin

key: {

algo: rsa,

size: 2048

(,

names: [

{

( c ) cn、

ST :弹珠、

l :北井,

O: system:masters

OU: System

}

]

}

EOF

字段说明:

o如果将此证书的组指定为system:masters,并且kubelet使用此证书访问kube-apiserver,则证书由证书CA签名,从而通过验证。

此外,证书用户组是预批准的system:masters,因此被授予访问所有API的权限。

生成管理员证书

cfsslgencert-ca=ca.PEM-ca-key=ca-key.PEM-config=ca-config.JSON-profile=server admin-CSR.JSON |

验证

ll admin*

admin.csr

admin-csr.json

admin-key.pem

admin.pem

csr srl清理

find.- name *.CSR-o-name *.SRL|xargs RM-f

证书验证:

使用opsnssl命令验证key的内容

OpenSSL x509-noout-text-in server.PEM

cfssl-certinfo -cert server.pem

可以用生成的key文件替换后面的pem来检查key的内容。

集群比对key信息

集群构建完成。 命令:在kubectlgetclusterrolebindingcluster-admin-o YAML中,clusterrolebindingcluster-admin的子项目的kind为Group,name

也就是说,system:masters Group的用户或者serviceAccount都具有集群管理的作用。 因此,在使用kubectl命令时,

拥有整个集群的管理权限。 可以在kubectlgetclusterrolebindingcluster-admin-o YAML中显示。

参考文档:

3359 blog.51cto.com/looking dream/2176846

3359 jimmysong.io/kubernetes-handbook/practice/create-TLS-and-secret-key.html

详情请访问云服务器、域名注册、虚拟主机的问题,请访问西部数码代理商官方网站: www.chenqinet.cn

相关推荐

后台-系统设置-扩展变量-手机广告位-内容页底部广告位3