返回到文章

采纳

编辑于 4年前

关于证书在K8S集群中的作用?

kubernetes

我这边有好几个集群(分别用二进制方式部署、kubeadm部署),默认用的CA证书只有一年,我最近在排查一个请求api超时问题时突然发现所有集群的ca证书过期(它只有1年),但是其他组件正常运行(签署了10年)。

K8S版本:1.14.X

在网页里如果证书过期会有安全提示,那用ca签署后的组件证书和ca本身没有关系吗?

如果我拿apiserver或是etcd启动时使用的证书来请求API,会被拒绝unauthorized
但是为什么组件之间能正常通信?

我发现每个csr.json里面有好多-hostname,如果配置错集群通信会有问题,但不知道它的作用。

for instance in node0 node1; do
cat > ${instance}-csr.json <<EOF
{
  "CN": "system:node:${instance}",    <<<< 这里
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "TH",
      "O": "system:nodes",
      "OU": "Kubernetes The Hard Way",
      "ST": "china"
    }
  ]
}
EOF


INTERNAL_IP=${NODE_IP[${instance}]}
echo "\n\nGenerating Key and Cert for "${INTERNAL_IP}" :: "${instance}

cfssl gencert \
  -ca=ca.pem \
  -ca-key=ca-key.pem \
  -config=ca-config.json \
  -hostname=${instance},${INTERNAL_IP} \     >>> 还有这里
  -profile=kubernetes \
  ${instance}-csr.json | cfssljson -bare ${instance}

mv ${instance}-key.pem ${instance}.key
mv ${instance}.pem ${instance}.crt
done
}