k8s ca 证书的制作

一、前提准备
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

你可能感兴趣的:(k8s)