Kubernetes集群都有一个集群根证书颁发机构(CA) -- 验证API server证书 -- 验证kubelet客户端证书

CA证书包被散发到集群中的每个节点 -- 作为一个secret附加散发到默认service account让Pod中运行的应用程序信赖集群根CA通常须要一些额定的应用程序配置: CA证书包 -- TLS客户端或服务器信赖的CA证书列表=====install cfssl=====wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64chmod +x cfssl_linux-amd64mv cfssl_linux-amd64 /usr/local/bin/cfsslwget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64chmod +x cfssljson_linux-amd64mv cfssljson_linux-amd64 /usr/local/bin/cfssljsonwget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64chmod +x cfssl-certinfo_linux-amd64mv cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo=====create CA=====mkdir /root/sslcd /root/sslcfssl print-defaults config > config.jsoncfssl print-defaults csr > csr.json# 依据config.json文件的格局创立如下的ca-config.json文件# 过期工夫设置成了 87600hcat > ca-config.json <<EOF{  "signing": {    "default": {      "expiry": "87600h"    },    "profiles": {      "kubernetes": {        "usages": [            "signing",            "key encipherment",            "server auth",            "client auth"        ],        "expiry": "87600h"      }    }  }}EOF创立 ca-csr.json 文件vi ca-csr.json<code>{  "CN": "kubernetes",  "key": {    "algo": "rsa",    "size": 2048  },  "names": [    {      "C": "CN",      "ST": "BeiJing",      "L": "BeiJing",      "O": "k8s",      "OU": "System"    }  ],    "ca": {       "expiry": "87600h"    }}</code>生成 CA 证书和私钥cfssl gencert -initca ca-csr.json | cfssljson -bare cals -lt ca*-rw-r--r--. 1 root root 1001 4月 15 12:00 ca.csr-rw-------. 1 root root 1675 4月 15 12:00 ca-key.pem-rw-r--r--. 1 root root 1359 4月 15 12:00 ca.pem创立 kubernetes 证书vi kubernetes-csr.json<code>{    "CN": "kubernetes",    "hosts": [      "127.0.0.1",      "192.168.1.193",      "192.168.1.194",      "192.168.1.195",      "10.254.0.1",      "kubernetes",      "kubernetes.default",      "kubernetes.default.svc",      "kubernetes.default.svc.cluster",      "kubernetes.default.svc.cluster.local"    ],    "key": {        "algo": "rsa",        "size": 2048    },    "names": [        {            "C": "CN",            "ST": "BeiJing",            "L": "BeiJing",            "O": "k8s",            "OU": "System"        }    ]}</code>如果 hosts 字段不为空则须要指定受权应用该证书的 IP 或域名列表,因为该证书后续被 etcd 集群和 kubernetes master 集群应用,所以下面别离指定了 etcd 集群、kubernetes master 集群的主机 IP 和 kubernetes 服务的服务 IP(个别是 kube-apiserver 指定的 service-cluster-ip-range 网段的第一个IP,如 10.254.0.1)cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetesll kubernetes*-rw-r--r--. 1 root root 1261 4月 15 15:24 kubernetes.csr-rw-r--r--. 1 root root 560 4月 15 15:24 kubernetes-csr.json-rw-------. 1 root root 1679 4月 15 15:24 kubernetes-key.pem-rw-r--r--. 1 root root 1627 4月 15 15:24 kubernetes.pem创立 admin-csr.json 证书这个admin 证书,是未来生成管理员用的kube config 配置文件用的,当初咱们个别倡议应用RBAC 来对kubernetes 进行角色权限管制, kubernetes 将证书中的CN 字段 作为User, O 字段作为 Group(具体参考 Kubernetes中的用户与身份认证受权中 X509 Client Certs 一段)。vi admin-csr.json<code>{  "CN": "admin",  "hosts": [],  "key": {    "algo": "rsa",    "size": 2048  },  "names": [    {      "C": "CN",      "ST": "BeiJing",      "L": "BeiJing",      "O": "system:masters",      "OU": "System"    }  ]}</code>cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare adminll admin*-rw-r--r--. 1 root root 1009 4月 15 17:23 admin.csr-rw-r--r--. 1 root root 229 4月 15 17:10 admin-csr.json-rw-------. 1 root root 1679 4月 15 17:23 admin-key.pem-rw-r--r--. 1 root root 1399 4月 15 17:23 admin.pem创立 kube-proxy 证书vi kube-proxy-csr.json<code>{  "CN": "system:kube-proxy",  "hosts": [],  "key": {    "algo": "rsa",    "size": 2048  },  "names": [    {      "C": "CN",      "ST": "BeiJing",      "L": "BeiJing",      "O": "k8s",      "OU": "System"    }  ]}</code>cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy========校验证书=========应用 openssl 命令openssl x509 -noout -text -in kubernetes.pem应用 cfssl-certinfo 命令cfssl-certinfo -cert kubernetes.pem散发证书mkdir -p /etc/kubernetes/sslcp *.pem /etc/kubernetes/ssl散发证书给节点mkdir -p /etc/kubernetes/sslscp *.pem root@192.168.1.194:/etc/kubernetes/ssl/scp *.pem root@192.168.1.195:/etc/kubernetes/ssl/