目标

这部分我们创建k8s需要的证书.

功能关系

软件 证书 备注
kube-apiserver ca.pem
ca-key.pem
kubernetes.pem
kubernetes-key.pem
kube-controller-manager ca.pem
ca-key.pem
kube-scheduler
kubelet ca.pem
节点证书
以Node1.k8s示例,需要
Node1.k8s.com-key.pem
Node1.k8s.com.pem
同时自动生成:
Node1.ks.com.kubeconfig
kube-proxy ca.pem
kube-proxy-key.pem
kube-proxy.pem
kubectl ca.pem
admin.pem
admin-key.pem
dashboard dashboard.pem
dashboard-key.pem

创建ca

创建ca配置文件:ca-config.json

  1. {
  2. "signing": {
  3. "default": {
  4. "expiry": "43800h"
  5. },
  6. "profiles": {
  7. "kubernetes": {
  8. "usages": ["signing", "key encipherment", "server auth", "client auth"],
  9. "expiry": "43800h"
  10. }
  11. }
  12. }
  13. }

创建ca证书签名请求文件:ca-csr.json

  1. {
  2. "CN": "Kubernetes",
  3. "key": {
  4. "algo": "rsa",
  5. "size": 2048
  6. },
  7. "names": [
  8. {
  9. "C": "CN",
  10. "ST": "Shandong",
  11. "L": "JiNan",
  12. "O": "Kubernetes",
  13. "OU": "CA"
  14. }
  15. ]
  16. }

创建ca证书,私钥,证书请求文件

  1. Shell># cfssl gencert -initca ca-csr.json | cfssljson -bare ca

API server证书

目的: 给apiservice使用
创建证书签名文件:kubernetes-csr.json

  1. {
  2. "CN": "kubernetes",
  3. "hosts": [
  4. "127.0.0.1",
  5. "10.10.1.20",
  6. "10.10.1.21",
  7. "10.10.1.22",
  8. "10.10.1.23",
  9. "10.254.0.1",
  10. "master.k8s.com",
  11. "kubernetes",
  12. "kubernetes.default",
  13. "kubernetes.default.svc",
  14. "kubernetes.default.svc.cluster",
  15. "kubernetes.default.svc.cluster.local"
  16. ],
  17. "key": {
  18. "algo": "rsa",
  19. "size": 2048
  20. },
  21. "names": [
  22. {
  23. "C": "CN",
  24. "L": "JiNan",
  25. "O": "Kubernetes",
  26. "OU": "Kubernetes",
  27. "ST": "Shandong"
  28. }
  29. ]
  30. }

生成证书

  1. Shell>#cfssl gencert \
  2. -ca=ca.pem \
  3. -ca-key=ca-key.pem \
  4. -config=ca-config.json \
  5. -profile=kubernetes \
  6. kubernetes-csr.json | cfssljson -bare kubernetes

kubelet 证书

目标: 给kubelet 与apiserver 连接式做身份认证使用。
说明

  1. 创建证书签名文件,每个节点都会有一个自己的证书,证书名称使用自己的主机名称。其中CN中要包含主机名称。

创建列表文件,名称为node.list

  1. #hostname@ipaddrs(ip1,ip2,ip3)
  2. Node1.k8s.com@10.10.1.31
  3. Node2.k8s.com@10.10.1.32
  4. Node3.k8s.com@10.10.1.33,10.10.1.34

创建脚本 node.sh

  1. #!/bin/bash
  2. HostName=(`cat nodes.list | grep -v '#' | awk -F '@' '{print $1}'`)
  3. HostNUM="${#HostName[*]}"
  4. #echo $HostNUM
  5. ips=(`cat nodes.list | grep -v '#' | awk -F '@' '{print $2}'`)
  6. for ((i=0; i < $HostNUM; i++)) ; do
  7. instance=${HostName[$i]}
  8. cat > ${instance}-csr.json <<EOF
  9. {
  10. "CN": "system:node:${instance}",
  11. "key": {
  12. "algo": "rsa",
  13. "size": 2048
  14. },
  15. "names": [
  16. {
  17. "C": "CN",
  18. "L": "JiNan",
  19. "O": "system:nodes",
  20. "OU": "Kubernetes",
  21. "ST": "Shandong"
  22. }
  23. ]
  24. }
  25. EOF
  26. NODE_IP=${ips[$i]}
  27. echo ${instance}
  28. cfssl gencert \
  29. -ca=ca.pem \
  30. -ca-key=ca-key.pem \
  31. -config=ca-config.json \
  32. -hostname=${instance},${NODE_IP},'127.0.0.1' \
  33. -profile=kubernetes \
  34. ${instance}-csr.json | cfssljson -bare ${instance}
  35. #make kubeconfig file
  36. kubectl config set-cluster kubernetes \
  37. --certificate-authority=ca.pem \
  38. --embed-certs=true \
  39. --server=https://master.k8s.com \
  40. --kubeconfig=${instance}.kubeconfig
  41. kubectl config set-credentials system:node:${instance} \
  42. --client-certificate=${instance}.pem \
  43. --client-key=${instance}-key.pem \
  44. --embed-certs=true \
  45. --kubeconfig=${instance}.kubeconfig
  46. kubectl config set-context default \
  47. --cluster=kubernetes \
  48. --user=system:node:${instance} \
  49. --kubeconfig=${instance}.kubeconfig
  50. kubectl config use-context default --kubeconfig=${instance}.kubeconfig
  51. done

kube-proxy 证书

创建证书签名文件:kube-proxy-csr.json

  1. {
  2. "CN": "system:kube-proxy",
  3. "key": {
  4. "algo": "rsa",
  5. "size": 2048
  6. },
  7. "names": [
  8. {
  9. "C": "CN",
  10. "L": "JiNan",
  11. "O": "system:node-proxier",
  12. "OU": "Kubernetes",
  13. "ST": "Shandong"
  14. }
  15. ]
  16. }

生成证书

  1. Shell>#cfssl gencert \
  2. -ca=ca.pem \
  3. -ca-key=ca-key.pem \
  4. -config=ca-config.json \
  5. -profile=kubernetes \
  6. kube-proxy-csr.json | cfssljson -bare kube-proxy

管理员证书

创建证书签名文件:admin-csr.json

  1. {
  2. "CN": "admin",
  3. "key": {
  4. "algo": "rsa",
  5. "size": 2048
  6. },
  7. "names": [
  8. {
  9. "C": "CN",
  10. "L": "JiNan",
  11. "O": "system:masters",
  12. "OU": "Kubernetes",
  13. "ST": "Shandong"
  14. }
  15. ]
  16. }

生成管理员证书

  1. Shell>#cfssl gencert \
  2. -ca=ca.pem \
  3. -ca-key=ca-key.pem \
  4. -config=ca-config.json \
  5. -profile=kubernetes \
  6. admin-csr.json | cfssljson -bare admin

dashboard证书

创建证书签名文件:dashboard-csr.json

  1. {
  2. "CN": "dashboard",
  3. "key": {
  4. "algo": "rsa",
  5. "size": 2048
  6. },
  7. "names": [
  8. {
  9. "C": "CN",
  10. "L": "JiNan",
  11. "O": "system:masters",
  12. "OU": "Kubernetes",
  13. "ST": "Shandong"
  14. }
  15. ]
  16. }

生成dashboard证书

  1. Shell>#cfssl gencert \
  2. -ca=ca.pem \
  3. -ca-key=ca-key.pem \
  4. -config=ca-config.json \
  5. -profile=kubernetes \
  6. admin-csr.json | cfssljson -bare dashboard