资讯专栏INFORMATION COLUMN

k8s 证书配置大全

lentrue / 2101人阅读

摘要:证书配置大全证书是网络通信的安全的要素,是现代网络通信的基本配置。包含一个命令行工具用于签名,验证并且捆绑证书的服务。

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/32971.html

相关文章

  • K8S学习笔记 | 如何部署 Kubernetes master 节点

    摘要:年初开始研究,至目前已发表近篇学习笔记。同时,他也是中国社区的活跃者,见证了中国社区的一路成长。经本人授权,从本周开始,中国将转载他的学习笔记,由浅入深地分享他在学习过程中的收获。节点包含的组件目前这三个组件需要部署在同一台机器上。 作者:宋净超 宋净超(Jimmy Song),TalkingData 容器技术负责人,微服务和云原生应用布道者。2017 年初开始研究 Kubernete...

    ernest.wang 评论0 收藏0
  • 证书签名工具 CFSSL

    摘要:任何知道私钥的人都可以充当颁发证书。此密钥允许在中创建任何类型的证书。使用认证中心的私钥和证书签名生成机构的证书和私钥。将在任何机器上工作。它将简化证书例程,但会增加安全风险。 资源 https://blog.cloudflare.com/i... 官方博客 特性 概念 安装 下载安装 wget https://pkg.cfssl.org/R1.2/cfssl_linux-a...

    沈俭 评论0 收藏0
  • etcd管理,证书配置,扩展,迁移恢复,带证书扩展节点

    摘要:广告各版本离线安装包证书配置生产环境中给配置证书相当重要,如果没有证书,那么集群很容易被黑客利用而去挖矿什么的。细节问题非常多,一个端口,一个都不要填错,否则就会各种错误包括新加节点要清数据这些小细节问题。 广告 | kubernetes各版本离线安装包 etcd 证书配置 生产环境中给etcd配置证书相当重要,如果没有证书,那么k8s集群很容易被黑客利用而去挖矿什么的。做法非常简单...

    张汉庆 评论0 收藏0
  • etcd管理,证书配置,扩展,迁移恢复,带证书扩展节点

    摘要:广告各版本离线安装包证书配置生产环境中给配置证书相当重要,如果没有证书,那么集群很容易被黑客利用而去挖矿什么的。细节问题非常多,一个端口,一个都不要填错,否则就会各种错误包括新加节点要清数据这些小细节问题。 广告 | kubernetes各版本离线安装包 etcd 证书配置 生产环境中给etcd配置证书相当重要,如果没有证书,那么k8s集群很容易被黑客利用而去挖矿什么的。做法非常简单...

    mengbo 评论0 收藏0

发表评论

0条评论

lentrue

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<