更改 Webhook 不会调用端点,因为证书由未知授权机构签名

Mutating Webhook does not invoke endpoint because certificate signed by unknown authority

我正在开发 mutating webhook with kind,据我了解,API 终点应该是 https。 API 服务器的证书和密钥应由集群本身的 CA 签名,以解决自签名证书的问题。为此,建议执行以下步骤:

  1. 创建密钥 - openssl genrsa -out app.key 2048
  2. 创建 CSR - openssl req -new -key app.key -subj "/CN=${CSR_NAME}" -out app.csr -config csr.conf
  3. 在 kubernetes 中创建 CSR 对象 - kubectl create -f csr.yaml
  4. 批准企业社会责任 - kubectl certificate approve csr_name
  5. 提取 PEM - kubectl get csr app.csr -o jsonpath='{.status.certificate}' | openssl base64 -d -A -out app.pem

备注
1. csr.conf 包含成功设置 CSR 的详细信息。
2. csr.yaml 是为 kuberenetes 类型编写的 CertificateSigningRequest.
3. csr_name定义在CertificateSigningRequest.
4、csr.yaml中的spec.request设置为cat app.csr | base64 | tr -d '\n'。 5. app.pemapp.key用于设置https端点。

终点肯定是可达的,但错误如下:

Internal error occurred: failed calling webhook "com.me.webhooks.demo": Post https://webhook.sidecars.svc:443/mutate?timeout=10s: x509: certificate signed by unknown authority

如何解决 certificate signed by unknown authority 问题?

参考文献:
1. Writing a very basic kubernetes mutating admission webhook
2. Diving into Kubernetes MutatingAdmissionWebhook

它不需要使用集群的 CA 根进行签名。它只需要匹配 webhook 配置中的 CA 包。