kubernetes中CFSSL如何构建本地CA-古蔺大橙子建站
RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:8:30-17:00
你可能遇到了下面的问题
关闭右侧工具栏

新闻中心

这里有您想知道的互联网营销解决方案
kubernetes中CFSSL如何构建本地CA

这篇文章给大家分享的是有关kubernetes中CFSSL如何构建本地CA的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

创新互联建站长期为上千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为镇海企业提供专业的成都做网站、成都网站设计,镇海网站改版等技术服务。拥有10余年丰富建站经验和众多成功案例,为您定制开发。

一:前言

SSL:Secure Sockets Layer,标准化后叫"TLS",http协议默认情况下是不加密内容的,这样就很可能在内容传播的时候被别人监听到,对于安全性要求较高的场合,必须要加密,https就是带加密的http协议。
消息-->[公钥]-->加密后的信息-->[私钥]-->消息

kubernetes中CFSSL如何构建本地CA
kubernetes中CFSSL如何构建本地CA

证书所有组织的信息

  • 公钥

  • 证书颁发组织的信息

  • 证书颁发组织授予的权限,如证书有效期、适用的主机名、用途等

  • 使用证书颁发组织私钥创建的数字签名

每个公钥都有一个对应的私钥,后者在证书所有者的管控之下,可以用于对数据进行数字签名,验证器可以使用证书中的公钥对数据进行验证。如果证书本身包含第三方认证中心的数字签名,那么只要验证器信任该第三方,就可以确保证书是合法的。有时候,证书是由中介认证中心签名,而中介认证中心的证书又是由不同的认证中心签名。在这种情况下,证书验证器会沿着这条链一直找到它信任的证书。对于认证中心而言,信任链模型非常有用,它允许我们将根证书的私钥离线存储,只为中介证书签名。


二:CFSSL构建本地CA

1.创建自己的认证中心
CFSSL具有运行一个认证中心所需的全部功能。虽然CFSSL是为运行内部CA而创建,但它足够健壮,可以用于公开的受信任CA。
运行认证中心需要一个CA证书(ca.pem)和相应的私钥(ca-key.pem)。后者是极其敏感的数据。任何知道私钥的人都可以充当CA颁发证书。因此,私钥的保护至关重要。

2. 生成CA证书和私钥

创建ca-csr.json文件

点击(此处)折叠或打开

  1. {

  2.     "CN": "kubernetes",

  3.     "key": {

  4.         "algo": "rsa",

  5.         "size": 2048

  6.     },

  7.     "names": [

  8.         {

  9.             "C": "CN",

  10.             "L": "BeiJing",

  11.             "ST": "BeiJing",

  12.             "O": "k8s",

  13.             "OU": "System"

  14.         }

  15.     ]

  16. }


”CN“:Common Name,kube-apiserver 从证书中提取该字段作为请求的?户名 (User Name);浏览器使用该字段验证网站是否合法
"O":Organization ,kube-apiserver 从证书中提取该字段作为请求?户所属的组 (Group);

执行命令 cfssl gencert -initca ca-csr.json | cfssljson -bare ca

生成: ca.pem     ca-key.pem   ca.csr(证书签名请求,用于交叉签名或重新签名)

3.配置证书生成策略

配置证书生成策略,让CA软件知道颁发什么样的证书.创建ca-config.json

点击(此处)折叠或打开

  1. {

  2. "signing": {

  3.   "default": {

  4.     "expiry": "87600h"

  5.    },

  6.   "profiles": {

  7.      "kubernetes": {

  8.        "usages": [

  9.           "signing",

  10.           "key encipherment",

  11.           "server auth",

  12.           "client auth"

  13.         ],

  14.         "expiry": "87600h"

  15.        }

  16.     }

  17.   }

  18. }

ca-config.jso: 可以定义多个profiles,分别指定不同的过期时间,使用场景等参数,这里我们只定义了kubernetes一个profile
signing : 表示该证书可用于签名其它证书,生成的ca.pem证书中  CA=TRUE
server auth : 表示client可以使用该CA对server提供的证书进行验证
client auth : 表示server 可以用该CA对client提供的证书进行验证

4.证书生成与签名

截止目前,基于CFSSL的CA已经配置完成,该CA如何颁发证书呢?CFSSL提供了两个命令:gencert和sign。gencert将自动处理整个证书生成过程。该过程需要两个文件,一个告诉CFSSL本地客户端CA的位置以及如何验证请求,即config文件,另一个为CSR配置信息,用于填充CSR 即csr文件。

举例:创建 kubernetes 证书签名请求?件 kubernetes-csr.json (config文件采用之前的ca-config.json)

点击(此处)折叠或打开

  1. {

  2.     "CN": "kubernetes",

  3.     "hosts": [

  4.         "127.0.0.1",

  5.         "10.116.137.196",

  6.         "10.116.82.28",

  7.         "10.116.36.57",

  8.         "10.254.0.1",

  9.         "kubernetes",

  10.         "kubernetes.default",

  11.         "kubernetes.default.svc",

  12.         "kubernetes.default.svc.cluster",

  13.         "kubernetes.default.svc.cluster.local"

  14.     ],

  15.     "key": {

  16.     "algo":"rsa",

  17.     "size":2048

  18.     },

  19.     "names": [

  20.         {

  21.             "C": "CN",

  22.             "L": "BeiJing",

  23.             "ST": "BeiJing",

  24.             "O": "k8s",

  25.             "OU": "System"

  26.         }

  27.     ]

  28. }

如果 hosts 字段不为空则需要指定授权使用该证书的 IP 或域名列表,由于该证书后续被 etcd 集群和 kubernetes master 集群使用,所以上面分别指定了 etcd 集群、 kubernetes master 集群的主机 IP 和 kubernetes 服务的服务 IP(一般是 kube-apiserver 指定的 service-cluster-ip-range 网段的第一个IP,如 10.254.0.1。

hosts 中的内容可以为空,即使按照上面的配置,向集群中增加新节点后也不需要重新生成证书。

执行命令:cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes

生成 kubernetes.csr    kubernetes-key.pem   kubernetes.pem 文件

感谢各位的阅读!关于“kubernetes中CFSSL如何构建本地CA”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!


网页名称:kubernetes中CFSSL如何构建本地CA
当前地址:http://scgulin.cn/article/goijid.html