在实际kubernetes应用场景中,集群内组件之间访问都是通过TLS双向认证安全访问,即https访问,所以在部署时,给kubernetes各个组件创建证书是必要的,这是因为没有https安全访问会导致集群间节点通信访问不安全,非法用户可以通过客户端操作,对集群资源非法操作,引起集群服务宕机。例如操作:etcd存储的数据,所以为集群开启https访问是必要的。
1. 自建私有CA证书
1.1 安装 cfssl 工具集
大多数情况下,kubernetes集群都是建立自己的私有网络里,比如公有云vpc区域,自建数据中心等等,由于k8sli所有相关组件都是需要TLS双向认证,合法证书机构大多都是提供ssl单向认证证书,所以必须自建CA根证书,并生成相应的公钥和私钥根证书,可以通过openssl或cfssl创建CA证书:
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 /usr/lcoal/bin/
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -P /usr/lcoal/bin/
cd /usr/lcoal/bin
mv cfssl_linux-amd64 cfssl
mv cfssljson_linux-amd64 cfssljson
mv cfssl-certinfo_linux-amd64 cfssl-certinfo
chmod +x * && ln -sf $SSL_BIN_PATH/bin/cfssl* /usr/local/bin/
1.2 创建根证书 (CA)
CA 证书是集群所有节点共享的,只需要创建一个 CA 证书,后续创建的所有证书都由它签名。
CA 配置文件用于配置根证书的使用场景 (profile) 和具体参数 (usage,过期时间、服务端认证、客户端认证、加密等),后续在签名其它证书时需要指定特定场景。
cat >$CA_DIR/ca-config.json<<EOF
{
"signing": {
"default": {
"expiry": "175200h"
},
"profiles": {
"kubernetes": {
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
],
"expiry": "175200h"
}
}
}
}
EOF