内容简介:证书是网络通信的安全的要素,是现代网络通信的基本配置。各种远程调用的安全都离不开非对称加密提供的保障。cfssl 是 CloudFlare 开源的一款PKI/TLS工具。 CFSSL 包含一个命令行工具(cfssl, cfssljson)用于签名,验证并且捆绑TLS证书的 HTTP API 服务。 使用Go语言编写。与 OpenSSL 相比,cfssl 使用起来更简单。Github 地址:
Kubernetes 证书配置大全
证书是网络通信的安全的要素,是现代网络通信的基本配置。各种远程调用的安全都离不开非对称加密提供的保障。
下载证书工具
cfssl 是 CloudFlare 开源的一款PKI/TLS工具。 CFSSL 包含一个命令行工具(cfssl, cfssljson)用于签名,验证并且捆绑TLS证书的 HTTP API 服务。 使用 Go 语言编写。与 OpenSSL 相比,cfssl 使用起来更简单。
Github 地址: https://github.com/cloudflare...
官网地址: https://pkg.cfssl.org/
如果有golang环境,用go安装很简单
$ go get -u github.com/cloudflare/cfssl/cmd/cfssl $ go get -u github.com/cloudflare/cfssl/cmd/cfssljson
cfssljson 实用程序
大部分 cfssl 的输出为 JSON 格式。cfssljson 可以将输出拆分出来为独立的key,certificate,CSR 和 bundle文件。该 工具 需要指定参数, -f
指定输入文件,后接一个参数,指定生成的文件的基本名称。如果输入文件名是 -
(默认值),则 cfssljson 从标准输入读取。它以下列方式将 JSON 文件中的键映射到文件名:
- 如果指定了cert或certificate, 将生成basename.pem。
- 如果指定了key 或private_key,则将生成basename-key.pem。
- 如果指定了csr 或certificate_request,则将生成basename.csr。
- 如果 指定了bundle, 则将生成basename-bundle.pem。
-
如果指定了ocspResponse, 则将生成basename-response.der。
您可以传递-stdout输出编码内容到标准输出,而不是保存到文件。
验证证书有效期
cfssl certinfo -cert /etc/kubernetes/ssl/ca.pem |grep not_after cfssl certinfo -cert /etc/kubernetes/ssl/admin.pem |grep not_after cfssl certinfo -cert /etc/kubernetes/ssl/kubernetes.pem |grep not_after cfssl certinfo -cert /etc/kubernetes/ssl/kube-proxy.pem |grep not_after
生成新证书
证书分四类
- ca.pem - 私有CA根证书
- kubernetes.pem - 与 node 通信的,
- kube-proxy.pem - k8s 与容器通信的
- admin.pem - kubectl 管理用
生成证书请求
在生成证书过程中需要有四类文件
-
*.csr - 证书请求文件,base64格式,有
-----BEGIN CERTIFICATE REQUEST-----标识 -
*csr.json - 证书请求文件,是上面格式的再封装,便于传给
cfssl,json格式,大括号开始 -
*-key.pem - 私匙文件,base64格式,有
-----BEGIN RSA PRIVATE KEY-----标识 -
*.pem - 证书文件,base64格式,可以用
cfssl certinfo -cert 文件名查看有效期,有-----BEGIN CERTIFICATE-----标识
以上四种文件,前两类是中间产物,过后可以不保留,后两个需要配置到系统中 (通常是主从结点的 /etc/kubernetes/ssl
目录下)。
中间文件和生成的文件最好放在一起
cat > ca-csr.json << 'HERE'
{
"CN": "kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "BeiJing",
"L": "BeiJing",
"O": "k8s",
"OU": "System"
}
]
}
HERE
部分字段说明:
“CN”:Common Name,kube-apiserver 从证书中提取该字段作为请求的用户名 (User Name);浏览器使用该字段验证网站是否合法;
“O”:Organization,kube-apiserver 从证书中提取该字段作为请求用户所属的组 (Group);
其他几类证书请求类似
用证书请求生成证书
cfssl gencert -initca ca-csr.json | cfssljson -bare ca
配置证书,使其生效
需要把生成的证书复制到全部 master和 node 结点。
scp *.pem yourname@yournode:/etc/kubernetes/ssl/
在 master 结点上生成 ~/.kube/config
便于 kubectl
日常交互使用
KUBE_APISERVER="https://192.168.122.100:6443" #这里换成你的 master 结点 IP
kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubernetes/ssl/ca.pem \
--embed-certs=true \
--server=${KUBE_APISERVER}
kubectl config set-credentials admin \
--client-certificate=/etc/kubernetes/ssl/admin.pem \
--embed-certs=true \
--client-key=/etc/kubernetes/ssl/admin-key.pem
kubectl config set-context kubernetes \
--cluster=kubernetes \
--user=admin
kubectl config use-context kubernetes
ls ~/.kube/config
结点间通信用的证书配置
cd /etc/kubernetes
kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubernetes/ssl/ca.pem \
--embed-certs=true \
--server=${KUBE_APISERVER} \
--kubeconfig=bootstrap.kubeconfig
kubectl config set-credentials kubelet-bootstrap \
--token=${BOOTSTRAP_TOKEN} \
--kubeconfig=bootstrap.kubeconfig
kubectl config set-context default \
--cluster=kubernetes \
--user=kubelet-bootstrap \
--kubeconfig=bootstrap.kubeconfig
kubectl config use-context default --kubeconfig=bootstrap.kubeconfig
kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubernetes/ssl/ca.pem \
--embed-certs=true \
--server=${KUBE_APISERVER} \
--kubeconfig=kube-proxy.kubeconfig
kubectl config set-credentials kube-proxy \
--client-certificate=/etc/kubernetes/ssl/kube-proxy.pem \
--client-key=/etc/kubernetes/ssl/kube-proxy-key.pem \
--embed-certs=true \
--kubeconfig=kube-proxy.kubeconfig
kubectl config set-context default \
--cluster=kubernetes \
--user=kube-proxy \
--kubeconfig=kube-proxy.kubeconfig
kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig
kubectl create clusterrolebinding kubelet-bootstrap \
--clusterrole=system:node-bootstrapper \
--user=kubelet-bootstrap
bootstrap方式给节点颁发证书
在配置好 kubelet-bootstrap.kubeconfig
后,重启结点,结点会向master申请证书。
master结点上运行
kubectl get certificatesigningrequests
会发现以下类似的输出
NAME AGE REQUESTOR CONDITION node-csr-dAxCUJNZ4 22m kubelet-bootstrap Pending
通过以下命令,授权颁发给节点证书
kubectl certificate approve node-csr-dAxCUJNZ4
通过后正常后会输出
certificatesigningrequest "node-csr-dAxCUJNZ4" approved
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 生成根证书CA及签发子证书及配置站点实践
- Kubernetes 证书配置
- IIS 配置证书
- Nginx 配置 Https 免费证书访问
- SSL证书&Nginx 配置最佳实践
- iOS配置开发者证书流程整理
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Is Parallel Programming Hard, And, If So, What Can You Do About
Paul E. McKenney
The purpose of this book is to help you understand how to program shared-memory parallel machines without risking your sanity.1 By describing the algorithms and designs that have worked well in the pa......一起来看看 《Is Parallel Programming Hard, And, If So, What Can You Do About 》 这本书的介绍吧!