由于源站www.cnyunwei.cc 转移服务商备案的过程中操作失误,导致备案注销了,没法重新接入备案,只有新申请域名cnops.xyz 进行备案部署

第一节:创建TLS证书

Kubernetes Mr.c 1842℃ 0评论

  kubernetes 系统的各组件需要使用 TLS 证书对通信进行加密,本文档使用 CloudFlare 的 PKI 工具集 cfssl 来生成 Certificate Authority (CA) 和其它证书文件。
  根据个人实践,创建TLS证书这个环节是最容易出错的,但是刚好又是搭建整个集群的第一个步骤,这个环节出了问题后续的服务部署都会有很大问题,而且很多问题不好排查出来,所以在证书这个步骤要额外注意操作。
本次需要生成8个证书文件:
  admin-key.pem
  admin.pem
  ca-key.pem
  ca.pem
  kube-proxy-key.pem
  kube-proxy.pem
  kubernetes-key.pem
  kubernetes.pem
其中kubernetes 各个组件对应将使用这些证书文件:
  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、kube-proxy.pem;
  kubectl:使用 ca.pem、admin-key.pem、admin.pem;
  kube-controller-manager:使用 ca-key.pem、ca.pem
证书只需要生成一份,这里我们就在master节点上操作,master上生成后分发到对应的node节点上。
一:安装CFSSL
下载二进制文件,复制到/usr/local/bin 目录下即可。

[root@cnyunwei k8s_soft]# wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
[root@cnyunwei k8s_soft]# wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
[root@cnyunwei k8s_soft]# wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
[root@cnyunwei k8s_soft]# chmod +x cfssl*

[root@cnyunwei k8s_soft]# mv cfssl_linux-amd64 /usr/local/bin/cfssl
[root@cnyunwei k8s_soft]# mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
[root@cnyunwei k8s_soft]# mv cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo
[root@cnyunwei k8s_soft]# export PATH=/usr/local/bin:$PATH

二:创建CA证书
1.创建CA证书配置文件

[root@k8s-master cfssl]# mkdir /root/ssl
[root@k8s-master cfssl]# cd /root/ssl
[root@k8s-master ssl]# vim  config.json 
{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "kubernetes": {
        "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ],
        "expiry": "87600h"
      }
    }
  }
}

2.创建CA 证书签名请求

[root@k8s-master ssl]# cat csr.json 
{
  "CN": "kubernetes",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "k8s",
      "OU": "System"
    }
  ],
    "ca": {
       "expiry": "87600h"
    }
}

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

以上两个文件是根据命令生成模板文件进行调整的:

cfssl print-defaults config > config.json
cfssl print-defaults csr > csr.json

2.生成 CA 证书和私钥

[root@k8s-master ssl]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca

该命令执行后就会生成三个证书文件

[root@k8s-master ssl]# ll
total 20
-rw-r--r-- 1 root root  292 May 24 11:16 ca-config.json
-rw-r--r-- 1 root root 1001 May 24 11:28 ca.csr
-rw-r--r-- 1 root root  253 May 24 11:20 ca-csr.json
-rw------- 1 root root 1675 May 24 11:28 ca-key.pem
-rw-r--r-- 1 root root 1359 May 24 11:28 ca.pem

三:创建 kubernetes 证书
1.创建 kubernetes 证书签名请求文件 kubernetes-csr.json

{
   "CN": "kubernetes",
    "hosts": [
      "127.0.0.1",
      "192.168.8.6",
      "192.168.8.7",
      "192.168.8.8",
      "master.cnyunwei.cc",
      "node1.cnyunwei.cc",
      "node2.cnyunwei.cc",
      "10.254.0.1"
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "ST": "BeiJing",
            "L": "BeiJing",
            "O": "k8s",
            "OU": "System"
        }
    ]
}

说明:  
  该文件创建的证书会被etcd集群和master 使用,我这里将三台服务器都做为ETCD集群节点,所以hosts列表中加上了三台服务器IP以及对应的域名,并且加上了kubernetes 的服务 IP地址,也就是 kube-apiserver 指定的 service-cluster-ip-range 网段的第一个IP
所以hosts列表中的IP地址请替换为自己服务器的IP地址,以及规划的cluster-ip 地址。

[root@k8s-master ssl]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes

同样的该命令执行后会生成三个证书文件
四:创建 admin 证书
admin 证书 是后续生成管理员用的kube config 配置文件用的,现在我们一般建议使用RBAC 来对kubernetes 进行角色权限控制, kubernetes 将证书中的CN 字段 作为User, O 字段作为 Group。

[root@k8s-master ssl]# vim admin-csr.json
{
  "CN": "admin",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "system:masters",
      "OU": "System"
    }
  ]
}
[root@k8s-master ssl]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin

五:创建 kube-proxy 证书

[root@k8s-master ssl]# vim kube-proxy-csr.json
{
  "CN": "system:kube-proxy",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "k8s",
      "OU": "System"
    }
  ]
}
[root@k8s-master ssl]#  cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes  kube-proxy-csr.json | cfssljson -bare kube-proxy

六:校验并分发证书
1.证书校验可以使用cfssl-certinfo 命令查看下证书信息

[root@k8s-master ssl]# cfssl-certinfo -cert kubernetes.pem
{
  "subject": {
    "common_name": "kubernetes",
    "country": "CN",
    "organization": "k8s",
    "organizational_unit": "System",
    "locality": "BeiJing",
    "province": "BeiJing",
    "names": [
      "CN",
....................

2.分发证书:
为了方便管理,定义kubernetes的证书文件存放路径为/etc/kubernetes/ssl/

[root@k8s-master ssl]# mkdir -p /etc/kubernetes/ssl/
[root@k8s-master ssl]# cp *.pem /etc/kubernetes/ssl/

分发到node节点:

[root@k8s-master ssl]# ssh root@node1.cnyunwei.cc "mkdir -p /etc/kubernetes/ssl/"
[root@k8s-master ssl]# scp *.pem root@node1.cnyunwei.cc:/etc/kubernetes/ssl/

转载请注明:菜鸟运维 » 第一节:创建TLS证书

喜欢 (1)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址