kube-scheduler 和 kube-controller-manager 可以以集群模式运行,通过 leader 选举产生一个工作进程,其它进程处于阻塞模式。
创建 Kubernetes Apiserver CA 证书首先创建一个api-cert证书存储目录目录,(当前实战是把api-server所需证书和kube-proxy所需证书和kuber-controller-manager都存储在api-cert目录中),kube-controller-manager和kube-scheduler当前使用的是apiserver生成的证书,也可以单独生成。
命令如下:
mkdir /data/www/api-cert cd /data/www/api-cert创建 Kubernetes apiserver 证书生成策略配置文件
cat << EOF | tee api-ca-config.json { "signing": { "default": { "expiry": "87600h" }, "profiles": { "kubernetes": { "expiry": "87600h", "usages": [ "signing", "key encipherment", "server auth", "client auth" ] } } } } EOF # 参数详解 ca-config.json:可以定义多个 profiles,分别指定不同的过期时间、使用场景等参数;后续在签名证书时使用某个 profile; signing: 表示该证书可用于签名其它证书;生成的 ca.pem 证书中 CA=TRUE; server auth: 表示client可以用该 CA 对server提供的证书进行验证; client auth: 表示server可以用该CA对client提供的证书进行验证; # 上面生成的这个ca config文件只是创建 Kubernetes Apiserver CA 证书签名请求
cat << EOF | tee api-ca-csr.json { "CN": "kubernetes", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "L": "Shenzhen", "ST": "Shenzhen", "O": "k8s", "OU": "System" } ] } EOF 参数详解: CN:Common Name,kube-apiserver 从证书中提取该字段作为请求的用户名 (User Name);浏览器使用该字段验证网站是否合法; names中的字段: C : country,国家 ST: state,州或省份 L:location,城市 O:organization,组织,kube-apiserver 从证书中提取该字段作为请求用户所属的组 (Group) OU:organization unit,组织单位 cfssl gencert -initca api-ca-csr.json | cfssljson -bare api-ca生成Kubernetes Apiserver 证书配置文件
cat << EOF | tee api-server-csr.json { "CN": "kubernetes", "hosts": [ "10.0.0.1", "127.0.0.1", "192.168.0.10", "192.168.0.12", "192.168.0.7", "192.168.0.8", "192.168.0.4", "192.168.0.9", "192.168.0.200", "kubernetes", "kubernetes.default", "kubernetes.default.svc", "kubernetes.default.svc.cluster", "kubernetes.default.svc.cluster.local" ], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "L": "Shenzhen", "ST": "Shenzhen", "O": "k8s", "OU": "System" } ] } EOF 参数详解: CN:Common Name,kube-apiserver 从证书中提取该字段作为请求的用户名 (User Name);浏览器使用该字段验证网站是否合法; names中的字段: C : country,国家 ST: state,州或省份 L:location,城市 O:organization,组织,kube-apiserver 从证书中提取该字段作为请求用户所属的组 (Group) OU:organization unit,组织单位 cfssl gencert -ca=api-ca.pem -ca-key=api-ca-key.pem -config=api-ca-config.json -profile=kubernetes api-server-csr.json | cfssljson -bare api-server # cfssl参数详解 gencert: 生成新的key(密钥)和签名证书 -initca:初始化一个新ca -ca:指明ca的证书 -ca-key:指明ca的私钥文件 -config:指明请求证书的json文件 -profile:与-config中的profile对应,是指根据config中的profile段来生成证书的相关信息 查看cert(证书信息): cfssl certinfo -cert ca.pem 查看CSR(证书签名请求)信息: cfssl certinfo -csr ca.csr # cfssljson -bare 来自CFSSL的返回值,使用cert,csr和key字段拆分成JSON格式以生成文件。 创建 Kubernetes Proxy 证书 cat << EOF | tee kube-proxy-csr.json { "CN": "system:kube-proxy", "hosts": [], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "L": "Shenzhen", "ST": "Shenzhen", "O": "k8s", "OU": "System" } ] } EOF cfssl gencert -ca=api-ca.pem -ca-key=api-ca-key.pem -config=api-ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy # 这个地方利用apiserver 的 ca证书机构颁发kube-proxy的证书请求,生成kube-proxy-key.pem和kube-proxy.pem文件给kube-proxy组件使用,因为kube-proxy 要连接apiserver进行kubernetes网络设置 # cfssl参数详解 gencert: 生成新的key(密钥)和签名证书 -initca:初始化一个新ca -ca:指明ca的证书 -ca-key:指明ca的私钥文件 -config:指明请求证书的json文件 -profile:与-config中的profile对应,是指根据config中的profile段来生成证书的相关信息 查看cert(证书信息): cfssl certinfo -cert ca.pem 查看CSR(证书签名请求)信息: cfssl certinfo -csr ca.csr # cfssljson -bare 来自CFSSL的返回值,使用cert,csr和key字段拆分成JSON格式以生成文件。