一、前提准备
1 ip分配情况
k8s_vip: 192.168.242.110 #k8s master 节点有3个使用了haproxy+keepalived 所以需要vip
k8s_master_cluster: 192.168.242.31, 192.168.242.32,192.168.242.33
k8s_dnsip: 10.96.0.1 #kubernetes 服务的服务IP
#K8S_DNS 域名系统
K8S_DNS=kubernetes,kubernetes.default,kubernetes.default.svc,kubernetes.default.svc.cluster,kubernetes.default.svc.cluster.local
2 证书情况
#生成的 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 (最后重命名为 etcd-ca etcd-key etcd-cert)
#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、kube-scheduler 当前需要和 kube-apiserver 部署在同一台机器上且使用非安全端口通信,故不需要证书。
#kube-controller、kube-scheduler 也可以用ca.pem、kubernetes-key.pem、kubernetes.pem
一、下载相关软件,使用的是cfssl工具来制作证书
1 下载cfssl软件
# pwd
/root/ssl
# curl -s -L -o ./cfssl https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
# curl -s -L -o ./cfssljson https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
# curl -s -L -o ./cfssl-certinfo https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
# chmod +x /bin/cfssl*
2 制作证书
(1)制作CA,并修改文件
# ./cfssl print-defaults config > ca-config.json
# ./cfssl print-defaults csr > ca-csr.json
# cat ca-config.json
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"kubernetes": {
"expiry": "87600h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}
}
#解释:server auth表示client可以用该ca对server提供的证书进行验证 client auth表示server可以用该ca对client提供的证书进行验证
#创建证书签名请求
# cat ca-csr.json
{
"CN": "kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "BeiJing",
"ST": "BeiJing",
"O": "k8s",
"OU": "System"
}
]
}
#生成 CA 证书和私钥
# ./cfssl gencert -initca ca-csr.json | ./cfssljson -bare ca
# ls
ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem cfssl cfssl-certinfo cfssljson
(2)创建kubernetes证书
# cat kubernetes-csr.json
{
"CN": "kubernetes",
"hosts": [
"192.168.242.110",
"192.168.242.31",
"192.168.242.32",
"192.168.242.33",
"10.96.0.1",
"kubernetes",
"kubernetes.default",
"kubernetes.default.svc",
"kubernetes.default.svc.cluster",
"kubernetes.default.svc.cluster.local",
"127.0.0.1"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "BeiJing",
"L": "BeiJing",
"O": "k8s",
"OU": "System"
}
]
}
# 可以看到该证书把etcd集群的所有ip,kubernetes master的所有ip以及kubernetes服务的ip(10.96.0.1)都加入进去了,这样他们都能使用同一个密钥
# 生成Kubernetes证书和密钥
# ./cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kubernetes-csr.json | ./cfssljson -bare kubernetes
# 复制一份并改名,给ETCD使用
# cp ca.pem etcd-ca
# cp kubernetes.pem etcd-cert
# cp kubernetes-key.pem etcd-key
# 打包备份
# tar -czvf etcd.tar.gz etcd-ca etcd-cert etcd-key