设置集群时,我们使用kubespray为我创建了一个kubernetes-admin
用户。我相信代码是here。
由于某种原因,此admin.conf
已泄露给我们所有的开发人员,我需要以某种方式将其撤消。
(我认为)我了解什么:
在我们的kubernetes集群中,我们使用x509对用户进行身份验证。对于我们的用户,我们创建一个私钥,然后使用该密钥创建一个CSR,并使用client-ca-file
和来自kubernetes安装的密钥对其进行签名。像这样:
openssl genrsa -out $K8S_USER-key.pem 2048
openssl req -new -key $K8S_USER-key.pem -out $K8S_USER.csr -subj "/CN=$K8S_USER"
openssl x509 -req -in $K8S_USER.csr -CA $cert_dir/ca.pem -CAkey $cert_dir/ca-key.pem -set_serial $SERIAL -out $K8S_USER.pem -days $DAYS
我假设对kubernetes-admin
用户执行了相同的操作,并且我假设当我更改client-ca-file
时,admin.conf
无法再使用kubernetes API。
这是正确的吗?更改client-ca-file
会使kubernetes-admin
无效吗?
我还假定我需要重新创建所有服务帐户,因为它们也会失效。
编辑:因此,我花了一些时间创建新的CA证书,然后为我的用户和kube-apiserver发行了新证书。不过,不确定重新启动apiserver容器是否足够。我的用户被拒绝为Unable to connect to the server: x509: issuer name does not match subject from issuing certificate
。不过,这对我来说并没有太大意义。当我通过exec连接到apiserver pod并检查apiserver证书时,它与我的kubeconfig用户证书具有相同的颁发者。
答案 0 :(得分:1)
更改client-ca-file
不会使kubernetes-admin
无效。
根据您的情况: 在创建用于生成证书签名请求的配置文件的过程中,需要将其保存到文件(例如csr.conf)之前,用CSR替换用尖括号标记的值(例如<< strong> MASTER_IP >)。 )。 MASTER_CLUSTER_IP 的值是API服务器的服务群集IP。我假设您使用cluster.local作为默认DNS域名。
您是否已将相同的参数添加到API服务器启动参数中?
就像使用任何CSR,但使用-selfsign
选项一样,将CSR提交给CA。这要求首先准备您的CA目录结构,如果要设置自己的CA,则无论如何都必须做。例如,您可以找到关于该here的教程。提交请求可以按照以下步骤进行:
ca -selfsign -keyfile dist/ca_key.pem -in ca_csr.pem -out dist/ca_cert.pem \
-outdir root-ca/cert -config openssl/ca.cnf
客户端节点可能拒绝将自签名的CA证书识别为有效。对于非生产部署或在公司防火墙后运行的部署,可以将自签名CA证书分发给所有客户端,并刷新本地列表以获取有效证书。
在每个客户端上,执行以下操作:
$ sudo cp ca.crt /usr/local/share/ca-certificates/kubernetes.crt
$ sudo update-ca-certificates
Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d....
done.
要使泄漏的证书无效,请替换群集中的CA。但是,这将需要重新启动群集。并且将需要重新颁发所有证书。您将不得不再次重新创建服务帐户。
要使泄漏的令牌无效,只需删除与用户令牌相对应的机密。 记住您添加的证书到期日期。
希望对您有帮助。