Kubernetes 如何创建一个;“认证设计请求”;带apiVersion“;证书.k8s.io/v1“;网络钩子

Kubernetes 如何创建一个;“认证设计请求”;带apiVersion“;证书.k8s.io/v1“;网络钩子,kubernetes,kubernetes-apiserver,Kubernetes,Kubernetes Apiserver,我的集群中运行着一个wehook 我创建了一个证书并成功签名 证书配置: cat > csr.conf <<EOF [req] req_extensions = v3_req distinguished_name = req_distinguished_name [req_distinguished_name] [ v3_req ] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature,

我的集群中运行着一个wehook

我创建了一个证书并成功签名

证书配置:

cat > csr.conf <<EOF
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = s-controller.ns-controller
DNS.2 = s-controller.ns-controller.svc
EOF
证书签名请求(
v1beta1

现在api服务器无法连接到我的webhook:
Post”https://s-controller.ns-controller.svc:443/mutate?timeout=30s“:x509:证书指定不兼容的密钥用法

我尝试将证书配置更新为
extendedKeyUsage=clientAuth
,但没有帮助


你知道什么是正确的
签名名
证书.k8s.io/v1
apiVersion

我没有按照我的意愿创建
证书设计请求
但是我通过创建自己的CA绕过了这个问题,如下所示:

openssl genrsa -out server-key.pem 2048
openssl req -new -key server-key.pem -subj "/CN=s-controller.ns-controller.svc" -out server.csr -config csr.conf

cat <<EOF | kubectl create -f -
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
    name: csr-controller
spec:
    groups:
    - system:authenticated
    request: $(cat server.csr | base64 | tr -d '\n')
    signerName: kubernetes.io/kube-apiserver-client
    usages:
    - digital signature
    - key encipherment
    - client auth
EOF
首先,我编辑了我的证书配置文件,使其包含
commonName
和currect
extendedKeyUsage

cat > csr.conf <<EOF
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
prompt = no
[req_distinguished_name]
CN = s-controller.ns-controller.svc
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth, serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = s-controller.ns-controller
DNS.2 = s-controller.ns-controller.svc
EOF
生成tls密钥和certificdate

openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr -config csr.conf
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -extensions v3_req -extfile csr.conf
为webhook创建kubernetes tls机密

kubectl create secret tls webhook-tls --cert=server.crt --key=server.key
设置
CA\u BUNDLE

export CA_BUNDLE=$(cat ca.crt | base64 | tr -d '\n')
删除所有生成的文件

rm ca.crt 
rm ca.key 
rm server.key
rm server.csr
rm server.crt

在我的webhhok中,我有一个
volumeMount

卷:

volumes:
- name: tls-vol
    secret:
      secretName: webhook-tls
卷数:

volumeMounts:
- name: tls-vol
  mountPath: /etc/webhook/certs
  readOnly: true
和comantainer
args

args:
- -tlsCertFile=/etc/webhook/certs/tls.crt
- -tlsKeyFile=/etc/webhook/certs/tls.key
如何使用apiVersion创建
CertificateSigningRequest
webhook的证书.k8s.io/v1

我已经成功地创建了
certificates.k8s.io/v1
,使用了以下发行者和openssl csr配置。它经过了测试

请查看以下配置:

#csr.conf
 
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = ${service}
DNS.2 = ${service}.${namespace}
DNS.3 = ${service}.${namespace}.svc
以及:


在设置证书时,您是否遵循了任何指南/教程?我将证书创建添加到了问题Client auth for webhook准入插件中,该插件在CSR中使用
clientAuth
serverAuth
ExtendedKeyUsage
密钥进行了测试。请尝试以相同的方式配置CSR,如果有帮助,请告诉我。是一个参考。好的,我应该使用什么
signerName
呢?您在
WebhookConfiguration
中放了哪个
caBundle
webhooks.clientConfig.caBundle
字段)在我回答您的问题之前,知道这一点很重要;)我想知道这和我做的有什么不同?在我看来他们都一样。
args:
- -tlsCertFile=/etc/webhook/certs/tls.crt
- -tlsKeyFile=/etc/webhook/certs/tls.key
#csr.conf
 
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = ${service}
DNS.2 = ${service}.${namespace}
DNS.3 = ${service}.${namespace}.svc
#csr-for-webhook.yaml
 
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
  name: ${csrName}
spec:
  groups:
  - system:authenticated
  request: $(cat ${tmpdir}/server.csr | base64 | tr -d '\n')
  usages:
  - digital signature
  - key encipherment
  - client auth
  signerName: kubernetes.io/kube-apiserver-client