Skip to content

Kubernetes 证书

# 查看证书 过期时间
$ cd /etc/kubernetes/pki
$ openssl x509 -in apiserver.crt -text -noout

Validity
  Not Before: Feb  7 12:25:44 2020 GMT
  Not After : Feb  6 12:25:44 2021 GMT

发现:时间有效期为一年。

现在要延长有效期。

  • 方案1 kubeadm 命令手动更新。
$ cd /workspace/kubernetes/configs/
$ kubeadm alpha certs renew all --config=./kubeadm-config.yaml
  • 方案2 go语言重新编译 kubeadm 修改为10年。

https://github.com/kubernetes/kubeadm.git

需要准备的证书:

  • admin-key.pem
  • admin.pem
  • ca-key.pem
  • ca.pem
  • kube-proxy-key.pem
  • kube-proxy.pem
  • kubernetes-key.pem
  • kubernetes.pem

使用证书的组件如下:

  • etcd:使用 ca.pem、kubernetes-key.pem、kubernetes.pem
  • 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-manager:使用 ca-key.pem、ca.pem

草稿

创建 kubernetes 证书

cat << EOF | tee kubernetes-csr.json
{
    "CN": "kubernetes",
    "hosts": [
      "127.0.0.1",
      "192.168.10.100",
      "192.168.10.101",
      "192.168.10.102",
      "10.254.0.1",
      "centos-master-01",
      "centos-master-02",
      "kubernetes",
      "kubernetes.default",
      "kubernetes.default.svc",
      "kubernetes.default.svc.cluster",
      "kubernetes.default.svc.cluster.local"
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "ST": "BeiJing",
            "L": "BeiJing",
            "O": "k8s",
            "OU": "System"
        }
    ]
}
EOF
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes

创建 admin 证书

cat << EOF | tee admin-csr.json
{
  "CN": "admin",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "system:masters",
      "OU": "System"
    }
  ]
}
EOF
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin

创建 kube-proxy 证书

cat << EOF | tee kube-proxy-csr.json
{
  "CN": "system:kube-proxy",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "k8s",
      "OU": "System"
    }
  ]
}
EOF
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes  kube-proxy-csr.json | cfssljson -bare kube-proxy