目标

功能关系

创建ca

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

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

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

创建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. "ST": "Shandong"
  27. }
  28. ]
  29. }

kubelet 证书

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

创建列表文件,名称为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. --client-certificate=${instance}.pem \
  41. --client-key=${instance}-key.pem \
  42. --embed-certs=true \
  43. --kubeconfig=${instance}.kubeconfig
  44. kubectl config set-context default \
  45. --cluster=kubernetes \
  46. --user=system:node:${instance} \
  47. --kubeconfig=${instance}.kubeconfig
  48. kubectl config use-context default --kubeconfig=${instance}.kubeconfig
  49. done

kube-proxy 证书

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

  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

生成dashboard证书

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