证书生成

kubeadm 在部署 Kubernetes 时会自动生成 Kubernetes 所需要的证书,这里是手动生成这些证书的方法。

安装 cfssl

  1. go get -u github.com/cloudflare/cfssl/cmd/...

创建 CA 配置文件

  1. mkdir -p /etc/ssl/certs
  2. cd /etc/ssl/certs
  3. cfssl print-defaults config > config.json
  4. cfssl print-defaults csr > csr.json
  5. cat >ca-config.json <<EOF
  6. {
  7. "signing": {
  8. "default": {
  9. "expiry": "87600h"
  10. },
  11. "profiles": {
  12. "kubernetes": {
  13. "usages": [
  14. "signing",
  15. "key encipherment",
  16. "server auth",
  17. "client auth"
  18. ],
  19. "expiry": "87600h"
  20. }
  21. }
  22. }
  23. }
  24. EOF
  25. cat >ca-csr.json <<EOF
  26. {
  27. "CN": "kubernetes",
  28. "key": {
  29. "algo": "rsa",
  30. "size": 2048
  31. },
  32. "names": [
  33. {
  34. "C": "CN",
  35. "ST": "BeiJing",
  36. "L": "BeiJing",
  37. "O": "k8s",
  38. "OU": "System"
  39. }
  40. ]
  41. }
  42. EOF

创建 CA 证书和私钥

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

创建 Kubernetes 证书

  1. cat >kubernetes-csr.json <<EOF
  2. {
  3. "CN": "kubernetes",
  4. "hosts": [
  5. "127.0.0.1",
  6. "172.20.0.112",
  7. "172.20.0.113",
  8. "172.20.0.114",
  9. "172.20.0.115",
  10. "10.254.0.1",
  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. "ST": "BeiJing",
  25. "L": "BeiJing",
  26. "O": "k8s",
  27. "OU": "System"
  28. }
  29. ]
  30. }
  31. EOF
  32. cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes

创建 Admin 证书

  1. cat >admin-csr.json <<EOF
  2. {
  3. "CN": "admin",
  4. "hosts": [],
  5. "key": {
  6. "algo": "rsa",
  7. "size": 2048
  8. },
  9. "names": [
  10. {
  11. "C": "CN",
  12. "ST": "BeiJing",
  13. "L": "BeiJing",
  14. "O": "system:masters",
  15. "OU": "System"
  16. }
  17. ]
  18. }
  19. EOF
  20. cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin
  21. cat >kube-proxy-csr.json <<EOF
  22. {
  23. "CN": "system:kube-proxy",
  24. "hosts": [],
  25. "key": {
  26. "algo": "rsa",
  27. "size": 2048
  28. },
  29. "names": [
  30. {
  31. "C": "CN",
  32. "ST": "BeiJing",
  33. "L": "BeiJing",
  34. "O": "k8s",
  35. "OU": "System"
  36. }
  37. ]
  38. }
  39. EOF
  40. cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy