ITPub博客

首页 > 应用开发 > IT综合 > kubernetes实践之二:创建TLS证书和密钥

kubernetes实践之二:创建TLS证书和密钥

原创 IT综合 作者:百联达 时间:2018-03-13 09:46:29 0 删除 编辑
一:前言
每个Kubernetes集群都有一个集群根证书颁发机构(CA)。 集群中的组件通常使?CA来验证API SERVER的证书,由API服务器验证kubelet客户端证书等。为了支持这一特点,CA证书包被分发到集群中的每个节点,并作为一个sercret附加分发到默认service account上。

生成的 CA 证书和秘钥文件如下:
ca-key.pem
ca.pem
kubernetes-key.pem
kubernetes.pem
kube-proxy.pem
kube-proxy-key.pem
admin.pem
admin-key.pem
使用证书的组件如下:
etcd:使用 ca.pem、kubernetes-key.pem、kubernetes.pem;
kube-apiserver:使用 ca.pem、kubernetes-key.pem、kubernetes.pem;
kubelet:使用 ca.pem;
kube-proxy:使用 ca.pem、kube-proxy-key.pem、kubeproxy.pem;
kubectl:使用 ca.pem、admin-key.pem、admin.pem;
kube-controller-manager:使用 ca-key.pem、ca.pem

kubernetes集群节点部署结构:
10.116.137.196   k8s_master
10.116.82.28      k8s_node1
10.116.36.57      k8s_node2

二:安装CFSSL


点击(此处)折叠或打开

  1. wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
  2. chmod +x cfssl_linux-amd64
  3. mv cfssl_linux-amd64 /usr/local/bin/cfssl
  4. wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
  5. chmod +x cfssljson_linux-amd64
  6. mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
  7. wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
  8. chmod +x cfssl-certinfo_linux-amd64
  9. mv cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo
  10. export PATH=/usr/local/bin:$PATH

三:创建 CA (Certificate Authority)
mkdir /root/ssl
cd /root/ssl
cfssl print-defaults config > config.json
cfssl print-defaults csr > csr.json

config.json

点击(此处)折叠或打开

  1. {
  2.     "signing": {
  3.         "default": {
  4.             "expiry": "168h"
  5.         },
  6.         "profiles": {
  7.             "www": {
  8.                 "expiry": "8760h",
  9.                 "usages": [
  10.                     "signing",
  11.                     "key encipherment",
  12.                     "server auth"
  13.                 ]
  14.             },
  15.             "client": {
  16.                 "expiry": "8760h",
  17.                 "usages": [
  18.                     "signing",
  19.                     "key encipherment",
  20.                     "client auth"
  21.                 ]
  22.             }
  23.         }
  24.     }
  25. }

csr.json

点击(此处)折叠或打开

  1. {
  2.     "CN": "example.net",
  3.     "hosts": [
  4.         "example.net",
  5.         "www.example.net"
  6.     ],
  7.     "key": {
  8.         "algo": "ecdsa",
  9.         "size": 256
  10.     },
  11.     "names": [
  12.         {
  13.             "C": "US",
  14.             "L": "CA",
  15.             "ST": "San Francisco"
  16.         }
  17.     ]
  18. }
# 根据config.json文件的格式创建如下的ca-config.json文件
# 过期时间设置成了 87600h
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-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. }
生成 CA 证书和私钥
cfssl gencert -initca ca-csr.json | cfssljson -bare ca

四:创建 kubernetes 证书
kubernetes-csr.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. }
生成 kubernetes 证书和私钥
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes

五: 创建 admin 证书
admin-csr.json

点击(此处)折叠或打开

  1. {
  2.     "CN": "admin",
  3.     "hosts": [],
  4.     "key": {
  5.     "algo":"rsa",
  6.     "size":2048
  7.     },
  8.     "names": [
  9.         {
  10.             "C": "CN",
  11.             "L": "BeiJing",
  12.             "ST": "BeiJing",
  13.             "O": "system:masters",
  14.             "OU": "System"
  15.         }
  16.     ]
  17. }
生成 admin 证书和私钥
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin

六: 创建 kube-proxy 证书
kube-proxy-csr.json

点击(此处)折叠或打开

  1. {
  2.     "CN": "system:kube-proxy",
  3.     "hosts": [],
  4.     "key": {
  5.     "algo":"rsa",
  6.     "size":2048
  7.     },
  8.     "names": [
  9.         {
  10.             "C": "CN",
  11.             "L": "BeiJing",
  12.             "ST": "BeiJing",
  13.             "O": "k8s",
  14.             "OU": "System"
  15.         }
  16.     ]
  17. }
生成 kube-proxy 客户端证书和私钥
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy

七:校验证书
举例:cfssl-certinfo -cert kubernetes.pem

八:分发证书

将生成的证书和秘钥文件(后缀名为 .pem )拷贝到所有机器的
/etc/kubernetes/ssl 目录下备用;
mkdir -p /etc/kubernetes/ssl
cp *.pem /etc/kubernetes/ssl


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28624388/viewspace-2151773/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
15年以上互联网经验,先后从事过制造业,证券业,物业行业和物流行业信息系统和互联网产品的设计落地实施,8年系统架构经验。最近关注企业数字化转型、财务数字化服务共享、大语言模型、Kubernetes微服务架构和Istio微服务治理框架。

注册时间:2013-02-05

  • 博文量
    332
  • 访问量
    1265615