summaryrefslogtreecommitdiff
path: root/f3s
diff options
context:
space:
mode:
Diffstat (limited to 'f3s')
-rw-r--r--f3s/argocd-apps/infra/cert-manager.yaml28
-rw-r--r--f3s/cert-manager/Justfile77
-rw-r--r--f3s/cert-manager/README.md93
-rw-r--r--f3s/cert-manager/ca-certificate.yaml20
-rw-r--r--f3s/cert-manager/cert-manager.yaml5837
-rw-r--r--f3s/cert-manager/self-signed-issuer.yaml17
-rw-r--r--f3s/cert-manager/wildcard-certificate.yaml22
-rw-r--r--f3s/docs/freebsd-relayd-lan-access.md284
-rw-r--r--f3s/docs/lan-access-setup-guide.md452
-rw-r--r--f3s/navidrome/helm-chart/README.md40
-rw-r--r--f3s/navidrome/helm-chart/templates/ingress.yaml22
11 files changed, 6891 insertions, 1 deletions
diff --git a/f3s/argocd-apps/infra/cert-manager.yaml b/f3s/argocd-apps/infra/cert-manager.yaml
new file mode 100644
index 0000000..b1586d2
--- /dev/null
+++ b/f3s/argocd-apps/infra/cert-manager.yaml
@@ -0,0 +1,28 @@
+apiVersion: argoproj.io/v1alpha1
+kind: Application
+metadata:
+ name: cert-manager
+ namespace: cicd
+ finalizers:
+ - resources-finalizer.argocd.argoproj.io
+spec:
+ project: default
+ source:
+ repoURL: http://git-server.cicd.svc.cluster.local/conf.git
+ targetRevision: master
+ path: f3s/cert-manager
+ destination:
+ server: https://kubernetes.default.svc
+ namespace: cert-manager
+ syncPolicy:
+ automated:
+ prune: true
+ selfHeal: true
+ syncOptions:
+ - CreateNamespace=true
+ retry:
+ limit: 3
+ backoff:
+ duration: 5s
+ factor: 2
+ maxDuration: 1m
diff --git a/f3s/cert-manager/Justfile b/f3s/cert-manager/Justfile
new file mode 100644
index 0000000..1df257a
--- /dev/null
+++ b/f3s/cert-manager/Justfile
@@ -0,0 +1,77 @@
+# Justfile for cert-manager
+
+# Install cert-manager
+install:
+ kubectl apply -f cert-manager.yaml
+ @echo "Waiting for cert-manager to be ready..."
+ kubectl wait --for=condition=Available --timeout=300s deployment/cert-manager -n cert-manager
+ kubectl wait --for=condition=Available --timeout=300s deployment/cert-manager-webhook -n cert-manager
+ kubectl wait --for=condition=Available --timeout=300s deployment/cert-manager-cainjector -n cert-manager
+ kubectl apply -f self-signed-issuer.yaml
+ kubectl apply -f ca-certificate.yaml
+ @echo "Waiting for CA certificate to be ready..."
+ sleep 10
+ kubectl wait --for=condition=Ready --timeout=120s certificate/selfsigned-ca -n cert-manager
+ kubectl apply -f wildcard-certificate.yaml
+ @echo "Waiting for wildcard certificate to be ready..."
+ kubectl wait --for=condition=Ready --timeout=120s certificate/f3s-lan-wildcard -n cert-manager
+ @echo ""
+ @echo "cert-manager installation complete!"
+ @echo "Run 'just export-certs' to export certificates for relayd"
+
+# Upgrade cert-manager
+upgrade:
+ kubectl apply -f cert-manager.yaml
+ kubectl apply -f self-signed-issuer.yaml
+ kubectl apply -f ca-certificate.yaml
+ kubectl apply -f wildcard-certificate.yaml
+
+# Uninstall cert-manager
+uninstall:
+ kubectl delete -f wildcard-certificate.yaml --ignore-not-found
+ kubectl delete -f ca-certificate.yaml --ignore-not-found
+ kubectl delete -f self-signed-issuer.yaml --ignore-not-found
+ kubectl delete -f cert-manager.yaml --ignore-not-found
+
+# Check certificate status
+status:
+ @echo "=== ClusterIssuers ==="
+ kubectl get clusterissuer
+ @echo ""
+ @echo "=== Certificates ==="
+ kubectl get certificate -n cert-manager
+ @echo ""
+ @echo "=== Certificate Details ==="
+ kubectl describe certificate -n cert-manager
+
+# Export certificates for relayd
+export-certs:
+ #!/bin/bash
+ set -e
+ echo "Exporting certificates..."
+ kubectl get secret f3s-lan-tls -n cert-manager -o jsonpath='{.data.tls\.crt}' | base64 -d > /tmp/f3s-lan-cert.pem
+ kubectl get secret f3s-lan-tls -n cert-manager -o jsonpath='{.data.tls\.key}' | base64 -d > /tmp/f3s-lan-key.pem
+ echo "Certificates exported to /tmp/f3s-lan-cert.pem and /tmp/f3s-lan-key.pem"
+ echo ""
+ echo "Copy to FreeBSD hosts with:"
+ echo " scp /tmp/f3s-lan-*.pem paul@f0:/tmp/"
+ echo " scp /tmp/f3s-lan-*.pem paul@f1:/tmp/"
+
+# Export CA certificate for client trust
+export-ca:
+ #!/bin/bash
+ set -e
+ echo "Exporting CA certificate..."
+ kubectl get secret selfsigned-ca-secret -n cert-manager -o jsonpath='{.data.ca\.crt}' | base64 -d > /tmp/f3s-lan-ca.crt
+ echo "CA certificate exported to /tmp/f3s-lan-ca.crt"
+ echo ""
+ echo "Install on clients to trust self-signed certificates."
+ echo "See README.md for platform-specific instructions."
+
+# Renew wildcard certificate (force renewal)
+renew:
+ kubectl delete certificate f3s-lan-wildcard -n cert-manager
+ kubectl apply -f wildcard-certificate.yaml
+ @echo "Waiting for certificate to be ready..."
+ kubectl wait --for=condition=Ready --timeout=120s certificate/f3s-lan-wildcard -n cert-manager
+ @echo "Certificate renewed. Run 'just export-certs' to update relayd."
diff --git a/f3s/cert-manager/README.md b/f3s/cert-manager/README.md
new file mode 100644
index 0000000..7ca1a63
--- /dev/null
+++ b/f3s/cert-manager/README.md
@@ -0,0 +1,93 @@
+# cert-manager for f3s LAN TLS
+
+This directory contains cert-manager configuration for providing self-signed TLS certificates for LAN access to f3s services via `*.f3s.lan.buetow.org`.
+
+## Overview
+
+- **Purpose**: Provide TLS certificates for LAN ingresses
+- **Certificate Type**: Self-signed (via self-signed ClusterIssuer)
+- **Wildcard Cert**: `*.f3s.lan.buetow.org`
+- **Used by**: FreeBSD relayd on CARP VIP (192.168.1.138)
+
+## Components
+
+1. **cert-manager.yaml** - Official cert-manager installation (v1.14.4)
+2. **self-signed-issuer.yaml** - ClusterIssuer for self-signed certificates
+3. **ca-certificate.yaml** - CA certificate for signing
+4. **wildcard-certificate.yaml** - Wildcard certificate for `*.f3s.lan.buetow.org`
+
+## Deployment
+
+Deployed via ArgoCD from `argocd-apps/infra/cert-manager.yaml`.
+
+Manual deployment:
+```bash
+just install
+```
+
+## Exporting Certificates for relayd
+
+After cert-manager creates the wildcard certificate, export it for use by FreeBSD relayd:
+
+```bash
+# Export from k3s
+kubectl get secret f3s-lan-tls -n cert-manager -o jsonpath='{.data.tls\.crt}' | base64 -d > /tmp/f3s-lan-cert.pem
+kubectl get secret f3s-lan-tls -n cert-manager -o jsonpath='{.data.tls\.key}' | base64 -d > /tmp/f3s-lan-key.pem
+
+# Copy to FreeBSD hosts
+scp /tmp/f3s-lan-cert.pem paul@f0:/tmp/
+scp /tmp/f3s-lan-key.pem paul@f0:/tmp/
+scp /tmp/f3s-lan-cert.pem paul@f1:/tmp/
+scp /tmp/f3s-lan-key.pem paul@f1:/tmp/
+
+# On f0 and f1
+doas mkdir -p /usr/local/etc/ssl/relayd
+doas mv /tmp/f3s-lan-cert.pem /usr/local/etc/ssl/relayd/f3s.lan.buetow.org.crt
+doas mv /tmp/f3s-lan-key.pem /usr/local/etc/ssl/relayd/f3s.lan.buetow.org.key
+doas chmod 600 /usr/local/etc/ssl/relayd/*
+doas chown root:wheel /usr/local/etc/ssl/relayd/*
+doas service relayd reload
+```
+
+## Trusting the CA Certificate
+
+To avoid browser warnings, clients must trust the self-signed CA:
+
+### Export CA Certificate
+
+```bash
+kubectl get secret selfsigned-ca-secret -n cert-manager -o jsonpath='{.data.ca\.crt}' | base64 -d > f3s-lan-ca.crt
+```
+
+### Install on Clients
+
+**Linux (Fedora/Debian/Ubuntu):**
+```bash
+sudo cp f3s-lan-ca.crt /usr/local/share/ca-certificates/f3s-lan-ca.crt
+sudo update-ca-certificates
+```
+
+**macOS:**
+```bash
+sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain f3s-lan-ca.crt
+```
+
+**Windows:**
+- Double-click `f3s-lan-ca.crt`
+- Install to "Trusted Root Certification Authorities"
+
+**Android:**
+- Settings → Security → Encryption & credentials → Install a certificate → CA certificate
+
+**iOS:**
+- AirDrop the certificate or email it
+- Settings → General → VPN & Device Management → Install Profile
+
+## Certificate Renewal
+
+Self-signed certificates are valid for 90 days by default. cert-manager automatically renews them before expiration. After renewal, re-export and deploy to relayd.
+
+## See Also
+
+- [cert-manager documentation](https://cert-manager.io/docs/)
+- [Self-signed certificates](https://cert-manager.io/docs/configuration/selfsigned/)
diff --git a/f3s/cert-manager/ca-certificate.yaml b/f3s/cert-manager/ca-certificate.yaml
new file mode 100644
index 0000000..cdff2f9
--- /dev/null
+++ b/f3s/cert-manager/ca-certificate.yaml
@@ -0,0 +1,20 @@
+---
+# CA certificate for signing other certificates
+apiVersion: cert-manager.io/v1
+kind: Certificate
+metadata:
+ name: selfsigned-ca
+ namespace: cert-manager
+spec:
+ isCA: true
+ commonName: f3s-lan-ca
+ secretName: selfsigned-ca-secret
+ privateKey:
+ algorithm: RSA
+ size: 4096
+ issuerRef:
+ name: selfsigned-issuer
+ kind: ClusterIssuer
+ group: cert-manager.io
+ duration: 87600h # 10 years
+ renewBefore: 720h # 30 days
diff --git a/f3s/cert-manager/cert-manager.yaml b/f3s/cert-manager/cert-manager.yaml
new file mode 100644
index 0000000..598945f
--- /dev/null
+++ b/f3s/cert-manager/cert-manager.yaml
@@ -0,0 +1,5837 @@
+# Copyright 2022 The cert-manager Authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+apiVersion: v1
+kind: Namespace
+metadata:
+ name: cert-manager
+---
+# Source: cert-manager/templates/crds.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: certificaterequests.cert-manager.io
+ labels:
+ app: 'cert-manager'
+ app.kubernetes.io/name: 'cert-manager'
+ app.kubernetes.io/instance: 'cert-manager'
+ # Generated labels
+ app.kubernetes.io/version: "v1.14.4"
+spec:
+ group: cert-manager.io
+ names:
+ kind: CertificateRequest
+ listKind: CertificateRequestList
+ plural: certificaterequests
+ shortNames:
+ - cr
+ - crs
+ singular: certificaterequest
+ categories:
+ - cert-manager
+ scope: Namespaced
+ versions:
+ - name: v1
+ subresources:
+ status: {}
+ additionalPrinterColumns:
+ - jsonPath: .status.conditions[?(@.type=="Approved")].status
+ name: Approved
+ type: string
+ - jsonPath: .status.conditions[?(@.type=="Denied")].status
+ name: Denied
+ type: string
+ - jsonPath: .status.conditions[?(@.type=="Ready")].status
+ name: Ready
+ type: string
+ - jsonPath: .spec.issuerRef.name
+ name: Issuer
+ type: string
+ - jsonPath: .spec.username
+ name: Requestor
+ type: string
+ - jsonPath: .status.conditions[?(@.type=="Ready")].message
+ name: Status
+ priority: 1
+ type: string
+ - jsonPath: .metadata.creationTimestamp
+ description: CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.
+ name: Age
+ type: date
+ schema:
+ openAPIV3Schema:
+ description: "A CertificateRequest is used to request a signed certificate from one of the configured issuers. \n All fields within the CertificateRequest's `spec` are immutable after creation. A CertificateRequest will either succeed or fail, as denoted by its `Ready` status condition and its `status.failureTime` field. \n A CertificateRequest is a one-shot resource, meaning it represents a single point in time request for a certificate and cannot be re-used."
+ type: object
+ properties:
+ apiVersion:
+ description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
+ type: string
+ kind:
+ description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+ type: string
+ metadata:
+ type: object
+ spec:
+ description: Specification of the desired state of the CertificateRequest resource. https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
+ type: object
+ required:
+ - issuerRef
+ - request
+ properties:
+ duration:
+ description: Requested 'duration' (i.e. lifetime) of the Certificate. Note that the issuer may choose to ignore the requested duration, just like any other requested attribute.
+ type: string
+ extra:
+ description: Extra contains extra attributes of the user that created the CertificateRequest. Populated by the cert-manager webhook on creation and immutable.
+ type: object
+ additionalProperties:
+ type: array
+ items:
+ type: string
+ groups:
+ description: Groups contains group membership of the user that created the CertificateRequest. Populated by the cert-manager webhook on creation and immutable.
+ type: array
+ items:
+ type: string
+ x-kubernetes-list-type: atomic
+ isCA:
+ description: "Requested basic constraints isCA value. Note that the issuer may choose to ignore the requested isCA value, just like any other requested attribute. \n NOTE: If the CSR in the `Request` field has a BasicConstraints extension, it must have the same isCA value as specified here. \n If true, this will automatically add the `cert sign` usage to the list of requested `usages`."
+ type: boolean
+ issuerRef:
+ description: "Reference to the issuer responsible for issuing the certificate. If the issuer is namespace-scoped, it must be in the same namespace as the Certificate. If the issuer is cluster-scoped, it can be used from any namespace. \n The `name` field of the reference must always be specified."
+ type: object
+ required:
+ - name
+ properties:
+ group:
+ description: Group of the resource being referred to.
+ type: string
+ kind:
+ description: Kind of the resource being referred to.
+ type: string
+ name:
+ description: Name of the resource being referred to.
+ type: string
+ request:
+ description: "The PEM-encoded X.509 certificate signing request to be submitted to the issuer for signing. \n If the CSR has a BasicConstraints extension, its isCA attribute must match the `isCA` value of this CertificateRequest. If the CSR has a KeyUsage extension, its key usages must match the key usages in the `usages` field of this CertificateRequest. If the CSR has a ExtKeyUsage extension, its extended key usages must match the extended key usages in the `usages` field of this CertificateRequest."
+ type: string
+ format: byte
+ uid:
+ description: UID contains the uid of the user that created the CertificateRequest. Populated by the cert-manager webhook on creation and immutable.
+ type: string
+ usages:
+ description: "Requested key usages and extended key usages. \n NOTE: If the CSR in the `Request` field has uses the KeyUsage or ExtKeyUsage extension, these extensions must have the same values as specified here without any additional values. \n If unset, defaults to `digital signature` and `key encipherment`."
+ type: array
+ items:
+ description: "KeyUsage specifies valid usage contexts for keys. See: https://tools.ietf.org/html/rfc5280#section-4.2.1.3 https://tools.ietf.org/html/rfc5280#section-4.2.1.12 \n Valid KeyUsage values are as follows: \"signing\", \"digital signature\", \"content commitment\", \"key encipherment\", \"key agreement\", \"data encipherment\", \"cert sign\", \"crl sign\", \"encipher only\", \"decipher only\", \"any\", \"server auth\", \"client auth\", \"code signing\", \"email protection\", \"s/mime\", \"ipsec end system\", \"ipsec tunnel\", \"ipsec user\", \"timestamping\", \"ocsp signing\", \"microsoft sgc\", \"netscape sgc\""
+ type: string
+ enum:
+ - signing
+ - digital signature
+ - content commitment
+ - key encipherment
+ - key agreement
+ - data encipherment
+ - cert sign
+ - crl sign
+ - encipher only
+ - decipher only
+ - any
+ - server auth
+ - client auth
+ - code signing
+ - email protection
+ - s/mime
+ - ipsec end system
+ - ipsec tunnel
+ - ipsec user
+ - timestamping
+ - ocsp signing
+ - microsoft sgc
+ - netscape sgc
+ username:
+ description: Username contains the name of the user that created the CertificateRequest. Populated by the cert-manager webhook on creation and immutable.
+ type: string
+ status:
+ description: 'Status of the CertificateRequest. This is set and managed automatically. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status'
+ type: object
+ properties:
+ ca:
+ description: The PEM encoded X.509 certificate of the signer, also known as the CA (Certificate Authority). This is set on a best-effort basis by different issuers. If not set, the CA is assumed to be unknown/not available.
+ type: string
+ format: byte
+ certificate:
+ description: The PEM encoded X.509 certificate resulting from the certificate signing request. If not set, the CertificateRequest has either not been completed or has failed. More information on failure can be found by checking the `conditions` field.
+ type: string
+ format: byte
+ conditions:
+ description: List of status conditions to indicate the status of a CertificateRequest. Known condition types are `Ready`, `InvalidRequest`, `Approved` and `Denied`.
+ type: array
+ items:
+ description: CertificateRequestCondition contains condition information for a CertificateRequest.
+ type: object
+ required:
+ - status
+ - type
+ properties:
+ lastTransitionTime:
+ description: LastTransitionTime is the timestamp corresponding to the last status change of this condition.
+ type: string
+ format: date-time
+ message:
+ description: Message is a human readable description of the details of the last transition, complementing reason.
+ type: string
+ reason:
+ description: Reason is a brief machine readable explanation for the condition's last transition.
+ type: string
+ status:
+ description: Status of the condition, one of (`True`, `False`, `Unknown`).
+ type: string
+ enum:
+ - "True"
+ - "False"
+ - Unknown
+ type:
+ description: Type of the condition, known values are (`Ready`, `InvalidRequest`, `Approved`, `Denied`).
+ type: string
+ x-kubernetes-list-map-keys:
+ - type
+ x-kubernetes-list-type: map
+ failureTime:
+ description: FailureTime stores the time that this CertificateRequest failed. This is used to influence garbage collection and back-off.
+ type: string
+ format: date-time
+ served: true
+ storage: true
+---
+# Source: cert-manager/templates/crds.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: certificates.cert-manager.io
+ labels:
+ app: 'cert-manager'
+ app.kubernetes.io/name: 'cert-manager'
+ app.kubernetes.io/instance: 'cert-manager'
+ # Generated labels
+ app.kubernetes.io/version: "v1.14.4"
+spec:
+ group: cert-manager.io
+ names:
+ kind: Certificate
+ listKind: CertificateList
+ plural: certificates
+ shortNames:
+ - cert
+ - certs
+ singular: certificate
+ categories:
+ - cert-manager
+ scope: Namespaced
+ versions:
+ - name: v1
+ subresources:
+ status: {}
+ additionalPrinterColumns:
+ - jsonPath: .status.conditions[?(@.type=="Ready")].status
+ name: Ready
+ type: string
+ - jsonPath: .spec.secretName
+ name: Secret
+ type: string
+ - jsonPath: .spec.issuerRef.name
+ name: Issuer
+ priority: 1
+ type: string
+ - jsonPath: .status.conditions[?(@.type=="Ready")].message
+ name: Status
+ priority: 1
+ type: string
+ - jsonPath: .metadata.creationTimestamp
+ description: CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.
+ name: Age
+ type: date
+ schema:
+ openAPIV3Schema:
+ description: "A Certificate resource should be created to ensure an up to date and signed X.509 certificate is stored in the Kubernetes Secret resource named in `spec.secretName`. \n The stored certificate will be renewed before it expires (as configured by `spec.renewBefore`)."
+ type: object
+ properties:
+ apiVersion:
+ description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
+ type: string
+ kind:
+ description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+ type: string
+ metadata:
+ type: object
+ spec:
+ description: Specification of the desired state of the Certificate resource. https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
+ type: object
+ required:
+ - issuerRef
+ - secretName
+ properties:
+ additionalOutputFormats:
+ description: "Defines extra output formats of the private key and signed certificate chain to be written to this Certificate's target Secret. \n This is an Alpha Feature and is only enabled with the `--feature-gates=AdditionalCertificateOutputFormats=true` option set on both the controller and webhook components."
+ type: array
+ items:
+ description: CertificateAdditionalOutputFormat defines an additional output format of a Certificate resource. These contain supplementary data formats of the signed certificate chain and paired private key.
+ type: object
+ required:
+ - type
+ properties:
+ type:
+ description: Type is the name of the format type that should be written to the Certificate's target Secret.
+ type: string
+ enum:
+ - DER
+ - CombinedPEM
+ commonName:
+ description: "Requested common name X509 certificate subject attribute. More info: https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6 NOTE: TLS clients will ignore this value when any subject alternative name is set (see https://tools.ietf.org/html/rfc6125#section-6.4.4). \n Should have a length of 64 characters or fewer to avoid generating invalid CSRs. Cannot be set if the `literalSubject` field is set."
+ type: string
+ dnsNames:
+ description: Requested DNS subject alternative names.
+ type: array
+ items:
+ type: string
+ duration:
+ description: "Requested 'duration' (i.e. lifetime) of the Certificate. Note that the issuer may choose to ignore the requested duration, just like any other requested attribute. \n If unset, this defaults to 90 days. Minimum accepted duration is 1 hour. Value must be in units accepted by Go time.ParseDuration https://golang.org/pkg/time/#ParseDuration."
+ type: string
+ emailAddresses:
+ description: Requested email subject alternative names.
+ type: array
+ items:
+ type: string
+ encodeUsagesInRequest:
+ description: "Whether the KeyUsage and ExtKeyUsage extensions should be set in the encoded CSR. \n This option defaults to true, and should only be disabled if the target issuer does not support CSRs with these X509 KeyUsage/ ExtKeyUsage extensions."
+ type: boolean
+ ipAddresses:
+ description: Requested IP address subject alternative names.
+ type: array
+ items:
+ type: string
+ isCA:
+ description: "Requested basic constraints isCA value. The isCA value is used to set the `isCA` field on the created CertificateRequest resources. Note that the issuer may choose to ignore the requested isCA value, just like any other requested attribute. \n If true, this will automatically add the `cert sign` usage to the list of requested `usages`."
+ type: boolean
+ issuerRef:
+ description: "Reference to the issuer responsible for issuing the certificate. If the issuer is namespace-scoped, it must be in the same namespace as the Certificate. If the issuer is cluster-scoped, it can be used from any namespace. \n The `name` field of the reference must always be specified."
+ type: object
+ required:
+ - name
+ properties:
+ group:
+ description: Group of the resource being referred to.
+ type: string
+ kind:
+ description: Kind of the resource being referred to.
+ type: string
+ name:
+ description: Name of the resource being referred to.
+ type: string
+ keystores:
+ description: Additional keystore output formats to be stored in the Certificate's Secret.
+ type: object
+ properties:
+ jks:
+ description: JKS configures options for storing a JKS keystore in the `spec.secretName` Secret resource.
+ type: object
+ required:
+ - create
+ - passwordSecretRef
+ properties:
+ create:
+ description: Create enables JKS keystore creation for the Certificate. If true, a file named `keystore.jks` will be created in the target Secret resource, encrypted using the password stored in `passwordSecretRef`. The keystore file will be updated immediately. If the issuer provided a CA certificate, a file named `truststore.jks` will also be created in the target Secret resource, encrypted using the password stored in `passwordSecretRef` containing the issuing Certificate Authority
+ type: boolean
+ passwordSecretRef:
+ description: PasswordSecretRef is a reference to a key in a Secret resource containing the password used to encrypt the JKS keystore.
+ type: object
+ required:
+ - name
+ properties:
+ key:
+ description: The key of the entry in the Secret resource's `data` field to be used. Some instances of this field may be defaulted, in others it may be required.
+ type: string
+ name:
+ description: 'Name of the resource being referred to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+ type: string
+ pkcs12:
+ description: PKCS12 configures options for storing a PKCS12 keystore in the `spec.secretName` Secret resource.
+ type: object
+ required:
+ - create
+ - passwordSecretRef
+ properties:
+ create:
+ description: Create enables PKCS12 keystore creation for the Certificate. If true, a file named `keystore.p12` will be created in the target Secret resource, encrypted using the password stored in `passwordSecretRef`. The keystore file will be updated immediately. If the issuer provided a CA certificate, a file named `truststore.p12` will also be created in the target Secret resource, encrypted using the password stored in `passwordSecretRef` containing the issuing Certificate Authority
+ type: boolean
+ passwordSecretRef:
+ description: PasswordSecretRef is a reference to a key in a Secret resource containing the password used to encrypt the PKCS12 keystore.
+ type: object
+ required:
+ - name
+ properties:
+ key:
+ description: The key of the entry in the Secret resource's `data` field to be used. Some instances of this field may be defaulted, in others it may be required.
+ type: string
+ name:
+ description: 'Name of the resource being referred to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+ type: string
+ profile:
+ description: "Profile specifies the key and certificate encryption algorithms and the HMAC algorithm used to create the PKCS12 keystore. Default value is `LegacyRC2` for backward compatibility. \n If provided, allowed values are: `LegacyRC2`: Deprecated. Not supported by default in OpenSSL 3 or Java 20. `LegacyDES`: Less secure algorithm. Use this option for maximal compatibility. `Modern2023`: Secure algorithm. Use this option in case you have to always use secure algorithms (eg. because of company policy). Please note that the security of the algorithm is not that important in reality, because the unencrypted certificate and private key are also stored in the Secret."
+ type: string
+ enum:
+ - LegacyRC2
+ - LegacyDES
+ - Modern2023
+ literalSubject:
+ description: "Requested X.509 certificate subject, represented using the LDAP \"String Representation of a Distinguished Name\" [1]. Important: the LDAP string format also specifies the order of the attributes in the subject, this is important when issuing certs for LDAP authentication. Example: `CN=foo,DC=corp,DC=example,DC=com` More info [1]: https://datatracker.ietf.org/doc/html/rfc4514 More info: https://github.com/cert-manager/cert-manager/issues/3203 More info: https://github.com/cert-manager/cert-manager/issues/4424 \n Cannot be set if the `subject` or `commonName` field is set. This is an Alpha Feature and is only enabled with the `--feature-gates=LiteralCertificateSubject=true` option set on both the controller and webhook components."
+ type: string
+ nameConstraints:
+ description: "x.509 certificate NameConstraint extension which MUST NOT be used in a non-CA certificate. More Info: https://datatracker.ietf.org/doc/html/rfc5280#section-4.2.1.10 \n This is an Alpha Feature and is only enabled with the `--feature-gates=NameConstraints=true` option set on both the controller and webhook components."
+ type: object
+ properties:
+ critical:
+ description: if true then the name constraints are marked critical.
+ type: boolean
+ excluded:
+ description: Excluded contains the constraints which must be disallowed. Any name matching a restriction in the excluded field is invalid regardless of information appearing in the permitted
+ type: object
+ properties:
+ dnsDomains:
+ description: DNSDomains is a list of DNS domains that are permitted or excluded.
+ type: array
+ items:
+ type: string
+ emailAddresses:
+ description: EmailAddresses is a list of Email Addresses that are permitted or excluded.
+ type: array
+ items:
+ type: string
+ ipRanges:
+ description: IPRanges is a list of IP Ranges that are permitted or excluded. This should be a valid CIDR notation.
+ type: array
+ items:
+ type: string
+ uriDomains:
+ description: URIDomains is a list of URI domains that are permitted or excluded.
+ type: array
+ items:
+ type: string
+ permitted:
+ description: Permitted contains the constraints in which the names must be located.
+ type: object
+ properties:
+ dnsDomains:
+ description: DNSDomains is a list of DNS domains that are permitted or excluded.
+ type: array
+ items:
+ type: string
+ emailAddresses:
+ description: EmailAddresses is a list of Email Addresses that are permitted or excluded.
+ type: array
+ items:
+ type: string
+ ipRanges:
+ description: IPRanges is a list of IP Ranges that are permitted or excluded. This should be a valid CIDR notation.
+ type: array
+ items:
+ type: string
+ uriDomains:
+ description: URIDomains is a list of URI domains that are permitted or excluded.
+ type: array
+ items:
+ type: string
+ otherNames:
+ description: '`otherNames` is an escape hatch for SAN that allows any type. We currently restrict the support to string like otherNames, cf RFC 5280 p 37 Any UTF8 String valued otherName can be passed with by setting the keys oid: x.x.x.x and UTF8Value: somevalue for `otherName`. Most commonly this would be UPN set with oid: 1.3.6.1.4.1.311.20.2.3 You should ensure that any OID passed is valid for the UTF8String type as we do not explicitly validate this.'
+ type: array
+ items:
+ type: object
+ properties:
+ oid:
+ description: OID is the object identifier for the otherName SAN. The object identifier must be expressed as a dotted string, for example, "1.2.840.113556.1.4.221".
+ type: string
+ utf8Value:
+ description: utf8Value is the string value of the otherName SAN. The utf8Value accepts any valid UTF8 string to set as value for the otherName SAN.
+ type: string
+ privateKey:
+ description: Private key options. These include the key algorithm and size, the used encoding and the rotation policy.
+ type: object
+ properties:
+ algorithm:
+ description: "Algorithm is the private key algorithm of the corresponding private key for this certificate. \n If provided, allowed values are either `RSA`, `ECDSA` or `Ed25519`. If `algorithm` is specified and `size` is not provided, key size of 2048 will be used for `RSA` key algorithm and key size of 256 will be used for `ECDSA` key algorithm. key size is ignored when using the `Ed25519` key algorithm."
+ type: string
+ enum:
+ - RSA
+ - ECDSA
+ - Ed25519
+ encoding:
+ description: "The private key cryptography standards (PKCS) encoding for this certificate's private key to be encoded in. \n If provided, allowed values are `PKCS1` and `PKCS8` standing for PKCS#1 and PKCS#8, respectively. Defaults to `PKCS1` if not specified."
+ type: string
+ enum:
+ - PKCS1
+ - PKCS8
+ rotationPolicy:
+ description: "RotationPolicy controls how private keys should be regenerated when a re-issuance is being processed. \n If set to `Never`, a private key will only be generated if one does not already exist in the target `spec.secretName`. If one does exists but it does not have the correct algorithm or size, a warning will be raised to await user intervention. If set to `Always`, a private key matching the specified requirements will be generated whenever a