摘要:证书配置大全证书是网络通信的安全的要素,是现代网络通信的基本配置。包含一个命令行工具用于签名,验证并且捆绑证书的服务。
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-bootstrapbootstrap方式给节点颁发证书
在配置好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
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/32971.html
摘要:年初开始研究,至目前已发表近篇学习笔记。同时,他也是中国社区的活跃者,见证了中国社区的一路成长。经本人授权,从本周开始,中国将转载他的学习笔记,由浅入深地分享他在学习过程中的收获。节点包含的组件目前这三个组件需要部署在同一台机器上。 作者:宋净超 宋净超(Jimmy Song),TalkingData 容器技术负责人,微服务和云原生应用布道者。2017 年初开始研究 Kubernete...
摘要:任何知道私钥的人都可以充当颁发证书。此密钥允许在中创建任何类型的证书。使用认证中心的私钥和证书签名生成机构的证书和私钥。将在任何机器上工作。它将简化证书例程,但会增加安全风险。 资源 https://blog.cloudflare.com/i... 官方博客 特性 概念 安装 下载安装 wget https://pkg.cfssl.org/R1.2/cfssl_linux-a...
摘要:广告各版本离线安装包证书配置生产环境中给配置证书相当重要,如果没有证书,那么集群很容易被黑客利用而去挖矿什么的。细节问题非常多,一个端口,一个都不要填错,否则就会各种错误包括新加节点要清数据这些小细节问题。 广告 | kubernetes各版本离线安装包 etcd 证书配置 生产环境中给etcd配置证书相当重要,如果没有证书,那么k8s集群很容易被黑客利用而去挖矿什么的。做法非常简单...
摘要:广告各版本离线安装包证书配置生产环境中给配置证书相当重要,如果没有证书,那么集群很容易被黑客利用而去挖矿什么的。细节问题非常多,一个端口,一个都不要填错,否则就会各种错误包括新加节点要清数据这些小细节问题。 广告 | kubernetes各版本离线安装包 etcd 证书配置 生产环境中给etcd配置证书相当重要,如果没有证书,那么k8s集群很容易被黑客利用而去挖矿什么的。做法非常简单...
阅读 1763·2021-11-22 09:34
阅读 3062·2019-08-30 15:55
阅读 634·2019-08-30 15:53
阅读 2029·2019-08-30 15:52
阅读 2982·2019-08-29 18:32
阅读 1974·2019-08-29 17:15
阅读 2365·2019-08-29 13:14
阅读 3540·2019-08-28 18:05