kubernetes ssl证书梳理

发布时间:2024-04-21 点击:84
云计算
前言
kubernetes 集群安装配置过程中,会使用各种证书,目的是为了加强集群安全性,但是会坑很多入门新手. 前期如果手动部署集群, 想了解集群组件配合工作原理,各种不通,报很多奇葩的错,很多是证书配置错误导致的。 推荐报错时多看master节点和调试服务节点的日志. 基本都能发现有用的错误日志,k8s打印的错误日志,指引的错误方向还是靠谱的. 为了少踩坑,个人简单梳理了一下集群配置过程中使用的证书信息,详细如下:集群使用证书
etcd: 使用 ca.pem、server-key.pem、server.pem;kube-apiserver: 使用 ca.pem、server-key.pem、server.pem;kubelet: 使用 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注意:
证书生成操作都可以在master节点主机上执行,证书只需要创建一次即可。然后将证书copy到新添加节点,
根据不同服务使用的证书的不同单独配置即可。
其它几个类证书文件
token.csv
该文件为一个用户的描述文件,基本格式为 token,用户名,uid,用户组;这个文件在 apiserver 启动时被 apiserver 加载, 然后就相当于在集群内创建了一个这个用户;接下来就可以用 rbac 给他授权bootstrap.kubeconfig
该文件中内置了 token.csv 中用户的 token,以及 apiserver ca 证书;kubelet 首次启动会加载此文件, 使用 apiserver ca 证书建立与 apiserver 的 tls 通讯,使用其中的用户 token 作为身份标识像 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.cfssl.org/r1.2/cfssl_linux-amd64wget https://pkg.cfssl.org/r1.2/cfssljson_linux-amd64wget https://pkg.cfssl.org/r1.2/cfssl-certinfo_linux-amd64安装
chmod x cfssl_linux-amd64 cfssljson_linux-amd64 cfssl-certinfo_linux-amd64mv cfssl_linux-amd64 /usr/local/bin/cfsslmv cfssljson_linux-amd64 /usr/local/bin/cfssljsonmv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo证书生成过程演示
制作server ca证书
cat << eof | tee ca-config.json{ signing: { default: { expiry: 87600h }, profiles: { server: { expiry: 87600h, usages: [ signing, key encipherment, server auth, client auth ] } } }}eof字段说明:expiry : 87600h 10 年ca-config.json:可以定义多个 profiles,分别指定不同的过期时间、使用场景等参数;后续在签名证书时使用某个 profile;signing:表示该证书可用于签名其它证书;生成的 ca.pem 证书中 ca=true;server auth:表示client可以用该 ca 对server提供的证书进行验证;client auth:表示server可以用该ca对client提供的证书进行验证;cat << eof | tee ca-csr.json{ cn: server, key: { algo: rsa, size: 2048 }, names: [ { c: cn, l: beijing, st: beijing, o: k8s, ou: system } ]}eof字段说明:cn:common name,kube-apiserver 从证书中提取该字段作为请求的用户名 (user name);浏览器使用该字段验证网站是否合法;o:organization,kube-apiserver 从证书中提取该字段作为请求用户所属的组 (group);生成ca证书和私钥
cfssl gencert -initca ca-csr.json | cfssljson -bare ca -验证ca 证书
k8s-ssl]# lsca-config.jsonca-csr.jsonca.csrca-key.pemca.pem制作server证书
cat << eof | tee server-csr.json{ cn: server, 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, server.default, server.default.svc, server.default.svc.cluster, server.default.svc.cluster.local ], key: { algo: rsa, size: 2048 }, names: [ { c: cn, l: beijing, st: beijing, 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,service-cluster-ip-range 网段和第一个ip, 10.254.0.1,也可以写物理节点的主机名。另外集群配置高可用使用vip的ip地址也填上。生成 kubernetes 证书和私钥
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=server server-csr.json | cfssljs

注册域名需要本机ip吗
刚才帮备案中心用户充了元因系统问题填写不上域名
电脑打开APP Store一直无法连接的解决方法
如何查域名在哪里注册的?查询域名注册信息有什么方法?
千万级域名vip.com被海外同行盯上!唯品会仲裁赢得毫不费力
云盘服务器收费标准
有云服务器还需要买空间吗
自带域名无法访问-域名及账户问题