k8s 证书配置大全

栏目: 编程工具 · 发布时间: 5年前

内容简介:证书是网络通信的安全的要素,是现代网络通信的基本配置。各种远程调用的安全都离不开非对称加密提供的保障。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

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法:C语言实现

算法:C语言实现

塞奇威克 / 机械工业出版社 / 2006-9 / 69.00元

本书是Sedgewick彻底修订和重写的C算法系列的第一本。全书分为四部分,共16章,第一部分“基础知识”(第1-2章)介绍基本算法分析原理。第二部分“数据结构”(第3-5章)讲解算法分析中必须掌握的数据结构知识,主要包括基本数据结构,抽象数据结构,递归和树。一起来看看 《算法:C语言实现》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码