【发布时间】:2021-10-13 11:29:51
【问题描述】:
我能够手动创建证书:
- 我创建了一个 csr 文件
- 我创建并应用了一个
CertificateSigningRequestk8s 资源 - 我批准了该请求,使用
kubectl certificate approve <name>
- 我从
CertificateSigningRequest的status.certificate字段中提取了证书。
现在我想以编程方式重复该过程。为此,我使用了@kubernetes/client-node npm 包。
我能够创建和应用CertificateSigningRequest 资源:
const csrResource = await adminCertApi.createCertificateSigningRequest({
metadata: {
name: 'my.email@my.company.com',
},
spec: {
request: csrBase64,
signerName: 'kubernetes.io/kube-apiserver-client',
usages: [
'client auth'
],
},
});
但后来我在尝试批准请求时遇到了困难(尝试关注documentation)。我尝试了几种看起来像这样的变体:
csrResource.body.status.conditions = [
{
message: 'Approved by CWAdmin GraphQL Lambda function',
reason: 'ApprovedByCWAdmin',
type: 'Approved',
}
];
const response = await adminCertApi.patchCertificateSigningRequest('my.email@my.company.com', csrResource.body, undefined, undefined, undefined, undefined, { headers: { 'Content-Type': 'application/strategic-merge-patch+json' } });
很遗憾,这不会更新status.conditions 字段。即使这样做了,是什么触发了证书的签名?该文档指出kube-controller-manager 永远不会自动批准kubernetes.io/kube-apiserver-client 类型的请求。
换句话说,kubectl certificate approve 的程序化等价物是什么?
【问题讨论】:
标签: kubernetes client-certificates kubernetes-apiserver