Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

254
Vistas
Cómo crear una "Solicitud de firma de certificado" con apiVersion "certificates.k8s.io/v1" para un webhook

Tengo un wehook ejecutándose en mi clúster.

Creé un certificado y lo firmé con éxito.

configuración del certificado:

 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

Les creo el certificado de la siguiente manera:

 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

solicitud de firma de certificado ( v1beta1 )

 cat <<EOF | kubectl create -f - apiVersion: certificates.k8s.io/v1beta1 kind: CertificateSigningRequest metadata: name: csr-controller spec: groups: - system:authenticated request: $(cat server.csr | base64 | tr -d '\n') usages: - digital signature - key encipherment - server auth EOF

¡Esto funcionó bien!

Desde que actualicé mi versión de kubernetes, recibo la siguiente advertencia: Warning: certificates.k8s.io/v1beta1 CertificateSigningRequest is deprecated in v1.19+, unavailable in v1.22+; use certificates.k8s.io/v1 , actualicé CertificateSigningRequest , por lo que ahora es el siguiente:

 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

Y ahora el servidor API no se conecta a mi webhook: Post "https://s-controller.ns-controller.svc:443/mutate?timeout=30s": x509: certificate specifies an incompatible key usage

Intenté actualizar la configuración del certificado a extendedKeyUsage = clientAuth pero no funcionó.

¿Alguna idea de cuál es el signerName y la configuración correctos para certificates.k8s.io/v1 apiVersion?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

No he logrado crear un CertificateSigningRequest como deseaba, SIN EMBARGO evité el problema al crear mi propia CA de la siguiente manera:

Primero, commonName el archivo de configuración de mi certificado para que incluya un nombre común y un uso de clave extendedKeyUsage actual:

 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

Generar certificado de CA (observe los -days 365 )

 openssl genrsa -out ca.key 2048 openssl req -x509 -new -nodes -key ca.key -days 365 -out ca.crt -subj "/CN=admission_ca"

Generar clave tls y fecha de certificado

 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

Cree un secreto tls de kubernetes para el webhook

 kubectl create secret tls webhook-tls --cert=server.crt --key=server.key

Establecer el CA_BUNDLE

 export CA_BUNDLE=$(cat ca.crt | base64 | tr -d '\n')

Eliminar todos los archivos generados

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

En mi webhhok, tengo un volume volumeMount :

volumen:

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

montaje de volumen:

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

Y el comtainer args

 args: - -tlsCertFile=/etc/webhook/certs/tls.crt - -tlsKeyFile=/etc/webhook/certs/tls.key
over 4 years ago · Santiago Trujillo Denunciar

0

¿Cómo crear un CertificateSigningRequest con apiVersion certificates.k8s.io/v1 para un webhook?

He creado con éxito certificates.k8s.io/v1 con los siguientes emisores y la configuración de openssl csr. Se probó con este ejemplo de webhook .

Por favor, consulte las configuraciones a continuación:

 #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

y:

 #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
over 4 years ago · Santiago Trujillo Denunciar

0

En su antiguo CertificateSigningRequest yaml, estaba usando la autenticación del servidor como uno de los usos clave, pero en el último lo cambió a la autenticación del cliente . el certificado que necesita el webhook debe firmarse con la clave de autenticación del servidor y signerName debe ser kubernetes.io/kubelet-serving . Así que actualice sus archivos de la siguiente manera para evitar el problema:

csr.conf

 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

Genere csr con subject.organization como "sistema: nodos"

 openssl genrsa -out server.key 2048 openssl req -new -key server.key -subj "/CN=system:node:s-contoller.ns-controller.svc /OU="system:nodes" /O=system:nodes" -out $server.csr -config csr.conf

csr-para-webhook.yaml

 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/kubelet-serving usages: - digital signature - key encipherment - server auth EOF

fuente: https://kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/

PD: Lo he probado con Kubernetes versión 1.21.3

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda