Create wrraper for cert-manager
This commit is contained in:
parent
b7128b9cde
commit
fd1978c0ea
33
argocd-apps/cert-manager-stack.yaml
Normal file
33
argocd-apps/cert-manager-stack.yaml
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: cert-manager-stack
|
||||||
|
namespace: argocd
|
||||||
|
labels:
|
||||||
|
env: infra
|
||||||
|
spec:
|
||||||
|
project: infra
|
||||||
|
source:
|
||||||
|
repoURL: ssh://git@gitea-ssh.dev-tools.svc.cluster.local:2222/dvirlabs/infra.git
|
||||||
|
targetRevision: HEAD
|
||||||
|
path: charts/cert-manager-stack
|
||||||
|
helm:
|
||||||
|
valueFiles:
|
||||||
|
- ../../manifests/cert-manager-stack/values.yaml
|
||||||
|
destination:
|
||||||
|
server: https://kubernetes.default.svc
|
||||||
|
namespace: cert-manager
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
selfHeal: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
- ServerSideApply=true
|
||||||
|
# Retry policy for handling transient errors during sync
|
||||||
|
retry:
|
||||||
|
limit: 3
|
||||||
|
backoff:
|
||||||
|
duration: 5s
|
||||||
|
factor: 2
|
||||||
|
maxDuration: 3m
|
||||||
10
charts/cert-manager-stack/.gitignore
vendored
Normal file
10
charts/cert-manager-stack/.gitignore
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# Helm dependency charts
|
||||||
|
charts/
|
||||||
|
*.tgz
|
||||||
|
|
||||||
|
# Helm lock file (can be committed or ignored based on preference)
|
||||||
|
# Chart.lock
|
||||||
|
|
||||||
|
# Backup files
|
||||||
|
*.bak
|
||||||
|
*~
|
||||||
31
charts/cert-manager-stack/Chart.yaml
Normal file
31
charts/cert-manager-stack/Chart.yaml
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: cert-manager-stack
|
||||||
|
description: Wrapper Helm chart for cert-manager with Cloudflare DNS and Let's Encrypt ClusterIssuer
|
||||||
|
type: application
|
||||||
|
version: 1.0.0
|
||||||
|
appVersion: "v1.20.0"
|
||||||
|
kubeVersion: '>= 1.22.0-0'
|
||||||
|
|
||||||
|
# Dependencies - Local cert-manager chart
|
||||||
|
dependencies:
|
||||||
|
- name: cert-manager
|
||||||
|
version: "v1.20.0"
|
||||||
|
repository: "file://../cert-manager"
|
||||||
|
alias: certManager
|
||||||
|
condition: certManager.enabled
|
||||||
|
|
||||||
|
keywords:
|
||||||
|
- cert-manager
|
||||||
|
- letsencrypt
|
||||||
|
- tls
|
||||||
|
- acme
|
||||||
|
- cloudflare
|
||||||
|
- dns01
|
||||||
|
|
||||||
|
home: https://cert-manager.io
|
||||||
|
sources:
|
||||||
|
- https://github.com/cert-manager/cert-manager
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- name: dvirlabs
|
||||||
|
email: dvirlabs@gmail.com
|
||||||
309
charts/cert-manager-stack/README.md
Normal file
309
charts/cert-manager-stack/README.md
Normal file
@ -0,0 +1,309 @@
|
|||||||
|
# cert-manager-stack
|
||||||
|
|
||||||
|
A wrapper Helm chart that bundles [cert-manager](https://cert-manager.io) with pre-configured Cloudflare DNS-01 solver and Let's Encrypt ClusterIssuer for GitOps deployments.
|
||||||
|
|
||||||
|
## 📋 Overview
|
||||||
|
|
||||||
|
This chart provides a production-ready cert-manager deployment by:
|
||||||
|
|
||||||
|
- **Using cert-manager as a dependency** (pristine upstream chart, easily upgradable)
|
||||||
|
- **Adding custom resources** (Cloudflare API Secret, Let's Encrypt ClusterIssuer)
|
||||||
|
- **Single configuration file** (`manifests/cert-manager-stack/values.yaml`)
|
||||||
|
- **GitOps-friendly** (works seamlessly with ArgoCD)
|
||||||
|
|
||||||
|
## 🏗️ Architecture
|
||||||
|
|
||||||
|
```
|
||||||
|
cert-manager-stack (wrapper chart)
|
||||||
|
├── Dependency: cert-manager (local chart from ../cert-manager)
|
||||||
|
│ ├── CRDs (Certificate, ClusterIssuer, etc.)
|
||||||
|
│ ├── cert-manager controller
|
||||||
|
│ ├── cert-manager webhook
|
||||||
|
│ └── cert-manager cainjector
|
||||||
|
└── Custom Resources (from wrapper templates)
|
||||||
|
├── Secret: cloudflare-api-token
|
||||||
|
└── ClusterIssuer: letsencrypt
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📁 Files Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
charts/cert-manager-stack/
|
||||||
|
├── Chart.yaml # Wrapper chart definition
|
||||||
|
├── values.yaml # Default values (DO NOT EDIT)
|
||||||
|
├── templates/
|
||||||
|
│ ├── _helpers.tpl # Template helpers
|
||||||
|
│ ├── cloudflare-api-token-secret.yaml # Cloudflare API Secret
|
||||||
|
│ ├── clusterissuer-letsencrypt.yaml # Let's Encrypt ClusterIssuer
|
||||||
|
│ └── NOTES.txt # Post-install notes
|
||||||
|
└── README.md # This file
|
||||||
|
|
||||||
|
manifests/cert-manager-stack/
|
||||||
|
└── values.yaml # ✏️ EDIT THIS FILE
|
||||||
|
```
|
||||||
|
|
||||||
|
## ⚙️ Configuration
|
||||||
|
|
||||||
|
### Single Source of Truth
|
||||||
|
|
||||||
|
**`manifests/cert-manager-stack/values.yaml`** is the only file you need to edit.
|
||||||
|
|
||||||
|
### Configuration Structure
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# cert-manager upstream chart values
|
||||||
|
certManager:
|
||||||
|
enabled: true
|
||||||
|
crds:
|
||||||
|
enabled: true
|
||||||
|
prometheus:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
# Cloudflare DNS provider
|
||||||
|
cloudflare:
|
||||||
|
enabled: true
|
||||||
|
apiToken: "YOUR_CLOUDFLARE_API_TOKEN"
|
||||||
|
secretName: cloudflare-api-token
|
||||||
|
namespace: cert-manager
|
||||||
|
|
||||||
|
# Let's Encrypt ClusterIssuer
|
||||||
|
clusterIssuer:
|
||||||
|
enabled: true
|
||||||
|
name: letsencrypt
|
||||||
|
email: dvirlabs@gmail.com
|
||||||
|
server: https://acme-v02.api.letsencrypt.org/directory
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🚀 ArgoCD Integration
|
||||||
|
|
||||||
|
Create an ArgoCD Application:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# argocd-apps/cert-manager-stack.yaml
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: cert-manager-stack
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: default
|
||||||
|
source:
|
||||||
|
repoURL: <your-git-repo>
|
||||||
|
targetRevision: HEAD
|
||||||
|
path: charts/cert-manager-stack
|
||||||
|
helm:
|
||||||
|
valueFiles:
|
||||||
|
- ../../manifests/cert-manager-stack/values.yaml
|
||||||
|
destination:
|
||||||
|
server: https://kubernetes.default.svc
|
||||||
|
namespace: cert-manager
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
selfHeal: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
```
|
||||||
|
|
||||||
|
ArgoCD will:
|
||||||
|
1. Read the wrapper chart from `charts/cert-manager-stack/`
|
||||||
|
2. Load cert-manager dependency from local `charts/cert-manager/`
|
||||||
|
3. Apply values from `manifests/cert-manager-stack/values.yaml`
|
||||||
|
4. Deploy everything as a unified Helm release
|
||||||
|
|
||||||
|
## 📦 Installation
|
||||||
|
|
||||||
|
### Manual Installation (for testing)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Navigate to chart directory
|
||||||
|
cd charts/cert-manager-stack
|
||||||
|
|
||||||
|
# Update dependencies
|
||||||
|
helm dependency update
|
||||||
|
|
||||||
|
# Install
|
||||||
|
helm install cert-manager-stack . \
|
||||||
|
--namespace cert-manager \
|
||||||
|
--create-namespace \
|
||||||
|
--values ../../manifests/cert-manager-stack/values.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
### GitOps Installation (recommended)
|
||||||
|
|
||||||
|
1. Update your Cloudflare API token in `manifests/cert-manager-stack/values.yaml`
|
||||||
|
2. Commit and push to Git
|
||||||
|
3. ArgoCD will automatically sync and deploy
|
||||||
|
|
||||||
|
## 🔄 Upgrading cert-manager
|
||||||
|
|
||||||
|
To upgrade to a newer cert-manager version:
|
||||||
|
|
||||||
|
1. Update the local cert-manager chart in `charts/cert-manager/`
|
||||||
|
2. Edit `charts/cert-manager-stack/Chart.yaml`
|
||||||
|
3. Update the dependency version to match:
|
||||||
|
```yaml
|
||||||
|
dependencies:
|
||||||
|
- name: cert-manager
|
||||||
|
version: "v1.21.0" # Update this to match local chart
|
||||||
|
repository: "file://../cert-manager"
|
||||||
|
```
|
||||||
|
4. Commit and push
|
||||||
|
5. ArgoCD will handle the upgrade
|
||||||
|
|
||||||
|
## ✅ Why This Approach?
|
||||||
|
|
||||||
|
### ❌ What We're NOT Doing:
|
||||||
|
- Forking/modifying the upstream cert-manager chart
|
||||||
|
- Manual `kubectl apply` for Secret/ClusterIssuer
|
||||||
|
- Embedding resources in cert-manager's values
|
||||||
|
- Using hacks like `extraObjects`
|
||||||
|
|
||||||
|
### ✅ What We ARE Doing:
|
||||||
|
- **Clean dependency management** - cert-manager stays pristine
|
||||||
|
- **Single Helm release** - all resources managed together
|
||||||
|
- **GitOps native** - no manual steps
|
||||||
|
- **Helm best practices** - proper dependency and values structure
|
||||||
|
- **Easy upgrades** - just bump the version number
|
||||||
|
- **Migration-ready** - clean path to External Secrets/Vault
|
||||||
|
|
||||||
|
### Benefits Over Modifying Upstream Chart:
|
||||||
|
|
||||||
|
1. **Upgradability**: Can upgrade cert-manager without merge conflicts
|
||||||
|
2. **Clarity**: Separation between upstream and custom resources
|
||||||
|
3. **Maintainability**: Upstream chart bugs/fixes don't affect custom logic
|
||||||
|
4. **Reusability**: Can apply same pattern to other charts
|
||||||
|
5. **Audibility**: Clear distinction in Git history
|
||||||
|
|
||||||
|
## 📝 Usage Examples
|
||||||
|
|
||||||
|
### Create a Certificate
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: cert-manager.io/v1
|
||||||
|
kind: Certificate
|
||||||
|
metadata:
|
||||||
|
name: my-app-tls
|
||||||
|
namespace: my-app
|
||||||
|
spec:
|
||||||
|
secretName: my-app-tls-secret
|
||||||
|
issuerRef:
|
||||||
|
name: letsencrypt
|
||||||
|
kind: ClusterIssuer
|
||||||
|
dnsNames:
|
||||||
|
- myapp.example.com
|
||||||
|
- "*.myapp.example.com"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Use with Ingress
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: my-app-ingress
|
||||||
|
annotations:
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt
|
||||||
|
spec:
|
||||||
|
tls:
|
||||||
|
- hosts:
|
||||||
|
- myapp.example.com
|
||||||
|
secretName: my-app-tls
|
||||||
|
rules:
|
||||||
|
- host: myapp.example.com
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: my-app-service
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔐 Migrating to External Secrets
|
||||||
|
|
||||||
|
When ready to move from raw Secrets to External Secrets:
|
||||||
|
|
||||||
|
1. Create a new template `templates/cloudflare-external-secret.yaml`:
|
||||||
|
```yaml
|
||||||
|
{{- if .Values.cloudflare.useExternalSecret }}
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: cloudflare-api-token
|
||||||
|
namespace: cert-manager
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
name: vault-backend
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
target:
|
||||||
|
name: cloudflare-api-token
|
||||||
|
data:
|
||||||
|
- secretKey: api-token
|
||||||
|
remoteRef:
|
||||||
|
key: cloudflare/api-token
|
||||||
|
{{- end }}
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Update `manifests/cert-manager-stack/values.yaml`:
|
||||||
|
```yaml
|
||||||
|
cloudflare:
|
||||||
|
enabled: false # Disable raw Secret
|
||||||
|
useExternalSecret: true # Enable ExternalSecret
|
||||||
|
secretName: cloudflare-api-token # Keep same name
|
||||||
|
```
|
||||||
|
|
||||||
|
3. No changes needed to ClusterIssuer (references same secret name)
|
||||||
|
|
||||||
|
## 🔍 Troubleshooting
|
||||||
|
|
||||||
|
### Check cert-manager logs
|
||||||
|
```bash
|
||||||
|
kubectl logs -n cert-manager deploy/cert-manager-stack-certManager
|
||||||
|
```
|
||||||
|
|
||||||
|
### Check ClusterIssuer status
|
||||||
|
```bash
|
||||||
|
kubectl describe clusterissuer letsencrypt
|
||||||
|
kubectl get clusterissuer letsencrypt -o yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
### Check Certificate status
|
||||||
|
```bash
|
||||||
|
kubectl describe certificate my-app-tls -n my-app
|
||||||
|
kubectl get certificaterequest -n my-app
|
||||||
|
```
|
||||||
|
|
||||||
|
### Verify Cloudflare secret
|
||||||
|
```bash
|
||||||
|
kubectl get secret cloudflare-api-token -n cert-manager
|
||||||
|
kubectl describe secret cloudflare-api-token -n cert-manager
|
||||||
|
```
|
||||||
|
|
||||||
|
### Check ACME challenges
|
||||||
|
```bash
|
||||||
|
kubectl get challenges --all-namespaces
|
||||||
|
kubectl describe challenge <challenge-name> -n <namespace>
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📚 References
|
||||||
|
|
||||||
|
- [cert-manager Documentation](https://cert-manager.io/docs/)
|
||||||
|
- [Cloudflare DNS-01 Challenge](https://cert-manager.io/docs/configuration/acme/dns01/cloudflare/)
|
||||||
|
- [Let's Encrypt Documentation](https://letsencrypt.org/docs/)
|
||||||
|
- [Helm Dependencies](https://helm.sh/docs/helm/helm_dependency/)
|
||||||
|
|
||||||
|
## 🤝 Contributing
|
||||||
|
|
||||||
|
To improve this wrapper chart:
|
||||||
|
|
||||||
|
1. Edit files in `charts/cert-manager-stack/`
|
||||||
|
2. Test with `helm template` or `helm install --dry-run`
|
||||||
|
3. Update `manifests/cert-manager-stack/values.yaml` if needed
|
||||||
|
4. Commit and create a PR
|
||||||
|
|
||||||
|
## 📄 License
|
||||||
|
|
||||||
|
This wrapper chart follows the same license as cert-manager (Apache 2.0).
|
||||||
80
charts/cert-manager-stack/templates/NOTES.txt
Normal file
80
charts/cert-manager-stack/templates/NOTES.txt
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
cert-manager-stack has been successfully installed!
|
||||||
|
|
||||||
|
This chart includes:
|
||||||
|
✓ cert-manager core (controller, webhook, cainjector)
|
||||||
|
{{- if .Values.cloudflare.enabled }}
|
||||||
|
✓ Cloudflare API token secret: {{ .Values.cloudflare.namespace }}/{{ .Values.cloudflare.secretName }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.clusterIssuer.enabled }}
|
||||||
|
✓ ClusterIssuer: {{ .Values.clusterIssuer.name }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
{{- if .Values.clusterIssuer.enabled }}
|
||||||
|
🎉 ClusterIssuer Ready!
|
||||||
|
|
||||||
|
Name: {{ .Values.clusterIssuer.name }}
|
||||||
|
Email: {{ .Values.clusterIssuer.email }}
|
||||||
|
Server: {{ .Values.clusterIssuer.server }}
|
||||||
|
|
||||||
|
To verify ClusterIssuer status:
|
||||||
|
kubectl describe clusterissuer {{ .Values.clusterIssuer.name }}
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
📝 Usage Example - Certificate Resource:
|
||||||
|
|
||||||
|
apiVersion: cert-manager.io/v1
|
||||||
|
kind: Certificate
|
||||||
|
metadata:
|
||||||
|
name: example-tls
|
||||||
|
namespace: default
|
||||||
|
spec:
|
||||||
|
secretName: example-tls-secret
|
||||||
|
issuerRef:
|
||||||
|
name: {{ .Values.clusterIssuer.name }}
|
||||||
|
kind: ClusterIssuer
|
||||||
|
dnsNames:
|
||||||
|
- example.com
|
||||||
|
- "*.example.com"
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
📝 Usage Example - Ingress with Annotations:
|
||||||
|
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: example-ingress
|
||||||
|
annotations:
|
||||||
|
cert-manager.io/cluster-issuer: {{ .Values.clusterIssuer.name }}
|
||||||
|
spec:
|
||||||
|
tls:
|
||||||
|
- hosts:
|
||||||
|
- example.com
|
||||||
|
secretName: example-tls
|
||||||
|
rules:
|
||||||
|
- host: example.com
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: example-service
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
|
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
📚 Resources:
|
||||||
|
cert-manager docs: https://cert-manager.io/docs/
|
||||||
|
Configuration: manifests/cert-manager-stack/values.yaml
|
||||||
|
Chart source: charts/cert-manager-stack/
|
||||||
|
|
||||||
|
🔍 Troubleshooting:
|
||||||
|
kubectl logs -n cert-manager deploy/cert-manager-stack-certManager
|
||||||
|
kubectl get clusterissuer,certificate --all-namespaces
|
||||||
50
charts/cert-manager-stack/templates/_helpers.tpl
Normal file
50
charts/cert-manager-stack/templates/_helpers.tpl
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
{{/*
|
||||||
|
Expand the name of the chart.
|
||||||
|
*/}}
|
||||||
|
{{- define "cert-manager-stack.name" -}}
|
||||||
|
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create a default fully qualified app name.
|
||||||
|
*/}}
|
||||||
|
{{- define "cert-manager-stack.fullname" -}}
|
||||||
|
{{- if .Values.fullnameOverride }}
|
||||||
|
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- else }}
|
||||||
|
{{- $name := default .Chart.Name .Values.nameOverride }}
|
||||||
|
{{- if contains $name .Release.Name }}
|
||||||
|
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- else }}
|
||||||
|
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create chart name and version as used by the chart label.
|
||||||
|
*/}}
|
||||||
|
{{- define "cert-manager-stack.chart" -}}
|
||||||
|
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Common labels
|
||||||
|
*/}}
|
||||||
|
{{- define "cert-manager-stack.labels" -}}
|
||||||
|
helm.sh/chart: {{ include "cert-manager-stack.chart" . }}
|
||||||
|
{{ include "cert-manager-stack.selectorLabels" . }}
|
||||||
|
{{- if .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||||
|
{{- end }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/part-of: cert-manager-stack
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Selector labels
|
||||||
|
*/}}
|
||||||
|
{{- define "cert-manager-stack.selectorLabels" -}}
|
||||||
|
app.kubernetes.io/name: {{ include "cert-manager-stack.name" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- end }}
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
{{- if .Values.cloudflare.enabled }}
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: {{ .Values.cloudflare.secretName }}
|
||||||
|
namespace: {{ .Values.cloudflare.namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "cert-manager-stack.labels" . | nindent 4 }}
|
||||||
|
app.kubernetes.io/component: dns-solver
|
||||||
|
annotations:
|
||||||
|
argocd.argoproj.io/sync-wave: "1"
|
||||||
|
type: Opaque
|
||||||
|
stringData:
|
||||||
|
{{ .Values.cloudflare.secretKey }}: {{ .Values.cloudflare.apiToken | quote }}
|
||||||
|
{{- end }}
|
||||||
@ -0,0 +1,31 @@
|
|||||||
|
{{- if .Values.clusterIssuer.enabled }}
|
||||||
|
---
|
||||||
|
apiVersion: cert-manager.io/v1
|
||||||
|
kind: ClusterIssuer
|
||||||
|
metadata:
|
||||||
|
name: {{ .Values.clusterIssuer.name }}
|
||||||
|
labels:
|
||||||
|
{{- include "cert-manager-stack.labels" . | nindent 4 }}
|
||||||
|
app.kubernetes.io/component: issuer
|
||||||
|
annotations:
|
||||||
|
argocd.argoproj.io/sync-wave: "2"
|
||||||
|
spec:
|
||||||
|
acme:
|
||||||
|
# ACME server URL (Let's Encrypt)
|
||||||
|
server: {{ .Values.clusterIssuer.server }}
|
||||||
|
|
||||||
|
# Email address for ACME registration and expiration notifications
|
||||||
|
email: {{ .Values.clusterIssuer.email }}
|
||||||
|
|
||||||
|
# Name of the secret used to store the ACME account private key
|
||||||
|
privateKeySecretRef:
|
||||||
|
name: {{ .Values.clusterIssuer.privateKeySecretRef.name }}
|
||||||
|
|
||||||
|
# DNS-01 challenge solver using Cloudflare
|
||||||
|
solvers:
|
||||||
|
- dns01:
|
||||||
|
cloudflare:
|
||||||
|
apiTokenSecretRef:
|
||||||
|
name: {{ .Values.clusterIssuer.dns01.cloudflare.apiTokenSecretRef.name }}
|
||||||
|
key: {{ .Values.clusterIssuer.dns01.cloudflare.apiTokenSecretRef.key }}
|
||||||
|
{{- end }}
|
||||||
75
charts/cert-manager-stack/values.yaml
Normal file
75
charts/cert-manager-stack/values.yaml
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
# Default values for cert-manager-stack wrapper chart
|
||||||
|
# This chart bundles cert-manager with custom ClusterIssuer and Cloudflare DNS solver
|
||||||
|
#
|
||||||
|
# IMPORTANT: Edit manifests/cert-manager-stack/values.yaml instead of this file
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# cert-manager Upstream Chart Values
|
||||||
|
# All values under this key are passed to the cert-manager dependency
|
||||||
|
# =============================================================================
|
||||||
|
certManager:
|
||||||
|
# Enable cert-manager installation
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
# Install CRDs as part of the chart
|
||||||
|
crds:
|
||||||
|
enabled: true
|
||||||
|
keep: true
|
||||||
|
|
||||||
|
# Prometheus monitoring
|
||||||
|
prometheus:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
# Additional cert-manager values can be added here
|
||||||
|
# See: https://github.com/cert-manager/cert-manager/blob/master/deploy/charts/cert-manager/values.yaml
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# Cloudflare DNS Provider Configuration
|
||||||
|
# =============================================================================
|
||||||
|
cloudflare:
|
||||||
|
# Enable/disable Cloudflare API token secret creation
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
# Cloudflare API token for DNS-01 challenge
|
||||||
|
# WARNING: Override this in manifests/cert-manager-stack/values.yaml
|
||||||
|
# Consider migrating to External Secrets or Vault for production
|
||||||
|
apiToken: ""
|
||||||
|
|
||||||
|
# Secret name that will be created
|
||||||
|
secretName: cloudflare-api-token
|
||||||
|
|
||||||
|
# Secret key name
|
||||||
|
secretKey: api-token
|
||||||
|
|
||||||
|
# Namespace for the secret (should match cert-manager namespace)
|
||||||
|
namespace: cert-manager
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# ClusterIssuer Configuration (Let's Encrypt)
|
||||||
|
# =============================================================================
|
||||||
|
clusterIssuer:
|
||||||
|
# Enable/disable ClusterIssuer creation
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
# ClusterIssuer name
|
||||||
|
name: letsencrypt
|
||||||
|
|
||||||
|
# Email for Let's Encrypt registration and notifications
|
||||||
|
email: dvirlabs@gmail.com
|
||||||
|
|
||||||
|
# ACME server URL
|
||||||
|
# Production: https://acme-v02.api.letsencrypt.org/directory
|
||||||
|
# Staging (for testing): https://acme-staging-v02.api.letsencrypt.org/directory
|
||||||
|
server: https://acme-v02.api.letsencrypt.org/directory
|
||||||
|
|
||||||
|
# Secret name for ACME account private key
|
||||||
|
privateKeySecretRef:
|
||||||
|
name: letsencrypt-account-key
|
||||||
|
|
||||||
|
# DNS-01 solver configuration using Cloudflare
|
||||||
|
dns01:
|
||||||
|
cloudflare:
|
||||||
|
# Reference to Cloudflare API token secret
|
||||||
|
apiTokenSecretRef:
|
||||||
|
name: cloudflare-api-token
|
||||||
|
key: api-token
|
||||||
File diff suppressed because it is too large
Load Diff
@ -1,29 +0,0 @@
|
|||||||
{{- if .Values.installCRDs }}
|
|
||||||
⚠️ WARNING: `installCRDs` is deprecated, use `crds.enabled` instead.
|
|
||||||
|
|
||||||
{{- end }}
|
|
||||||
{{- if or .Values.image.registry .Values.webhook.image.registry .Values.cainjector.image.registry .Values.startupapicheck.image.registry .Values.acmesolver.image.registry }}
|
|
||||||
⚠️ WARNING: `*.image.registry` is deprecated. Prefer using the global `imageRegistry` value.
|
|
||||||
|
|
||||||
{{- end }}
|
|
||||||
cert-manager {{ .Chart.AppVersion }} has been deployed successfully!
|
|
||||||
|
|
||||||
In order to begin issuing certificates, you will need to set up a ClusterIssuer
|
|
||||||
or Issuer resource (for example, by creating a 'letsencrypt-staging' issuer).
|
|
||||||
|
|
||||||
More information on the different types of issuers and how to configure them
|
|
||||||
can be found in our documentation:
|
|
||||||
|
|
||||||
https://cert-manager.io/docs/configuration/
|
|
||||||
|
|
||||||
For information on how to configure cert-manager to automatically provision
|
|
||||||
Certificates for Ingress resources, take a look at the `ingress-shim`
|
|
||||||
documentation:
|
|
||||||
|
|
||||||
https://cert-manager.io/docs/usage/ingress/
|
|
||||||
|
|
||||||
For information on how to configure cert-manager to automatically provision
|
|
||||||
Certificates for Gateway API resources, take a look at the `gateway resource`
|
|
||||||
documentation:
|
|
||||||
|
|
||||||
https://cert-manager.io/docs/usage/gateway/
|
|
||||||
@ -1,267 +0,0 @@
|
|||||||
{{/* vim: set filetype=mustache: */}}
|
|
||||||
{{/*
|
|
||||||
Expand the name of the chart.
|
|
||||||
*/}}
|
|
||||||
{{- define "cert-manager.name" -}}
|
|
||||||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{/*
|
|
||||||
Create a default fully qualified app name.
|
|
||||||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
|
||||||
*/}}
|
|
||||||
{{- define "cert-manager.fullname" -}}
|
|
||||||
{{- if .Values.fullnameOverride -}}
|
|
||||||
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
|
||||||
{{- else -}}
|
|
||||||
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
|
||||||
{{- if contains $name .Release.Name -}}
|
|
||||||
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
|
|
||||||
{{- else -}}
|
|
||||||
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
|
||||||
{{- end -}}
|
|
||||||
{{- end -}}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{/*
|
|
||||||
Create the name of the service account to use
|
|
||||||
*/}}
|
|
||||||
{{- define "cert-manager.serviceAccountName" -}}
|
|
||||||
{{- if .Values.serviceAccount.create -}}
|
|
||||||
{{ default (include "cert-manager.fullname" .) .Values.serviceAccount.name }}
|
|
||||||
{{- else -}}
|
|
||||||
{{ default "default" .Values.serviceAccount.name }}
|
|
||||||
{{- end -}}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{/*
|
|
||||||
Webhook templates
|
|
||||||
*/}}
|
|
||||||
|
|
||||||
{{/*
|
|
||||||
Expand the name of the chart.
|
|
||||||
Manually fix the 'app' and 'name' labels to 'webhook' to maintain
|
|
||||||
compatibility with the v0.9 deployment selector.
|
|
||||||
*/}}
|
|
||||||
{{- define "webhook.name" -}}
|
|
||||||
{{- printf "webhook" -}}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{/*
|
|
||||||
Create a default fully qualified app name.
|
|
||||||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
|
||||||
If release name contains chart name it will be used as a full name.
|
|
||||||
*/}}
|
|
||||||
{{- define "webhook.fullname" -}}
|
|
||||||
{{- $trimmedName := printf "%s" (include "cert-manager.fullname" .) | trunc 55 | trimSuffix "-" -}}
|
|
||||||
{{- printf "%s-webhook" $trimmedName | trunc 63 | trimSuffix "-" -}}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{- define "webhook.caRef" -}}
|
|
||||||
{{- template "cert-manager.namespace" }}/{{ template "webhook.fullname" . }}-ca
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{/*
|
|
||||||
Create the name of the service account to use
|
|
||||||
*/}}
|
|
||||||
{{- define "webhook.serviceAccountName" -}}
|
|
||||||
{{- if .Values.webhook.serviceAccount.create -}}
|
|
||||||
{{ default (include "webhook.fullname" .) .Values.webhook.serviceAccount.name }}
|
|
||||||
{{- else -}}
|
|
||||||
{{ default "default" .Values.webhook.serviceAccount.name }}
|
|
||||||
{{- end -}}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{/*
|
|
||||||
cainjector templates
|
|
||||||
*/}}
|
|
||||||
|
|
||||||
{{/*
|
|
||||||
Expand the name of the chart.
|
|
||||||
Manually fix the 'app' and 'name' labels to 'cainjector' to maintain
|
|
||||||
compatibility with the v0.9 deployment selector.
|
|
||||||
*/}}
|
|
||||||
{{- define "cainjector.name" -}}
|
|
||||||
{{- printf "cainjector" -}}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{/*
|
|
||||||
Create a default fully qualified app name.
|
|
||||||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
|
||||||
If release name contains chart name it will be used as a full name.
|
|
||||||
*/}}
|
|
||||||
{{- define "cainjector.fullname" -}}
|
|
||||||
{{- $trimmedName := printf "%s" (include "cert-manager.fullname" .) | trunc 52 | trimSuffix "-" -}}
|
|
||||||
{{- printf "%s-cainjector" $trimmedName | trunc 63 | trimSuffix "-" -}}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{/*
|
|
||||||
Create the name of the service account to use
|
|
||||||
*/}}
|
|
||||||
{{- define "cainjector.serviceAccountName" -}}
|
|
||||||
{{- if .Values.cainjector.serviceAccount.create -}}
|
|
||||||
{{ default (include "cainjector.fullname" .) .Values.cainjector.serviceAccount.name }}
|
|
||||||
{{- else -}}
|
|
||||||
{{ default "default" .Values.cainjector.serviceAccount.name }}
|
|
||||||
{{- end -}}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{/*
|
|
||||||
startupapicheck templates
|
|
||||||
*/}}
|
|
||||||
|
|
||||||
{{/*
|
|
||||||
Expand the name of the chart.
|
|
||||||
Manually fix the 'app' and 'name' labels to 'startupapicheck' to maintain
|
|
||||||
compatibility with the v0.9 deployment selector.
|
|
||||||
*/}}
|
|
||||||
{{- define "startupapicheck.name" -}}
|
|
||||||
{{- printf "startupapicheck" -}}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{/*
|
|
||||||
Create a default fully qualified app name.
|
|
||||||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
|
||||||
If release name contains chart name it will be used as a full name.
|
|
||||||
*/}}
|
|
||||||
{{- define "startupapicheck.fullname" -}}
|
|
||||||
{{- $trimmedName := printf "%s" (include "cert-manager.fullname" .) | trunc 52 | trimSuffix "-" -}}
|
|
||||||
{{- printf "%s-startupapicheck" $trimmedName | trunc 63 | trimSuffix "-" -}}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{/*
|
|
||||||
Create the name of the service account to use
|
|
||||||
*/}}
|
|
||||||
{{- define "startupapicheck.serviceAccountName" -}}
|
|
||||||
{{- if .Values.startupapicheck.serviceAccount.create -}}
|
|
||||||
{{ default (include "startupapicheck.fullname" .) .Values.startupapicheck.serviceAccount.name }}
|
|
||||||
{{- else -}}
|
|
||||||
{{ default "default" .Values.startupapicheck.serviceAccount.name }}
|
|
||||||
{{- end -}}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{/*
|
|
||||||
Create chart name and version as used by the chart label.
|
|
||||||
*/}}
|
|
||||||
{{- define "chartName" -}}
|
|
||||||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{/*
|
|
||||||
Labels that should be added on each resource
|
|
||||||
*/}}
|
|
||||||
{{- define "labels" -}}
|
|
||||||
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
|
||||||
{{- if eq .Values.creator "helm" }}
|
|
||||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
|
||||||
helm.sh/chart: {{ include "chartName" . }}
|
|
||||||
{{- end -}}
|
|
||||||
{{- if .Values.global.commonLabels}}
|
|
||||||
{{ toYaml .Values.global.commonLabels }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{/*
|
|
||||||
Namespace for all resources to be installed into
|
|
||||||
If not defined in values file then the helm release namespace is used
|
|
||||||
By default this is not set so the helm release namespace will be used
|
|
||||||
|
|
||||||
This gets around an problem within helm discussed here
|
|
||||||
https://github.com/helm/helm/issues/5358
|
|
||||||
*/}}
|
|
||||||
{{- define "cert-manager.namespace" -}}
|
|
||||||
{{ .Values.namespace | default .Release.Namespace }}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{/*
|
|
||||||
Util function for generating the image URL based on the provided options.
|
|
||||||
IMPORTANT: This function is standardized across all charts in the cert-manager GH organization.
|
|
||||||
Any changes to this function should also be made in cert-manager, trust-manager, approver-policy, ...
|
|
||||||
See https://github.com/cert-manager/cert-manager/issues/6329 for a list of linked PRs.
|
|
||||||
*/}}
|
|
||||||
{{- define "image" -}}
|
|
||||||
{{- /*
|
|
||||||
Calling convention:
|
|
||||||
|
|
||||||
- (tuple <imageValues> <imageRegistry> <imageNamespace> <defaultReference>)
|
|
||||||
|
|
||||||
We intentionally pass imageRegistry/imageNamespace as explicit arguments rather than reading
|
|
||||||
from `.Values` inside this helper, because `helm-tool lint` does not reliably track `.Values.*`
|
|
||||||
usage through tuple/variable indirection.
|
|
||||||
*/ -}}
|
|
||||||
|
|
||||||
{{- if ne (len .) 4 -}}
|
|
||||||
{{- fail (printf "ERROR: template \"image\" expects (tuple <imageValues> <imageRegistry> <imageNamespace> <defaultReference>), got %d arguments" (len .)) -}}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{- $image := index . 0 -}}
|
|
||||||
{{- $imageRegistry := index . 1 | default "" -}}
|
|
||||||
{{- $imageNamespace := index . 2 | default "" -}}
|
|
||||||
{{- $defaultReference := index . 3 -}}
|
|
||||||
|
|
||||||
{{- $repository := "" -}}
|
|
||||||
{{- if $image.repository -}}
|
|
||||||
{{- $repository = $image.repository -}}
|
|
||||||
|
|
||||||
{{- /*
|
|
||||||
Backwards compatibility: if image.registry is set, additionally prefix the repository with this registry.
|
|
||||||
*/ -}}
|
|
||||||
{{- if $image.registry -}}
|
|
||||||
{{- $repository = printf "%s/%s" $image.registry $repository -}}
|
|
||||||
{{- end -}}
|
|
||||||
{{- else -}}
|
|
||||||
{{- $name := required "ERROR: image.name must be set when image.repository is empty" $image.name -}}
|
|
||||||
{{- $repository = $name -}}
|
|
||||||
|
|
||||||
{{- if $imageNamespace -}}
|
|
||||||
{{- $repository = printf "%s/%s" $imageNamespace $repository -}}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{- if $imageRegistry -}}
|
|
||||||
{{- $repository = printf "%s/%s" $imageRegistry $repository -}}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{- /*
|
|
||||||
Backwards compatibility: if image.registry is set, additionally prefix the repository with this registry.
|
|
||||||
*/ -}}
|
|
||||||
{{- if $image.registry -}}
|
|
||||||
{{- $repository = printf "%s/%s" $image.registry $repository -}}
|
|
||||||
{{- end -}}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{- $repository -}}
|
|
||||||
{{- if and $image.tag $image.digest -}}
|
|
||||||
{{- printf ":%s@%s" $image.tag $image.digest -}}
|
|
||||||
{{- else if $image.tag -}}
|
|
||||||
{{- printf ":%s" $image.tag -}}
|
|
||||||
{{- else if $image.digest -}}
|
|
||||||
{{- printf "@%s" $image.digest -}}
|
|
||||||
{{- else -}}
|
|
||||||
{{- printf "%s" $defaultReference -}}
|
|
||||||
{{- end -}}
|
|
||||||
{{- end }}
|
|
||||||
|
|
||||||
{{/*
|
|
||||||
Labels for the CRD resources.
|
|
||||||
*/}}
|
|
||||||
{{- define "cert-manager.crd-labels" -}}
|
|
||||||
app: "{{ template "cert-manager.name" . }}"
|
|
||||||
app.kubernetes.io/name: "{{ template "cert-manager.name" . }}"
|
|
||||||
app.kubernetes.io/instance: "{{ .Release.Name }}"
|
|
||||||
app.kubernetes.io/component: "crds"
|
|
||||||
{{ include "labels" . }}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{/*
|
|
||||||
Check that the user has not set both .installCRDs and .crds.enabled or
|
|
||||||
set .installCRDs and disabled .crds.keep.
|
|
||||||
.installCRDs is deprecated and users should use .crds.enabled and .crds.keep instead.
|
|
||||||
*/}}
|
|
||||||
{{- define "cert-manager.crd-check" -}}
|
|
||||||
{{- if and (.Values.installCRDs) (.Values.crds.enabled) }}
|
|
||||||
{{- fail "ERROR: the deprecated .installCRDs option cannot be enabled at the same time as its replacement .crds.enabled" }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if and (.Values.installCRDs) (not .Values.crds.keep) }}
|
|
||||||
{{- fail "ERROR: .crds.keep is not compatible with .installCRDs, please use .crds.enabled and .crds.keep instead" }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end -}}
|
|
||||||
@ -1,19 +0,0 @@
|
|||||||
{{- if .Values.cainjector.config -}}
|
|
||||||
{{- $config := .Values.cainjector.config -}}
|
|
||||||
{{- $_ := set $config "apiVersion" (default "cainjector.config.cert-manager.io/v1alpha1" $config.apiVersion) -}}
|
|
||||||
{{- $_ := set $config "kind" (default "CAInjectorConfiguration" $config.kind) -}}
|
|
||||||
apiVersion: v1
|
|
||||||
kind: ConfigMap
|
|
||||||
metadata:
|
|
||||||
name: {{ include "cainjector.fullname" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "cainjector"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
data:
|
|
||||||
config.yaml: |
|
|
||||||
{{- $config | toYaml | nindent 4 }}
|
|
||||||
{{- end -}}
|
|
||||||
@ -1,173 +0,0 @@
|
|||||||
{{- if .Values.cainjector.enabled }}
|
|
||||||
apiVersion: apps/v1
|
|
||||||
kind: Deployment
|
|
||||||
metadata:
|
|
||||||
name: {{ include "cainjector.fullname" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "cainjector"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
{{- with .Values.cainjector.deploymentAnnotations }}
|
|
||||||
annotations:
|
|
||||||
{{- toYaml . | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
spec:
|
|
||||||
replicas: {{ .Values.cainjector.replicaCount }}
|
|
||||||
{{- /* The if statement below is equivalent to {{- if $value }} but will also return true for 0. */ -}}
|
|
||||||
{{- if not (has (quote .Values.global.revisionHistoryLimit) (list "" (quote ""))) }}
|
|
||||||
revisionHistoryLimit: {{ .Values.global.revisionHistoryLimit }}
|
|
||||||
{{- end }}
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app.kubernetes.io/name: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "cainjector"
|
|
||||||
{{- with .Values.cainjector.strategy }}
|
|
||||||
strategy:
|
|
||||||
{{- toYaml . | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "cainjector"
|
|
||||||
{{- include "labels" . | nindent 8 }}
|
|
||||||
{{- with .Values.cainjector.podLabels }}
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.cainjector.podAnnotations }}
|
|
||||||
annotations:
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if and .Values.prometheus.enabled (not (or .Values.prometheus.servicemonitor.enabled .Values.prometheus.podmonitor.enabled)) }}
|
|
||||||
{{- if not .Values.cainjector.podAnnotations }}
|
|
||||||
annotations:
|
|
||||||
{{- end }}
|
|
||||||
prometheus.io/path: "/metrics"
|
|
||||||
prometheus.io/scrape: 'true'
|
|
||||||
prometheus.io/port: '9402'
|
|
||||||
{{- end }}
|
|
||||||
spec:
|
|
||||||
{{- if not .Values.cainjector.serviceAccount.create }}
|
|
||||||
{{- with .Values.global.imagePullSecrets }}
|
|
||||||
imagePullSecrets:
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
serviceAccountName: {{ template "cainjector.serviceAccountName" . }}
|
|
||||||
{{- if hasKey .Values.cainjector "automountServiceAccountToken" }}
|
|
||||||
automountServiceAccountToken: {{ .Values.cainjector.automountServiceAccountToken }}
|
|
||||||
{{- end }}
|
|
||||||
enableServiceLinks: {{ .Values.cainjector.enableServiceLinks }}
|
|
||||||
{{- with .Values.global.priorityClassName }}
|
|
||||||
priorityClassName: {{ . | quote }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if (hasKey .Values.global "hostUsers") }}
|
|
||||||
hostUsers: {{ .Values.global.hostUsers }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.cainjector.securityContext }}
|
|
||||||
securityContext:
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
containers:
|
|
||||||
- name: {{ .Chart.Name }}-cainjector
|
|
||||||
image: "{{ template "image" (tuple .Values.cainjector.image .Values.imageRegistry .Values.imageNamespace (printf ":%s" .Chart.AppVersion)) }}"
|
|
||||||
imagePullPolicy: {{ .Values.cainjector.image.pullPolicy }}
|
|
||||||
args:
|
|
||||||
{{- /* The if statement below is equivalent to {{- if $value }} but will also return true for 0. */ -}}
|
|
||||||
{{- if not (has (quote .Values.global.logLevel) (list "" (quote ""))) }}
|
|
||||||
- --v={{ .Values.global.logLevel }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if .Values.cainjector.config }}
|
|
||||||
- --config=/var/cert-manager/config/config.yaml
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.global.leaderElection }}
|
|
||||||
- --leader-election-namespace={{ .namespace }}
|
|
||||||
{{- if .leaseDuration }}
|
|
||||||
- --leader-election-lease-duration={{ .leaseDuration }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if .renewDeadline }}
|
|
||||||
- --leader-election-renew-deadline={{ .renewDeadline }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if .retryPeriod }}
|
|
||||||
- --leader-election-retry-period={{ .retryPeriod }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.cainjector.featureGates}}
|
|
||||||
- --feature-gates={{ . }}
|
|
||||||
{{- end}}
|
|
||||||
{{- with .Values.cainjector.extraArgs }}
|
|
||||||
{{- toYaml . | nindent 10 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if not .Values.prometheus.enabled }}
|
|
||||||
- --metrics-listen-address=0
|
|
||||||
{{- end }}
|
|
||||||
{{- if .Values.prometheus.enabled }}
|
|
||||||
ports:
|
|
||||||
- containerPort: 9402
|
|
||||||
name: http-metrics
|
|
||||||
protocol: TCP
|
|
||||||
{{- end }}
|
|
||||||
env:
|
|
||||||
- name: POD_NAMESPACE
|
|
||||||
valueFrom:
|
|
||||||
fieldRef:
|
|
||||||
fieldPath: metadata.namespace
|
|
||||||
{{- with .Values.cainjector.extraEnv }}
|
|
||||||
{{- toYaml . | nindent 10 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.cainjector.containerSecurityContext }}
|
|
||||||
securityContext:
|
|
||||||
{{- toYaml . | nindent 12 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.cainjector.resources }}
|
|
||||||
resources:
|
|
||||||
{{- toYaml . | nindent 12 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if or .Values.cainjector.config .Values.cainjector.volumeMounts }}
|
|
||||||
volumeMounts:
|
|
||||||
{{- if .Values.cainjector.config }}
|
|
||||||
- name: config
|
|
||||||
mountPath: /var/cert-manager/config
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.cainjector.volumeMounts }}
|
|
||||||
{{- toYaml . | nindent 12 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
{{- $nodeSelector := .Values.global.nodeSelector | default dict }}
|
|
||||||
{{- $nodeSelector = merge $nodeSelector (.Values.cainjector.nodeSelector | default dict) }}
|
|
||||||
{{- with $nodeSelector }}
|
|
||||||
nodeSelector:
|
|
||||||
{{- range $key, $value := . }}
|
|
||||||
{{ $key }}: {{ $value | quote }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.cainjector.affinity }}
|
|
||||||
affinity:
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.cainjector.tolerations }}
|
|
||||||
tolerations:
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.cainjector.topologySpreadConstraints }}
|
|
||||||
topologySpreadConstraints:
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if or .Values.cainjector.volumes .Values.cainjector.config }}
|
|
||||||
volumes:
|
|
||||||
{{- if .Values.cainjector.config }}
|
|
||||||
- name: config
|
|
||||||
configMap:
|
|
||||||
name: {{ include "cainjector.fullname" . }}
|
|
||||||
{{- end }}
|
|
||||||
{{ with .Values.cainjector.volumes }}
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
@ -1,32 +0,0 @@
|
|||||||
{{- if .Values.cainjector.podDisruptionBudget.enabled }}
|
|
||||||
apiVersion: policy/v1
|
|
||||||
kind: PodDisruptionBudget
|
|
||||||
metadata:
|
|
||||||
name: {{ include "cainjector.fullname" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "cainjector"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
spec:
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app.kubernetes.io/name: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "cainjector"
|
|
||||||
|
|
||||||
{{- if not (or (hasKey .Values.cainjector.podDisruptionBudget "minAvailable") (hasKey .Values.cainjector.podDisruptionBudget "maxUnavailable")) }}
|
|
||||||
minAvailable: 1 # Default value because minAvailable and maxUnavailable are not set
|
|
||||||
{{- end }}
|
|
||||||
{{- if hasKey .Values.cainjector.podDisruptionBudget "minAvailable" }}
|
|
||||||
minAvailable: {{ .Values.cainjector.podDisruptionBudget.minAvailable }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if hasKey .Values.cainjector.podDisruptionBudget "maxUnavailable" }}
|
|
||||||
maxUnavailable: {{ .Values.cainjector.podDisruptionBudget.maxUnavailable }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.cainjector.podDisruptionBudget.unhealthyPodEvictionPolicy }}
|
|
||||||
unhealthyPodEvictionPolicy: {{ . }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
@ -1,20 +0,0 @@
|
|||||||
{{- if .Values.cainjector.enabled }}
|
|
||||||
{{- if .Values.global.podSecurityPolicy.enabled }}
|
|
||||||
kind: ClusterRole
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cainjector.fullname" . }}-psp
|
|
||||||
labels:
|
|
||||||
app: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "cainjector"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
rules:
|
|
||||||
- apiGroups: ['policy']
|
|
||||||
resources: ['podsecuritypolicies']
|
|
||||||
verbs: ['use']
|
|
||||||
resourceNames:
|
|
||||||
- {{ template "cainjector.fullname" . }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
@ -1,22 +0,0 @@
|
|||||||
{{- if .Values.cainjector.enabled }}
|
|
||||||
{{- if .Values.global.podSecurityPolicy.enabled }}
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: ClusterRoleBinding
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cainjector.fullname" . }}-psp
|
|
||||||
labels:
|
|
||||||
app: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "cainjector"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
roleRef:
|
|
||||||
apiGroup: rbac.authorization.k8s.io
|
|
||||||
kind: ClusterRole
|
|
||||||
name: {{ template "cainjector.fullname" . }}-psp
|
|
||||||
subjects:
|
|
||||||
- kind: ServiceAccount
|
|
||||||
name: {{ template "cainjector.serviceAccountName" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
@ -1,51 +0,0 @@
|
|||||||
{{- if .Values.cainjector.enabled }}
|
|
||||||
{{- if .Values.global.podSecurityPolicy.enabled }}
|
|
||||||
apiVersion: policy/v1beta1
|
|
||||||
kind: PodSecurityPolicy
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cainjector.fullname" . }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "cainjector"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
annotations:
|
|
||||||
seccomp.security.alpha.kubernetes.io/allowedProfileNames: 'docker/default'
|
|
||||||
seccomp.security.alpha.kubernetes.io/defaultProfileName: 'docker/default'
|
|
||||||
{{- if .Values.global.podSecurityPolicy.useAppArmor }}
|
|
||||||
apparmor.security.beta.kubernetes.io/allowedProfileNames: 'runtime/default'
|
|
||||||
apparmor.security.beta.kubernetes.io/defaultProfileName: 'runtime/default'
|
|
||||||
{{- end }}
|
|
||||||
spec:
|
|
||||||
privileged: false
|
|
||||||
allowPrivilegeEscalation: false
|
|
||||||
allowedCapabilities: [] # default set of capabilities are implicitly allowed
|
|
||||||
volumes:
|
|
||||||
- 'configMap'
|
|
||||||
- 'emptyDir'
|
|
||||||
- 'projected'
|
|
||||||
- 'secret'
|
|
||||||
- 'downwardAPI'
|
|
||||||
hostNetwork: false
|
|
||||||
hostIPC: false
|
|
||||||
hostPID: false
|
|
||||||
runAsUser:
|
|
||||||
rule: 'MustRunAs'
|
|
||||||
ranges:
|
|
||||||
- min: 1000
|
|
||||||
max: 1000
|
|
||||||
seLinux:
|
|
||||||
rule: 'RunAsAny'
|
|
||||||
supplementalGroups:
|
|
||||||
rule: 'MustRunAs'
|
|
||||||
ranges:
|
|
||||||
- min: 1000
|
|
||||||
max: 1000
|
|
||||||
fsGroup:
|
|
||||||
rule: 'MustRunAs'
|
|
||||||
ranges:
|
|
||||||
- min: 1000
|
|
||||||
max: 1000
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
@ -1,156 +0,0 @@
|
|||||||
{{- if .Values.cainjector.enabled }}
|
|
||||||
{{- if .Values.global.rbac.create }}
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: ClusterRole
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cainjector.fullname" . }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "cainjector"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
rules:
|
|
||||||
- apiGroups: ["cert-manager.io"]
|
|
||||||
resources: ["certificates"]
|
|
||||||
verbs: ["get", "list", "watch"]
|
|
||||||
- apiGroups: [""]
|
|
||||||
resources: ["secrets"]
|
|
||||||
verbs: ["get", "list", "watch"]
|
|
||||||
- apiGroups: [""]
|
|
||||||
resources: ["events"]
|
|
||||||
verbs: ["get", "create", "update", "patch"]
|
|
||||||
- apiGroups: ["admissionregistration.k8s.io"]
|
|
||||||
resources: ["validatingwebhookconfigurations", "mutatingwebhookconfigurations"]
|
|
||||||
verbs: ["get", "list", "watch", "update", "patch"]
|
|
||||||
- apiGroups: ["apiregistration.k8s.io"]
|
|
||||||
resources: ["apiservices"]
|
|
||||||
verbs: ["get", "list", "watch", "update", "patch"]
|
|
||||||
- apiGroups: ["apiextensions.k8s.io"]
|
|
||||||
resources: ["customresourcedefinitions"]
|
|
||||||
verbs: ["get", "list", "watch", "update", "patch"]
|
|
||||||
---
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: ClusterRoleBinding
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cainjector.fullname" . }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "cainjector"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
roleRef:
|
|
||||||
apiGroup: rbac.authorization.k8s.io
|
|
||||||
kind: ClusterRole
|
|
||||||
name: {{ template "cainjector.fullname" . }}
|
|
||||||
subjects:
|
|
||||||
- name: {{ template "cainjector.serviceAccountName" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
kind: ServiceAccount
|
|
||||||
|
|
||||||
---
|
|
||||||
# leader election rules
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: Role
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cainjector.fullname" . }}:leaderelection
|
|
||||||
namespace: {{ .Values.global.leaderElection.namespace }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "cainjector"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
rules:
|
|
||||||
# Used for leader election by the controller
|
|
||||||
# cert-manager-cainjector-leader-election is used by the CertificateBased injector controller
|
|
||||||
# see cmd/cainjector/start.go#L113
|
|
||||||
# cert-manager-cainjector-leader-election-core is used by the SecretBased injector controller
|
|
||||||
# see cmd/cainjector/start.go#L137
|
|
||||||
- apiGroups: ["coordination.k8s.io"]
|
|
||||||
resources: ["leases"]
|
|
||||||
resourceNames: ["cert-manager-cainjector-leader-election", "cert-manager-cainjector-leader-election-core"]
|
|
||||||
verbs: ["get", "update", "patch"]
|
|
||||||
- apiGroups: ["coordination.k8s.io"]
|
|
||||||
resources: ["leases"]
|
|
||||||
verbs: ["create"]
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# grant cert-manager permission to manage the leaderelection configmap in the
|
|
||||||
# leader election namespace
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: RoleBinding
|
|
||||||
metadata:
|
|
||||||
name: {{ include "cainjector.fullname" . }}:leaderelection
|
|
||||||
namespace: {{ .Values.global.leaderElection.namespace }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "cainjector"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
roleRef:
|
|
||||||
apiGroup: rbac.authorization.k8s.io
|
|
||||||
kind: Role
|
|
||||||
name: {{ template "cainjector.fullname" . }}:leaderelection
|
|
||||||
subjects:
|
|
||||||
- kind: ServiceAccount
|
|
||||||
name: {{ template "cainjector.serviceAccountName" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
{{- $certmanagerNamespace := include "cert-manager.namespace" . }}
|
|
||||||
{{- if (.Values.cainjector.config.metricsTLSConfig).dynamic }}
|
|
||||||
{{- if $certmanagerNamespace | eq .Values.cainjector.config.metricsTLSConfig.dynamic.secretNamespace }}
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Metrics server dynamic TLS serving certificate rules
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: Role
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cainjector.fullname" . }}:dynamic-serving
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "cainjector"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
rules:
|
|
||||||
- apiGroups: [""]
|
|
||||||
resources: ["secrets"]
|
|
||||||
resourceNames:
|
|
||||||
# Allow cainjector to read and update the metrics CA Secret when dynamic TLS is
|
|
||||||
# enabled for the metrics server and if the Secret is configured to be in the
|
|
||||||
# same namespace as cert-manager.
|
|
||||||
- {{ .Values.cainjector.config.metricsTLSConfig.dynamic.secretName | quote }}
|
|
||||||
verbs: ["get", "list", "watch", "update"]
|
|
||||||
# It's not possible to grant CREATE permission on a single resourceName.
|
|
||||||
- apiGroups: [""]
|
|
||||||
resources: ["secrets"]
|
|
||||||
verbs: ["create"]
|
|
||||||
---
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: RoleBinding
|
|
||||||
metadata:
|
|
||||||
name: {{ include "cainjector.fullname" . }}:dynamic-serving
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "cainjector"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
roleRef:
|
|
||||||
apiGroup: rbac.authorization.k8s.io
|
|
||||||
kind: Role
|
|
||||||
name: {{ template "cainjector.fullname" . }}:dynamic-serving
|
|
||||||
subjects:
|
|
||||||
- kind: ServiceAccount
|
|
||||||
name: {{ template "cainjector.serviceAccountName" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
@ -1,32 +0,0 @@
|
|||||||
{{- if .Values.cainjector.enabled }}
|
|
||||||
{{- if and .Values.prometheus.enabled (not .Values.prometheus.podmonitor.enabled) }}
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cainjector.fullname" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
{{- with .Values.cainjector.serviceAnnotations }}
|
|
||||||
annotations:
|
|
||||||
{{ toYaml . | indent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "cainjector"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
{{- with .Values.cainjector.serviceLabels }}
|
|
||||||
{{- toYaml . | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
spec:
|
|
||||||
type: ClusterIP
|
|
||||||
ports:
|
|
||||||
- protocol: TCP
|
|
||||||
port: 9402
|
|
||||||
name: http-metrics
|
|
||||||
selector:
|
|
||||||
app.kubernetes.io/name: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "cainjector"
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
@ -1,27 +0,0 @@
|
|||||||
{{- if .Values.cainjector.enabled }}
|
|
||||||
{{- if .Values.cainjector.serviceAccount.create }}
|
|
||||||
apiVersion: v1
|
|
||||||
kind: ServiceAccount
|
|
||||||
automountServiceAccountToken: {{ .Values.cainjector.serviceAccount.automountServiceAccountToken }}
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cainjector.serviceAccountName" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
{{- with .Values.cainjector.serviceAccount.annotations }}
|
|
||||||
annotations:
|
|
||||||
{{- toYaml . | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "cainjector"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
{{- with .Values.cainjector.serviceAccount.labels }}
|
|
||||||
{{ toYaml . | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.global.imagePullSecrets }}
|
|
||||||
imagePullSecrets:
|
|
||||||
{{- toYaml . | nindent 2 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
@ -1,19 +0,0 @@
|
|||||||
{{- if .Values.config -}}
|
|
||||||
{{- $config := .Values.config -}}
|
|
||||||
{{- $_ := set $config "apiVersion" (default "controller.config.cert-manager.io/v1alpha1" $config.apiVersion) -}}
|
|
||||||
{{- $_ := set $config "kind" (default "ControllerConfiguration" $config.kind) -}}
|
|
||||||
apiVersion: v1
|
|
||||||
kind: ConfigMap
|
|
||||||
metadata:
|
|
||||||
name: {{ include "cert-manager.fullname" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
data:
|
|
||||||
config.yaml: |
|
|
||||||
{{- $config | toYaml | nindent 4 }}
|
|
||||||
{{- end -}}
|
|
||||||
File diff suppressed because it is too large
Load Diff
@ -1,278 +0,0 @@
|
|||||||
{{- if or .Values.crds.enabled .Values.installCRDs }}
|
|
||||||
apiVersion: apiextensions.k8s.io/v1
|
|
||||||
kind: CustomResourceDefinition
|
|
||||||
metadata:
|
|
||||||
name: "orders.acme.cert-manager.io"
|
|
||||||
{{- if .Values.crds.keep }}
|
|
||||||
annotations:
|
|
||||||
helm.sh/resource-policy: keep
|
|
||||||
{{- end }}
|
|
||||||
labels:
|
|
||||||
{{- include "cert-manager.crd-labels" . | nindent 4 }}
|
|
||||||
spec:
|
|
||||||
group: acme.cert-manager.io
|
|
||||||
names:
|
|
||||||
categories:
|
|
||||||
- cert-manager
|
|
||||||
- cert-manager-acme
|
|
||||||
kind: Order
|
|
||||||
listKind: OrderList
|
|
||||||
plural: orders
|
|
||||||
singular: order
|
|
||||||
scope: Namespaced
|
|
||||||
versions:
|
|
||||||
- additionalPrinterColumns:
|
|
||||||
- jsonPath: .status.state
|
|
||||||
name: State
|
|
||||||
type: string
|
|
||||||
- jsonPath: .spec.issuerRef.name
|
|
||||||
name: Issuer
|
|
||||||
priority: 1
|
|
||||||
type: string
|
|
||||||
- jsonPath: .status.reason
|
|
||||||
name: Reason
|
|
||||||
priority: 1
|
|
||||||
type: string
|
|
||||||
- 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.
|
|
||||||
jsonPath: .metadata.creationTimestamp
|
|
||||||
name: Age
|
|
||||||
type: date
|
|
||||||
name: v1
|
|
||||||
schema:
|
|
||||||
openAPIV3Schema:
|
|
||||||
description: Order is a type to represent an Order with an ACME server
|
|
||||||
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:
|
|
||||||
properties:
|
|
||||||
commonName:
|
|
||||||
description: |-
|
|
||||||
CommonName is the common name as specified on the DER encoded CSR.
|
|
||||||
If specified, this value must also be present in `dnsNames` or `ipAddresses`.
|
|
||||||
This field must match the corresponding field on the DER encoded CSR.
|
|
||||||
type: string
|
|
||||||
dnsNames:
|
|
||||||
description: |-
|
|
||||||
DNSNames is a list of DNS names that should be included as part of the Order
|
|
||||||
validation process.
|
|
||||||
This field must match the corresponding field on the DER encoded CSR.
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
x-kubernetes-list-type: atomic
|
|
||||||
duration:
|
|
||||||
description: |-
|
|
||||||
Duration is the duration for the not after date for the requested certificate.
|
|
||||||
this is set on order creation as pe the ACME spec.
|
|
||||||
type: string
|
|
||||||
ipAddresses:
|
|
||||||
description: |-
|
|
||||||
IPAddresses is a list of IP addresses that should be included as part of the Order
|
|
||||||
validation process.
|
|
||||||
This field must match the corresponding field on the DER encoded CSR.
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
x-kubernetes-list-type: atomic
|
|
||||||
issuerRef:
|
|
||||||
description: |-
|
|
||||||
IssuerRef references a properly configured ACME-type Issuer which should
|
|
||||||
be used to create this Order.
|
|
||||||
If the Issuer does not exist, processing will be retried.
|
|
||||||
If the Issuer is not an 'ACME' Issuer, an error will be returned and the
|
|
||||||
Order will be marked as failed.
|
|
||||||
properties:
|
|
||||||
group:
|
|
||||||
description: |-
|
|
||||||
Group of the issuer being referred to.
|
|
||||||
Defaults to 'cert-manager.io'.
|
|
||||||
type: string
|
|
||||||
kind:
|
|
||||||
description: |-
|
|
||||||
Kind of the issuer being referred to.
|
|
||||||
Defaults to 'Issuer'.
|
|
||||||
type: string
|
|
||||||
name:
|
|
||||||
description: Name of the issuer being referred to.
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- name
|
|
||||||
type: object
|
|
||||||
profile:
|
|
||||||
description: |-
|
|
||||||
Profile allows requesting a certificate profile from the ACME server.
|
|
||||||
Supported profiles are listed by the server's ACME directory URL.
|
|
||||||
type: string
|
|
||||||
request:
|
|
||||||
description: |-
|
|
||||||
Certificate signing request bytes in DER encoding.
|
|
||||||
This will be used when finalizing the order.
|
|
||||||
This field must be set on the order.
|
|
||||||
format: byte
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- issuerRef
|
|
||||||
- request
|
|
||||||
type: object
|
|
||||||
status:
|
|
||||||
properties:
|
|
||||||
authorizations:
|
|
||||||
description: |-
|
|
||||||
Authorizations contains data returned from the ACME server on what
|
|
||||||
authorizations must be completed in order to validate the DNS names
|
|
||||||
specified on the Order.
|
|
||||||
items:
|
|
||||||
description: |-
|
|
||||||
ACMEAuthorization contains data returned from the ACME server on an
|
|
||||||
authorization that must be completed in order validate a DNS name on an ACME
|
|
||||||
Order resource.
|
|
||||||
properties:
|
|
||||||
challenges:
|
|
||||||
description: |-
|
|
||||||
Challenges specifies the challenge types offered by the ACME server.
|
|
||||||
One of these challenge types will be selected when validating the DNS
|
|
||||||
name and an appropriate Challenge resource will be created to perform
|
|
||||||
the ACME challenge process.
|
|
||||||
items:
|
|
||||||
description: |-
|
|
||||||
Challenge specifies a challenge offered by the ACME server for an Order.
|
|
||||||
An appropriate Challenge resource can be created to perform the ACME
|
|
||||||
challenge process.
|
|
||||||
properties:
|
|
||||||
token:
|
|
||||||
description: |-
|
|
||||||
Token is the token that must be presented for this challenge.
|
|
||||||
This is used to compute the 'key' that must also be presented.
|
|
||||||
type: string
|
|
||||||
type:
|
|
||||||
description: |-
|
|
||||||
Type is the type of challenge being offered, e.g., 'http-01', 'dns-01',
|
|
||||||
'tls-sni-01', etc.
|
|
||||||
This is the raw value retrieved from the ACME server.
|
|
||||||
Only 'http-01' and 'dns-01' are supported by cert-manager, other values
|
|
||||||
will be ignored.
|
|
||||||
type: string
|
|
||||||
url:
|
|
||||||
description: |-
|
|
||||||
URL is the URL of this challenge. It can be used to retrieve additional
|
|
||||||
metadata about the Challenge from the ACME server.
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- token
|
|
||||||
- type
|
|
||||||
- url
|
|
||||||
type: object
|
|
||||||
type: array
|
|
||||||
x-kubernetes-list-type: atomic
|
|
||||||
identifier:
|
|
||||||
description: Identifier is the DNS name to be validated as part of this authorization
|
|
||||||
type: string
|
|
||||||
initialState:
|
|
||||||
description: |-
|
|
||||||
InitialState is the initial state of the ACME authorization when first
|
|
||||||
fetched from the ACME server.
|
|
||||||
If an Authorization is already 'valid', the Order controller will not
|
|
||||||
create a Challenge resource for the authorization. This will occur when
|
|
||||||
working with an ACME server that enables 'authz reuse' (such as Let's
|
|
||||||
Encrypt's production endpoint).
|
|
||||||
If not set and 'identifier' is set, the state is assumed to be pending
|
|
||||||
and a Challenge will be created.
|
|
||||||
enum:
|
|
||||||
- valid
|
|
||||||
- ready
|
|
||||||
- pending
|
|
||||||
- processing
|
|
||||||
- invalid
|
|
||||||
- expired
|
|
||||||
- errored
|
|
||||||
type: string
|
|
||||||
url:
|
|
||||||
description: URL is the URL of the Authorization that must be completed
|
|
||||||
type: string
|
|
||||||
wildcard:
|
|
||||||
description: |-
|
|
||||||
Wildcard will be true if this authorization is for a wildcard DNS name.
|
|
||||||
If this is true, the identifier will be the *non-wildcard* version of
|
|
||||||
the DNS name.
|
|
||||||
For example, if '*.example.com' is the DNS name being validated, this
|
|
||||||
field will be 'true' and the 'identifier' field will be 'example.com'.
|
|
||||||
type: boolean
|
|
||||||
required:
|
|
||||||
- url
|
|
||||||
type: object
|
|
||||||
type: array
|
|
||||||
x-kubernetes-list-type: atomic
|
|
||||||
certificate:
|
|
||||||
description: |-
|
|
||||||
Certificate is a copy of the PEM encoded certificate for this Order.
|
|
||||||
This field will be populated after the order has been successfully
|
|
||||||
finalized with the ACME server, and the order has transitioned to the
|
|
||||||
'valid' state.
|
|
||||||
format: byte
|
|
||||||
type: string
|
|
||||||
failureTime:
|
|
||||||
description: |-
|
|
||||||
FailureTime stores the time that this order failed.
|
|
||||||
This is used to influence garbage collection and back-off.
|
|
||||||
format: date-time
|
|
||||||
type: string
|
|
||||||
finalizeURL:
|
|
||||||
description: |-
|
|
||||||
FinalizeURL of the Order.
|
|
||||||
This is used to obtain certificates for this order once it has been completed.
|
|
||||||
type: string
|
|
||||||
reason:
|
|
||||||
description: |-
|
|
||||||
Reason optionally provides more information about a why the order is in
|
|
||||||
the current state.
|
|
||||||
type: string
|
|
||||||
state:
|
|
||||||
description: |-
|
|
||||||
State contains the current state of this Order resource.
|
|
||||||
States 'success' and 'expired' are 'final'
|
|
||||||
enum:
|
|
||||||
- valid
|
|
||||||
- ready
|
|
||||||
- pending
|
|
||||||
- processing
|
|
||||||
- invalid
|
|
||||||
- expired
|
|
||||||
- errored
|
|
||||||
type: string
|
|
||||||
url:
|
|
||||||
description: |-
|
|
||||||
URL of the Order.
|
|
||||||
This will initially be empty when the resource is first created.
|
|
||||||
The Order controller will populate this field when the Order is first processed.
|
|
||||||
This field will be immutable after it is initially set.
|
|
||||||
type: string
|
|
||||||
type: object
|
|
||||||
required:
|
|
||||||
- metadata
|
|
||||||
- spec
|
|
||||||
type: object
|
|
||||||
selectableFields:
|
|
||||||
- jsonPath: .spec.issuerRef.group
|
|
||||||
- jsonPath: .spec.issuerRef.kind
|
|
||||||
- jsonPath: .spec.issuerRef.name
|
|
||||||
served: true
|
|
||||||
storage: true
|
|
||||||
subresources:
|
|
||||||
status: {}
|
|
||||||
{{- end }}
|
|
||||||
@ -1,323 +0,0 @@
|
|||||||
{{- if or .Values.crds.enabled .Values.installCRDs }}
|
|
||||||
apiVersion: apiextensions.k8s.io/v1
|
|
||||||
kind: CustomResourceDefinition
|
|
||||||
metadata:
|
|
||||||
name: "certificaterequests.cert-manager.io"
|
|
||||||
{{- if .Values.crds.keep }}
|
|
||||||
annotations:
|
|
||||||
helm.sh/resource-policy: keep
|
|
||||||
{{- end }}
|
|
||||||
labels:
|
|
||||||
{{- include "cert-manager.crd-labels" . | nindent 4 }}
|
|
||||||
spec:
|
|
||||||
group: cert-manager.io
|
|
||||||
names:
|
|
||||||
categories:
|
|
||||||
- cert-manager
|
|
||||||
kind: CertificateRequest
|
|
||||||
listKind: CertificateRequestList
|
|
||||||
plural: certificaterequests
|
|
||||||
shortNames:
|
|
||||||
- cr
|
|
||||||
- crs
|
|
||||||
singular: certificaterequest
|
|
||||||
scope: Namespaced
|
|
||||||
versions:
|
|
||||||
- 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: Requester
|
|
||||||
type: string
|
|
||||||
- jsonPath: .status.conditions[?(@.type == "Ready")].message
|
|
||||||
name: Status
|
|
||||||
priority: 1
|
|
||||||
type: string
|
|
||||||
- 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.
|
|
||||||
jsonPath: .metadata.creationTimestamp
|
|
||||||
name: Age
|
|
||||||
type: date
|
|
||||||
name: v1
|
|
||||||
schema:
|
|
||||||
openAPIV3Schema:
|
|
||||||
description: |-
|
|
||||||
A CertificateRequest is used to request a signed certificate from one of the
|
|
||||||
configured issuers.
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
A CertificateRequest is a one-shot resource, meaning it represents a single
|
|
||||||
point in time request for a certificate and cannot be re-used.
|
|
||||||
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
|
|
||||||
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:
|
|
||||||
additionalProperties:
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
description: |-
|
|
||||||
Extra contains extra attributes of the user that created the CertificateRequest.
|
|
||||||
Populated by the cert-manager webhook on creation and immutable.
|
|
||||||
type: object
|
|
||||||
groups:
|
|
||||||
description: |-
|
|
||||||
Groups contains group membership of the user that created the CertificateRequest.
|
|
||||||
Populated by the cert-manager webhook on creation and immutable.
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
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.
|
|
||||||
|
|
||||||
NOTE: If the CSR in the `Request` field has a BasicConstraints extension,
|
|
||||||
it must have the same isCA value as specified here.
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
The `name` field of the reference must always be specified.
|
|
||||||
properties:
|
|
||||||
group:
|
|
||||||
description: |-
|
|
||||||
Group of the issuer being referred to.
|
|
||||||
Defaults to 'cert-manager.io'.
|
|
||||||
type: string
|
|
||||||
kind:
|
|
||||||
description: |-
|
|
||||||
Kind of the issuer being referred to.
|
|
||||||
Defaults to 'Issuer'.
|
|
||||||
type: string
|
|
||||||
name:
|
|
||||||
description: Name of the issuer being referred to.
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- name
|
|
||||||
type: object
|
|
||||||
request:
|
|
||||||
description: |-
|
|
||||||
The PEM-encoded X.509 certificate signing request to be submitted to the
|
|
||||||
issuer for signing.
|
|
||||||
|
|
||||||
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.
|
|
||||||
format: byte
|
|
||||||
type: string
|
|
||||||
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.
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
If unset, defaults to `digital signature` and `key encipherment`.
|
|
||||||
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
|
|
||||||
|
|
||||||
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"
|
|
||||||
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
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
x-kubernetes-list-type: atomic
|
|
||||||
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
|
|
||||||
required:
|
|
||||||
- issuerRef
|
|
||||||
- request
|
|
||||||
type: object
|
|
||||||
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
|
|
||||||
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.
|
|
||||||
format: byte
|
|
||||||
type: string
|
|
||||||
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.
|
|
||||||
format: byte
|
|
||||||
type: string
|
|
||||||
conditions:
|
|
||||||
description: |-
|
|
||||||
List of status conditions to indicate the status of a CertificateRequest.
|
|
||||||
Known condition types are `Ready`, `InvalidRequest`, `Approved` and `Denied`.
|
|
||||||
items:
|
|
||||||
description: CertificateRequestCondition contains condition information for a CertificateRequest.
|
|
||||||
properties:
|
|
||||||
lastTransitionTime:
|
|
||||||
description: |-
|
|
||||||
LastTransitionTime is the timestamp corresponding to the last status
|
|
||||||
change of this condition.
|
|
||||||
format: date-time
|
|
||||||
type: string
|
|
||||||
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`).
|
|
||||||
enum:
|
|
||||||
- "True"
|
|
||||||
- "False"
|
|
||||||
- Unknown
|
|
||||||
type: string
|
|
||||||
type:
|
|
||||||
description: |-
|
|
||||||
Type of the condition, known values are (`Ready`, `InvalidRequest`,
|
|
||||||
`Approved`, `Denied`).
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- status
|
|
||||||
- type
|
|
||||||
type: object
|
|
||||||
type: array
|
|
||||||
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.
|
|
||||||
format: date-time
|
|
||||||
type: string
|
|
||||||
type: object
|
|
||||||
type: object
|
|
||||||
selectableFields:
|
|
||||||
- jsonPath: .spec.issuerRef.group
|
|
||||||
- jsonPath: .spec.issuerRef.kind
|
|
||||||
- jsonPath: .spec.issuerRef.name
|
|
||||||
served: true
|
|
||||||
storage: true
|
|
||||||
subresources:
|
|
||||||
status: {}
|
|
||||||
{{- end }}
|
|
||||||
@ -1,817 +0,0 @@
|
|||||||
{{- if or .Values.crds.enabled .Values.installCRDs }}
|
|
||||||
apiVersion: apiextensions.k8s.io/v1
|
|
||||||
kind: CustomResourceDefinition
|
|
||||||
metadata:
|
|
||||||
name: "certificates.cert-manager.io"
|
|
||||||
{{- if .Values.crds.keep }}
|
|
||||||
annotations:
|
|
||||||
helm.sh/resource-policy: keep
|
|
||||||
{{- end }}
|
|
||||||
labels:
|
|
||||||
{{- include "cert-manager.crd-labels" . | nindent 4 }}
|
|
||||||
spec:
|
|
||||||
group: cert-manager.io
|
|
||||||
names:
|
|
||||||
categories:
|
|
||||||
- cert-manager
|
|
||||||
kind: Certificate
|
|
||||||
listKind: CertificateList
|
|
||||||
plural: certificates
|
|
||||||
shortNames:
|
|
||||||
- cert
|
|
||||||
- certs
|
|
||||||
singular: certificate
|
|
||||||
scope: Namespaced
|
|
||||||
versions:
|
|
||||||
- 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
|
|
||||||
- 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.
|
|
||||||
jsonPath: .metadata.creationTimestamp
|
|
||||||
name: Age
|
|
||||||
type: date
|
|
||||||
name: v1
|
|
||||||
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`.
|
|
||||||
|
|
||||||
The stored certificate will be renewed before it expires (as configured by `spec.renewBefore`).
|
|
||||||
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
|
|
||||||
properties:
|
|
||||||
additionalOutputFormats:
|
|
||||||
description: |-
|
|
||||||
Defines extra output formats of the private key and signed certificate chain
|
|
||||||
to be written to this Certificate's target Secret.
|
|
||||||
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.
|
|
||||||
properties:
|
|
||||||
type:
|
|
||||||
description: |-
|
|
||||||
Type is the name of the format type that should be written to the
|
|
||||||
Certificate's target Secret.
|
|
||||||
enum:
|
|
||||||
- DER
|
|
||||||
- CombinedPEM
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- type
|
|
||||||
type: object
|
|
||||||
type: array
|
|
||||||
x-kubernetes-list-type: atomic
|
|
||||||
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).
|
|
||||||
|
|
||||||
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.
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
x-kubernetes-list-type: atomic
|
|
||||||
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.
|
|
||||||
|
|
||||||
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.
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
x-kubernetes-list-type: atomic
|
|
||||||
encodeUsagesInRequest:
|
|
||||||
description: |-
|
|
||||||
Whether the KeyUsage and ExtKeyUsage extensions should be set in the encoded CSR.
|
|
||||||
|
|
||||||
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.
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
x-kubernetes-list-type: atomic
|
|
||||||
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.
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
The `name` field of the reference must always be specified.
|
|
||||||
properties:
|
|
||||||
group:
|
|
||||||
description: |-
|
|
||||||
Group of the issuer being referred to.
|
|
||||||
Defaults to 'cert-manager.io'.
|
|
||||||
type: string
|
|
||||||
kind:
|
|
||||||
description: |-
|
|
||||||
Kind of the issuer being referred to.
|
|
||||||
Defaults to 'Issuer'.
|
|
||||||
type: string
|
|
||||||
name:
|
|
||||||
description: Name of the issuer being referred to.
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- name
|
|
||||||
type: object
|
|
||||||
keystores:
|
|
||||||
description: Additional keystore output formats to be stored in the Certificate's Secret.
|
|
||||||
properties:
|
|
||||||
jks:
|
|
||||||
description: |-
|
|
||||||
JKS configures options for storing a JKS keystore in the
|
|
||||||
`spec.secretName` Secret resource.
|
|
||||||
properties:
|
|
||||||
alias:
|
|
||||||
description: |-
|
|
||||||
Alias specifies the alias of the key in the keystore, required by the JKS format.
|
|
||||||
If not provided, the default alias `certificate` will be used.
|
|
||||||
type: string
|
|
||||||
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` or `password`.
|
|
||||||
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
|
|
||||||
password:
|
|
||||||
description: |-
|
|
||||||
Password provides a literal password used to encrypt the JKS keystore.
|
|
||||||
Mutually exclusive with passwordSecretRef.
|
|
||||||
One of password or passwordSecretRef must provide a password with a non-zero length.
|
|
||||||
type: string
|
|
||||||
passwordSecretRef:
|
|
||||||
description: |-
|
|
||||||
PasswordSecretRef is a reference to a non-empty key in a Secret resource
|
|
||||||
containing the password used to encrypt the JKS keystore.
|
|
||||||
Mutually exclusive with password.
|
|
||||||
One of password or passwordSecretRef must provide a password with a non-zero length.
|
|
||||||
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
|
|
||||||
required:
|
|
||||||
- name
|
|
||||||
type: object
|
|
||||||
required:
|
|
||||||
- create
|
|
||||||
type: object
|
|
||||||
pkcs12:
|
|
||||||
description: |-
|
|
||||||
PKCS12 configures options for storing a PKCS12 keystore in the
|
|
||||||
`spec.secretName` Secret resource.
|
|
||||||
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` or in `password`.
|
|
||||||
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
|
|
||||||
password:
|
|
||||||
description: |-
|
|
||||||
Password provides a literal password used to encrypt the PKCS#12 keystore.
|
|
||||||
Mutually exclusive with passwordSecretRef.
|
|
||||||
One of password or passwordSecretRef must provide a password with a non-zero length.
|
|
||||||
type: string
|
|
||||||
passwordSecretRef:
|
|
||||||
description: |-
|
|
||||||
PasswordSecretRef is a reference to a non-empty key in a Secret resource
|
|
||||||
containing the password used to encrypt the PKCS#12 keystore.
|
|
||||||
Mutually exclusive with password.
|
|
||||||
One of password or passwordSecretRef must provide a password with a non-zero length.
|
|
||||||
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
|
|
||||||
required:
|
|
||||||
- name
|
|
||||||
type: object
|
|
||||||
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.
|
|
||||||
|
|
||||||
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
|
|
||||||
(e.g., 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.
|
|
||||||
enum:
|
|
||||||
- LegacyRC2
|
|
||||||
- LegacyDES
|
|
||||||
- Modern2023
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- create
|
|
||||||
type: object
|
|
||||||
type: object
|
|
||||||
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
|
|
||||||
|
|
||||||
Cannot be set if the `subject` or `commonName` field is set.
|
|
||||||
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
|
|
||||||
|
|
||||||
This is an Alpha Feature and is only enabled with the
|
|
||||||
`--feature-gates=NameConstraints=true` option set on both
|
|
||||||
the controller and webhook components.
|
|
||||||
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
|
|
||||||
properties:
|
|
||||||
dnsDomains:
|
|
||||||
description: DNSDomains is a list of DNS domains that are permitted or excluded.
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
x-kubernetes-list-type: atomic
|
|
||||||
emailAddresses:
|
|
||||||
description: EmailAddresses is a list of Email Addresses that are permitted or excluded.
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
x-kubernetes-list-type: atomic
|
|
||||||
ipRanges:
|
|
||||||
description: |-
|
|
||||||
IPRanges is a list of IP Ranges that are permitted or excluded.
|
|
||||||
This should be a valid CIDR notation.
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
x-kubernetes-list-type: atomic
|
|
||||||
uriDomains:
|
|
||||||
description: URIDomains is a list of URI domains that are permitted or excluded.
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
x-kubernetes-list-type: atomic
|
|
||||||
type: object
|
|
||||||
permitted:
|
|
||||||
description: Permitted contains the constraints in which the names must be located.
|
|
||||||
properties:
|
|
||||||
dnsDomains:
|
|
||||||
description: DNSDomains is a list of DNS domains that are permitted or excluded.
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
x-kubernetes-list-type: atomic
|
|
||||||
emailAddresses:
|
|
||||||
description: EmailAddresses is a list of Email Addresses that are permitted or excluded.
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
x-kubernetes-list-type: atomic
|
|
||||||
ipRanges:
|
|
||||||
description: |-
|
|
||||||
IPRanges is a list of IP Ranges that are permitted or excluded.
|
|
||||||
This should be a valid CIDR notation.
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
x-kubernetes-list-type: atomic
|
|
||||||
uriDomains:
|
|
||||||
description: URIDomains is a list of URI domains that are permitted or excluded.
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
x-kubernetes-list-type: atomic
|
|
||||||
type: object
|
|
||||||
type: object
|
|
||||||
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.
|
|
||||||
items:
|
|
||||||
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
|
|
||||||
type: object
|
|
||||||
type: array
|
|
||||||
x-kubernetes-list-type: atomic
|
|
||||||
privateKey:
|
|
||||||
description: |-
|
|
||||||
Private key options. These include the key algorithm and size, the used
|
|
||||||
encoding and the rotation policy.
|
|
||||||
properties:
|
|
||||||
algorithm:
|
|
||||||
description: |-
|
|
||||||
Algorithm is the private key algorithm of the corresponding private key
|
|
||||||
for this certificate.
|
|
||||||
|
|
||||||
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.
|
|
||||||
enum:
|
|
||||||
- RSA
|
|
||||||
- ECDSA
|
|
||||||
- Ed25519
|
|
||||||
type: string
|
|
||||||
encoding:
|
|
||||||
description: |-
|
|
||||||
The private key cryptography standards (PKCS) encoding for this
|
|
||||||
certificate's private key to be encoded in.
|
|
||||||
|
|
||||||
If provided, allowed values are `PKCS1` and `PKCS8` standing for PKCS#1
|
|
||||||
and PKCS#8, respectively.
|
|
||||||
Defaults to `PKCS1` if not specified.
|
|
||||||
enum:
|
|
||||||
- PKCS1
|
|
||||||
- PKCS8
|
|
||||||
type: string
|
|
||||||
rotationPolicy:
|
|
||||||
description: |-
|
|
||||||
RotationPolicy controls how private keys should be regenerated when a
|
|
||||||
re-issuance is being processed.
|
|
||||||
|
|
||||||
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 exist 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 re-issuance occurs.
|
|
||||||
Default is `Always`.
|
|
||||||
The default was changed from `Never` to `Always` in cert-manager >=v1.18.0.
|
|
||||||
enum:
|
|
||||||
- Never
|
|
||||||
- Always
|
|
||||||
type: string
|
|
||||||
size:
|
|
||||||
description: |-
|
|
||||||
Size is the key bit size of the corresponding private key for this certificate.
|
|
||||||
|
|
||||||
If `algorithm` is set to `RSA`, valid values are `2048`, `4096` or `8192`,
|
|
||||||
and will default to `2048` if not specified.
|
|
||||||
If `algorithm` is set to `ECDSA`, valid values are `256`, `384` or `521`,
|
|
||||||
and will default to `256` if not specified.
|
|
||||||
If `algorithm` is set to `Ed25519`, Size is ignored.
|
|
||||||
No other values are allowed.
|
|
||||||
type: integer
|
|
||||||
type: object
|
|
||||||
renewBefore:
|
|
||||||
description: |-
|
|
||||||
How long before the currently issued certificate's expiry cert-manager should
|
|
||||||
renew the certificate. For example, if a certificate is valid for 60 minutes,
|
|
||||||
and `renewBefore=10m`, cert-manager will begin to attempt to renew the certificate
|
|
||||||
50 minutes after it was issued (i.e. when there are 10 minutes remaining until
|
|
||||||
the certificate is no longer valid).
|
|
||||||
|
|
||||||
NOTE: The actual lifetime of the issued certificate is used to determine the
|
|
||||||
renewal time. If an issuer returns a certificate with a different lifetime than
|
|
||||||
the one requested, cert-manager will use the lifetime of the issued certificate.
|
|
||||||
|
|
||||||
If unset, this defaults to 1/3 of the issued certificate's lifetime.
|
|
||||||
Minimum accepted value is 5 minutes.
|
|
||||||
Value must be in units accepted by Go time.ParseDuration https://golang.org/pkg/time/#ParseDuration.
|
|
||||||
Cannot be set if the `renewBeforePercentage` field is set.
|
|
||||||
type: string
|
|
||||||
renewBeforePercentage:
|
|
||||||
description: |-
|
|
||||||
`renewBeforePercentage` is like `renewBefore`, except it is a relative percentage
|
|
||||||
rather than an absolute duration. For example, if a certificate is valid for 60
|
|
||||||
minutes, and `renewBeforePercentage=25`, cert-manager will begin to attempt to
|
|
||||||
renew the certificate 45 minutes after it was issued (i.e. when there are 15
|
|
||||||
minutes (25%) remaining until the certificate is no longer valid).
|
|
||||||
|
|
||||||
NOTE: The actual lifetime of the issued certificate is used to determine the
|
|
||||||
renewal time. If an issuer returns a certificate with a different lifetime than
|
|
||||||
the one requested, cert-manager will use the lifetime of the issued certificate.
|
|
||||||
|
|
||||||
Value must be an integer in the range (0,100). The minimum effective
|
|
||||||
`renewBefore` derived from the `renewBeforePercentage` and `duration` fields is 5
|
|
||||||
minutes.
|
|
||||||
Cannot be set if the `renewBefore` field is set.
|
|
||||||
format: int32
|
|
||||||
type: integer
|
|
||||||
revisionHistoryLimit:
|
|
||||||
description: |-
|
|
||||||
The maximum number of CertificateRequest revisions that are maintained in
|
|
||||||
the Certificate's history. Each revision represents a single `CertificateRequest`
|
|
||||||
created by this Certificate, either when it was created, renewed, or Spec
|
|
||||||
was changed. Revisions will be removed by oldest first if the number of
|
|
||||||
revisions exceeds this number.
|
|
||||||
|
|
||||||
If set, revisionHistoryLimit must be a value of `1` or greater.
|
|
||||||
Default value is `1`.
|
|
||||||
format: int32
|
|
||||||
type: integer
|
|
||||||
secretName:
|
|
||||||
description: |-
|
|
||||||
Name of the Secret resource that will be automatically created and
|
|
||||||
managed by this Certificate resource. It will be populated with a
|
|
||||||
private key and certificate, signed by the denoted issuer. The Secret
|
|
||||||
resource lives in the same namespace as the Certificate resource.
|
|
||||||
type: string
|
|
||||||
secretTemplate:
|
|
||||||
description: |-
|
|
||||||
Defines annotations and labels to be copied to the Certificate's Secret.
|
|
||||||
Labels and annotations on the Secret will be changed as they appear on the
|
|
||||||
SecretTemplate when added or removed. SecretTemplate annotations are added
|
|
||||||
in conjunction with, and cannot overwrite, the base set of annotations
|
|
||||||
cert-manager sets on the Certificate's Secret.
|
|
||||||
properties:
|
|
||||||
annotations:
|
|
||||||
additionalProperties:
|
|
||||||
type: string
|
|
||||||
description: Annotations is a key value map to be copied to the target Kubernetes Secret.
|
|
||||||
type: object
|
|
||||||
labels:
|
|
||||||
additionalProperties:
|
|
||||||
type: string
|
|
||||||
description: Labels is a key value map to be copied to the target Kubernetes Secret.
|
|
||||||
type: object
|
|
||||||
type: object
|
|
||||||
signatureAlgorithm:
|
|
||||||
description: |-
|
|
||||||
Signature algorithm to use.
|
|
||||||
Allowed values for RSA keys: SHA256WithRSA, SHA384WithRSA, SHA512WithRSA.
|
|
||||||
Allowed values for ECDSA keys: ECDSAWithSHA256, ECDSAWithSHA384, ECDSAWithSHA512.
|
|
||||||
Allowed values for Ed25519 keys: PureEd25519.
|
|
||||||
enum:
|
|
||||||
- SHA256WithRSA
|
|
||||||
- SHA384WithRSA
|
|
||||||
- SHA512WithRSA
|
|
||||||
- ECDSAWithSHA256
|
|
||||||
- ECDSAWithSHA384
|
|
||||||
- ECDSAWithSHA512
|
|
||||||
- PureEd25519
|
|
||||||
type: string
|
|
||||||
subject:
|
|
||||||
description: |-
|
|
||||||
Requested set of X509 certificate subject attributes.
|
|
||||||
More info: https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6
|
|
||||||
|
|
||||||
The common name attribute is specified separately in the `commonName` field.
|
|
||||||
Cannot be set if the `literalSubject` field is set.
|
|
||||||
properties:
|
|
||||||
countries:
|
|
||||||
description: Countries to be used on the Certificate.
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
x-kubernetes-list-type: atomic
|
|
||||||
localities:
|
|
||||||
description: Cities to be used on the Certificate.
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
x-kubernetes-list-type: atomic
|
|
||||||
organizationalUnits:
|
|
||||||
description: Organizational Units to be used on the Certificate.
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
x-kubernetes-list-type: atomic
|
|
||||||
organizations:
|
|
||||||
description: Organizations to be used on the Certificate.
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
x-kubernetes-list-type: atomic
|
|
||||||
postalCodes:
|
|
||||||
description: Postal codes to be used on the Certificate.
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
x-kubernetes-list-type: atomic
|
|
||||||
provinces:
|
|
||||||
description: State/Provinces to be used on the Certificate.
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
x-kubernetes-list-type: atomic
|
|
||||||
serialNumber:
|
|
||||||
description: Serial number to be used on the Certificate.
|
|
||||||
type: string
|
|
||||||
streetAddresses:
|
|
||||||
description: Street addresses to be used on the Certificate.
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
x-kubernetes-list-type: atomic
|
|
||||||
type: object
|
|
||||||
uris:
|
|
||||||
description: Requested URI subject alternative names.
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
x-kubernetes-list-type: atomic
|
|
||||||
usages:
|
|
||||||
description: |-
|
|
||||||
Requested key usages and extended key usages.
|
|
||||||
These usages are used to set the `usages` field on the created CertificateRequest
|
|
||||||
resources. If `encodeUsagesInRequest` is unset or set to `true`, the usages
|
|
||||||
will additionally be encoded in the `request` field which contains the CSR blob.
|
|
||||||
|
|
||||||
If unset, defaults to `digital signature` and `key encipherment`.
|
|
||||||
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
|
|
||||||
|
|
||||||
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"
|
|
||||||
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
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
x-kubernetes-list-type: atomic
|
|
||||||
required:
|
|
||||||
- issuerRef
|
|
||||||
- secretName
|
|
||||||
type: object
|
|
||||||
status:
|
|
||||||
description: |-
|
|
||||||
Status of the Certificate.
|
|
||||||
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
|
|
||||||
properties:
|
|
||||||
conditions:
|
|
||||||
description: |-
|
|
||||||
List of status conditions to indicate the status of certificates.
|
|
||||||
Known condition types are `Ready` and `Issuing`.
|
|
||||||
items:
|
|
||||||
description: CertificateCondition contains condition information for a Certificate.
|
|
||||||
properties:
|
|
||||||
lastTransitionTime:
|
|
||||||
description: |-
|
|
||||||
LastTransitionTime is the timestamp corresponding to the last status
|
|
||||||
change of this condition.
|
|
||||||
format: date-time
|
|
||||||
type: string
|
|
||||||
message:
|
|
||||||
description: |-
|
|
||||||
Message is a human readable description of the details of the last
|
|
||||||
transition, complementing reason.
|
|
||||||
type: string
|
|
||||||
observedGeneration:
|
|
||||||
description: |-
|
|
||||||
If set, this represents the .metadata.generation that the condition was
|
|
||||||
set based upon.
|
|
||||||
For instance, if .metadata.generation is currently 12, but the
|
|
||||||
.status.condition[x].observedGeneration is 9, the condition is out of date
|
|
||||||
with respect to the current state of the Certificate.
|
|
||||||
format: int64
|
|
||||||
type: integer
|
|
||||||
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`).
|
|
||||||
enum:
|
|
||||||
- "True"
|
|
||||||
- "False"
|
|
||||||
- Unknown
|
|
||||||
type: string
|
|
||||||
type:
|
|
||||||
description: Type of the condition, known values are (`Ready`, `Issuing`).
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- status
|
|
||||||
- type
|
|
||||||
type: object
|
|
||||||
type: array
|
|
||||||
x-kubernetes-list-map-keys:
|
|
||||||
- type
|
|
||||||
x-kubernetes-list-type: map
|
|
||||||
failedIssuanceAttempts:
|
|
||||||
description: |-
|
|
||||||
The number of continuous failed issuance attempts up till now. This
|
|
||||||
field gets removed (if set) on a successful issuance and gets set to
|
|
||||||
1 if unset and an issuance has failed. If an issuance has failed, the
|
|
||||||
delay till the next issuance will be calculated using formula
|
|
||||||
time.Hour * 2 ^ (failedIssuanceAttempts - 1).
|
|
||||||
type: integer
|
|
||||||
lastFailureTime:
|
|
||||||
description: |-
|
|
||||||
LastFailureTime is set only if the latest issuance for this
|
|
||||||
Certificate failed and contains the time of the failure. If an
|
|
||||||
issuance has failed, the delay till the next issuance will be
|
|
||||||
calculated using formula time.Hour * 2 ^ (failedIssuanceAttempts -
|
|
||||||
1). If the latest issuance has succeeded this field will be unset.
|
|
||||||
format: date-time
|
|
||||||
type: string
|
|
||||||
nextPrivateKeySecretName:
|
|
||||||
description: |-
|
|
||||||
The name of the Secret resource containing the private key to be used
|
|
||||||
for the next certificate iteration.
|
|
||||||
The keymanager controller will automatically set this field if the
|
|
||||||
`Issuing` condition is set to `True`.
|
|
||||||
It will automatically unset this field when the Issuing condition is
|
|
||||||
not set or False.
|
|
||||||
type: string
|
|
||||||
notAfter:
|
|
||||||
description: |-
|
|
||||||
The expiration time of the certificate stored in the secret named
|
|
||||||
by this resource in `spec.secretName`.
|
|
||||||
format: date-time
|
|
||||||
type: string
|
|
||||||
notBefore:
|
|
||||||
description: |-
|
|
||||||
The time after which the certificate stored in the secret named
|
|
||||||
by this resource in `spec.secretName` is valid.
|
|
||||||
format: date-time
|
|
||||||
type: string
|
|
||||||
renewalTime:
|
|
||||||
description: |-
|
|
||||||
RenewalTime is the time at which the certificate will be next
|
|
||||||
renewed.
|
|
||||||
If not set, no upcoming renewal is scheduled.
|
|
||||||
format: date-time
|
|
||||||
type: string
|
|
||||||
revision:
|
|
||||||
description: |-
|
|
||||||
The current 'revision' of the certificate as issued.
|
|
||||||
|
|
||||||
When a CertificateRequest resource is created, it will have the
|
|
||||||
`cert-manager.io/certificate-revision` set to one greater than the
|
|
||||||
current value of this field.
|
|
||||||
|
|
||||||
Upon issuance, this field will be set to the value of the annotation
|
|
||||||
on the CertificateRequest resource used to issue the certificate.
|
|
||||||
|
|
||||||
Persisting the value on the CertificateRequest resource allows the
|
|
||||||
certificates controller to know whether a request is part of an old
|
|
||||||
issuance or if it is part of the ongoing revision's issuance by
|
|
||||||
checking if the revision value in the annotation is greater than this
|
|
||||||
field.
|
|
||||||
type: integer
|
|
||||||
type: object
|
|
||||||
type: object
|
|
||||||
selectableFields:
|
|
||||||
- jsonPath: .spec.issuerRef.group
|
|
||||||
- jsonPath: .spec.issuerRef.kind
|
|
||||||
- jsonPath: .spec.issuerRef.name
|
|
||||||
served: true
|
|
||||||
storage: true
|
|
||||||
subresources:
|
|
||||||
status: {}
|
|
||||||
{{- end }}
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,245 +0,0 @@
|
|||||||
apiVersion: apps/v1
|
|
||||||
kind: Deployment
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.fullname" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
labels:
|
|
||||||
app: {{ template "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ template "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
{{- with .Values.deploymentAnnotations }}
|
|
||||||
annotations:
|
|
||||||
{{- toYaml . | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
spec:
|
|
||||||
replicas: {{ .Values.replicaCount }}
|
|
||||||
{{- /* The if statement below is equivalent to {{- if $value }} but will also return true for 0. */ -}}
|
|
||||||
{{- if not (has (quote .Values.global.revisionHistoryLimit) (list "" (quote ""))) }}
|
|
||||||
revisionHistoryLimit: {{ .Values.global.revisionHistoryLimit }}
|
|
||||||
{{- end }}
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app.kubernetes.io/name: {{ template "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- with .Values.strategy }}
|
|
||||||
strategy:
|
|
||||||
{{- toYaml . | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: {{ template "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ template "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- include "labels" . | nindent 8 }}
|
|
||||||
{{- with .Values.podLabels }}
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.podAnnotations }}
|
|
||||||
annotations:
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if and .Values.prometheus.enabled (not (or .Values.prometheus.servicemonitor.enabled .Values.prometheus.podmonitor.enabled)) }}
|
|
||||||
{{- if not .Values.podAnnotations }}
|
|
||||||
annotations:
|
|
||||||
{{- end }}
|
|
||||||
prometheus.io/path: "/metrics"
|
|
||||||
prometheus.io/scrape: 'true'
|
|
||||||
prometheus.io/port: '9402'
|
|
||||||
{{- end }}
|
|
||||||
spec:
|
|
||||||
{{- if not .Values.serviceAccount.create }}
|
|
||||||
{{- with .Values.global.imagePullSecrets }}
|
|
||||||
imagePullSecrets:
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
serviceAccountName: {{ template "cert-manager.serviceAccountName" . }}
|
|
||||||
{{- if hasKey .Values "automountServiceAccountToken" }}
|
|
||||||
automountServiceAccountToken: {{ .Values.automountServiceAccountToken }}
|
|
||||||
{{- end }}
|
|
||||||
enableServiceLinks: {{ .Values.enableServiceLinks }}
|
|
||||||
{{- with .Values.global.priorityClassName }}
|
|
||||||
priorityClassName: {{ . | quote }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if (hasKey .Values.global "hostUsers") }}
|
|
||||||
hostUsers: {{ .Values.global.hostUsers }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.securityContext }}
|
|
||||||
securityContext:
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if or .Values.volumes .Values.config}}
|
|
||||||
volumes:
|
|
||||||
{{- if .Values.config }}
|
|
||||||
- name: config
|
|
||||||
configMap:
|
|
||||||
name: {{ include "cert-manager.fullname" . }}
|
|
||||||
{{- end }}
|
|
||||||
{{ with .Values.volumes }}
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
containers:
|
|
||||||
- name: {{ .Chart.Name }}-controller
|
|
||||||
image: "{{ template "image" (tuple .Values.image .Values.imageRegistry .Values.imageNamespace (printf ":%s" .Chart.AppVersion)) }}"
|
|
||||||
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
|
||||||
args:
|
|
||||||
{{- /* The if statement below is equivalent to {{- if $value }} but will also return true for 0. */ -}}
|
|
||||||
{{- if not (has (quote .Values.global.logLevel) (list "" (quote ""))) }}
|
|
||||||
- --v={{ .Values.global.logLevel }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if .Values.config }}
|
|
||||||
- --config=/var/cert-manager/config/config.yaml
|
|
||||||
{{- end }}
|
|
||||||
{{- $config := default .Values.config "" }}
|
|
||||||
{{- if .Values.clusterResourceNamespace }}
|
|
||||||
- --cluster-resource-namespace={{ .Values.clusterResourceNamespace }}
|
|
||||||
{{- else }}
|
|
||||||
- --cluster-resource-namespace=$(POD_NAMESPACE)
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.global.leaderElection }}
|
|
||||||
- --leader-election-namespace={{ .namespace }}
|
|
||||||
{{- if .leaseDuration }}
|
|
||||||
- --leader-election-lease-duration={{ .leaseDuration }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if .renewDeadline }}
|
|
||||||
- --leader-election-renew-deadline={{ .renewDeadline }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if .retryPeriod }}
|
|
||||||
- --leader-election-retry-period={{ .retryPeriod }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
- --acme-http01-solver-image={{ template "image" (tuple .Values.acmesolver.image .Values.imageRegistry .Values.imageNamespace (printf ":%s" .Chart.AppVersion)) }}
|
|
||||||
{{- with .Values.extraArgs }}
|
|
||||||
{{- toYaml . | nindent 10 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.ingressShim }}
|
|
||||||
{{- if .defaultIssuerName }}
|
|
||||||
- --default-issuer-name={{ .defaultIssuerName }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if .defaultIssuerKind }}
|
|
||||||
- --default-issuer-kind={{ .defaultIssuerKind }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if .defaultIssuerGroup }}
|
|
||||||
- --default-issuer-group={{ .defaultIssuerGroup }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if .Values.featureGates }}
|
|
||||||
- --feature-gates={{ .Values.featureGates }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if .Values.maxConcurrentChallenges }}
|
|
||||||
- --max-concurrent-challenges={{ .Values.maxConcurrentChallenges }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if .Values.enableCertificateOwnerRef }}
|
|
||||||
- --enable-certificate-owner-ref=true
|
|
||||||
{{- end }}
|
|
||||||
{{- if .Values.dns01RecursiveNameserversOnly }}
|
|
||||||
- --dns01-recursive-nameservers-only=true
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.dns01RecursiveNameservers }}
|
|
||||||
- --dns01-recursive-nameservers={{ . }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if .Values.disableAutoApproval }}
|
|
||||||
- --controllers=-certificaterequests-approver
|
|
||||||
{{- end }}
|
|
||||||
ports:
|
|
||||||
- containerPort: 9402
|
|
||||||
name: http-metrics
|
|
||||||
protocol: TCP
|
|
||||||
- containerPort: 9403
|
|
||||||
name: http-healthz
|
|
||||||
protocol: TCP
|
|
||||||
{{- with .Values.containerSecurityContext }}
|
|
||||||
securityContext:
|
|
||||||
{{- toYaml . | nindent 12 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if or .Values.config .Values.volumeMounts }}
|
|
||||||
volumeMounts:
|
|
||||||
{{- if .Values.config }}
|
|
||||||
- name: config
|
|
||||||
mountPath: /var/cert-manager/config
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.volumeMounts }}
|
|
||||||
{{- toYaml . | nindent 12 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
env:
|
|
||||||
- name: POD_NAMESPACE
|
|
||||||
valueFrom:
|
|
||||||
fieldRef:
|
|
||||||
fieldPath: metadata.namespace
|
|
||||||
{{- with .Values.extraEnv }}
|
|
||||||
{{- toYaml . | nindent 10 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.http_proxy }}
|
|
||||||
- name: HTTP_PROXY
|
|
||||||
value: {{ . }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.https_proxy }}
|
|
||||||
- name: HTTPS_PROXY
|
|
||||||
value: {{ . }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.no_proxy }}
|
|
||||||
- name: NO_PROXY
|
|
||||||
value: {{ . }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.resources }}
|
|
||||||
resources:
|
|
||||||
{{- toYaml . | nindent 12 }}
|
|
||||||
{{- end }}
|
|
||||||
|
|
||||||
{{- with .Values.livenessProbe }}
|
|
||||||
{{- if .enabled }}
|
|
||||||
# LivenessProbe settings are based on those used for the Kubernetes
|
|
||||||
# controller-manager. See:
|
|
||||||
# https://github.com/kubernetes/kubernetes/blob/806b30170c61a38fedd54cc9ede4cd6275a1ad3b/cmd/kubeadm/app/util/staticpod/utils.go#L241-L245
|
|
||||||
livenessProbe:
|
|
||||||
httpGet:
|
|
||||||
port: http-healthz
|
|
||||||
path: /livez
|
|
||||||
scheme: HTTP
|
|
||||||
initialDelaySeconds: {{ .initialDelaySeconds }}
|
|
||||||
periodSeconds: {{ .periodSeconds }}
|
|
||||||
timeoutSeconds: {{ .timeoutSeconds }}
|
|
||||||
successThreshold: {{ .successThreshold }}
|
|
||||||
failureThreshold: {{ .failureThreshold }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if .Values.extraContainers }}
|
|
||||||
{{- toYaml .Values.extraContainers | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- $nodeSelector := .Values.global.nodeSelector | default dict }}
|
|
||||||
{{- $nodeSelector = merge $nodeSelector (.Values.nodeSelector | default dict) }}
|
|
||||||
{{- with $nodeSelector }}
|
|
||||||
nodeSelector:
|
|
||||||
{{- range $key, $value := . }}
|
|
||||||
{{ $key }}: {{ $value | quote }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.affinity }}
|
|
||||||
affinity:
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.tolerations }}
|
|
||||||
tolerations:
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.topologySpreadConstraints }}
|
|
||||||
topologySpreadConstraints:
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.podDnsPolicy }}
|
|
||||||
dnsPolicy: {{ . }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.podDnsConfig }}
|
|
||||||
dnsConfig:
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.hostAliases }}
|
|
||||||
hostAliases: {{ toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
{{ range .Values.extraObjects }}
|
|
||||||
---
|
|
||||||
{{ tpl . $ }}
|
|
||||||
{{ end }}
|
|
||||||
@ -1,38 +0,0 @@
|
|||||||
{{- if .Values.cainjector.networkPolicy.enabled }}
|
|
||||||
---
|
|
||||||
apiVersion: networking.k8s.io/v1
|
|
||||||
kind: NetworkPolicy
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cainjector.fullname" . }}-allow-ingress
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
spec:
|
|
||||||
ingress:
|
|
||||||
{{- with .Values.cainjector.networkPolicy.ingress }}
|
|
||||||
{{- toYaml . | nindent 2 }}
|
|
||||||
{{- end }}
|
|
||||||
podSelector:
|
|
||||||
matchLabels:
|
|
||||||
app.kubernetes.io/name: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "cainjector"
|
|
||||||
policyTypes:
|
|
||||||
- Ingress
|
|
||||||
---
|
|
||||||
apiVersion: networking.k8s.io/v1
|
|
||||||
kind: NetworkPolicy
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cainjector.fullname" . }}-allow-egress
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
spec:
|
|
||||||
egress:
|
|
||||||
{{- with .Values.cainjector.networkPolicy.egress }}
|
|
||||||
{{- toYaml . | nindent 2 }}
|
|
||||||
{{- end }}
|
|
||||||
podSelector:
|
|
||||||
matchLabels:
|
|
||||||
app.kubernetes.io/name: {{ include "cainjector.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "cainjector"
|
|
||||||
policyTypes:
|
|
||||||
- Egress
|
|
||||||
{{- end }}
|
|
||||||
@ -1,38 +0,0 @@
|
|||||||
{{- if .Values.networkPolicy.enabled }}
|
|
||||||
---
|
|
||||||
apiVersion: networking.k8s.io/v1
|
|
||||||
kind: NetworkPolicy
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-allow-ingress
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
spec:
|
|
||||||
ingress:
|
|
||||||
{{- with .Values.networkPolicy.ingress }}
|
|
||||||
{{- toYaml . | nindent 2 }}
|
|
||||||
{{- end }}
|
|
||||||
podSelector:
|
|
||||||
matchLabels:
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
policyTypes:
|
|
||||||
- Ingress
|
|
||||||
---
|
|
||||||
apiVersion: networking.k8s.io/v1
|
|
||||||
kind: NetworkPolicy
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-allow-egress
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
spec:
|
|
||||||
egress:
|
|
||||||
{{- with .Values.networkPolicy.egress }}
|
|
||||||
{{- toYaml . | nindent 2 }}
|
|
||||||
{{- end }}
|
|
||||||
podSelector:
|
|
||||||
matchLabels:
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
policyTypes:
|
|
||||||
- Egress
|
|
||||||
{{- end }}
|
|
||||||
@ -1,38 +0,0 @@
|
|||||||
{{- if .Values.webhook.networkPolicy.enabled }}
|
|
||||||
---
|
|
||||||
apiVersion: networking.k8s.io/v1
|
|
||||||
kind: NetworkPolicy
|
|
||||||
metadata:
|
|
||||||
name: {{ template "webhook.fullname" . }}-allow-ingress
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
spec:
|
|
||||||
ingress:
|
|
||||||
{{- with .Values.webhook.networkPolicy.ingress }}
|
|
||||||
{{- toYaml . | nindent 2 }}
|
|
||||||
{{- end }}
|
|
||||||
podSelector:
|
|
||||||
matchLabels:
|
|
||||||
app.kubernetes.io/name: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "webhook"
|
|
||||||
policyTypes:
|
|
||||||
- Ingress
|
|
||||||
---
|
|
||||||
apiVersion: networking.k8s.io/v1
|
|
||||||
kind: NetworkPolicy
|
|
||||||
metadata:
|
|
||||||
name: {{ template "webhook.fullname" . }}-allow-egress
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
spec:
|
|
||||||
egress:
|
|
||||||
{{- with .Values.webhook.networkPolicy.egress }}
|
|
||||||
{{- toYaml . | nindent 2 }}
|
|
||||||
{{- end }}
|
|
||||||
podSelector:
|
|
||||||
matchLabels:
|
|
||||||
app.kubernetes.io/name: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "webhook"
|
|
||||||
policyTypes:
|
|
||||||
- Egress
|
|
||||||
{{- end }}
|
|
||||||
@ -1,32 +0,0 @@
|
|||||||
{{- if .Values.podDisruptionBudget.enabled }}
|
|
||||||
apiVersion: policy/v1
|
|
||||||
kind: PodDisruptionBudget
|
|
||||||
metadata:
|
|
||||||
name: {{ include "cert-manager.fullname" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
spec:
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
|
|
||||||
{{- if not (or (hasKey .Values.podDisruptionBudget "minAvailable") (hasKey .Values.podDisruptionBudget "maxUnavailable")) }}
|
|
||||||
minAvailable: 1 # Default value because minAvailable and maxUnavailable are not set
|
|
||||||
{{- end }}
|
|
||||||
{{- if hasKey .Values.podDisruptionBudget "minAvailable" }}
|
|
||||||
minAvailable: {{ .Values.podDisruptionBudget.minAvailable }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if hasKey .Values.podDisruptionBudget "maxUnavailable" }}
|
|
||||||
maxUnavailable: {{ .Values.podDisruptionBudget.maxUnavailable }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.podDisruptionBudget.unhealthyPodEvictionPolicy }}
|
|
||||||
unhealthyPodEvictionPolicy: {{ . }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
@ -1,63 +0,0 @@
|
|||||||
{{- if and .Values.prometheus.enabled (and .Values.prometheus.podmonitor.enabled .Values.prometheus.servicemonitor.enabled) }}
|
|
||||||
{{- fail "Either .Values.prometheus.podmonitor.enabled or .Values.prometheus.servicemonitor.enabled can be enabled at a time, but not both." }}
|
|
||||||
{{- else if and .Values.prometheus.enabled .Values.prometheus.podmonitor.enabled }}
|
|
||||||
apiVersion: monitoring.coreos.com/v1
|
|
||||||
kind: PodMonitor
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.fullname" . }}
|
|
||||||
{{- if .Values.prometheus.podmonitor.namespace }}
|
|
||||||
namespace: {{ .Values.prometheus.podmonitor.namespace }}
|
|
||||||
{{- else }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
{{- end }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
prometheus: {{ .Values.prometheus.podmonitor.prometheusInstance }}
|
|
||||||
{{- with .Values.prometheus.podmonitor.labels }}
|
|
||||||
{{- toYaml . | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if .Values.prometheus.podmonitor.annotations }}
|
|
||||||
annotations:
|
|
||||||
{{- with .Values.prometheus.podmonitor.annotations }}
|
|
||||||
{{- toYaml . | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
spec:
|
|
||||||
jobLabel: app.kubernetes.io/name
|
|
||||||
selector:
|
|
||||||
matchExpressions:
|
|
||||||
- key: app.kubernetes.io/name
|
|
||||||
operator: In
|
|
||||||
values:
|
|
||||||
- {{ include "cainjector.name" . }}
|
|
||||||
- {{ template "cert-manager.name" . }}
|
|
||||||
- {{ include "webhook.name" . }}
|
|
||||||
- key: app.kubernetes.io/instance
|
|
||||||
operator: In
|
|
||||||
values:
|
|
||||||
- {{ .Release.Name }}
|
|
||||||
- key: app.kubernetes.io/component
|
|
||||||
operator: In
|
|
||||||
values:
|
|
||||||
- cainjector
|
|
||||||
- controller
|
|
||||||
- webhook
|
|
||||||
{{- if .Values.prometheus.podmonitor.namespace }}
|
|
||||||
namespaceSelector:
|
|
||||||
matchNames:
|
|
||||||
- {{ include "cert-manager.namespace" . }}
|
|
||||||
{{- end }}
|
|
||||||
podMetricsEndpoints:
|
|
||||||
- port: http-metrics
|
|
||||||
path: {{ .Values.prometheus.podmonitor.path }}
|
|
||||||
interval: {{ .Values.prometheus.podmonitor.interval }}
|
|
||||||
scrapeTimeout: {{ .Values.prometheus.podmonitor.scrapeTimeout }}
|
|
||||||
honorLabels: {{ .Values.prometheus.podmonitor.honorLabels }}
|
|
||||||
{{- with .Values.prometheus.podmonitor.endpointAdditionalProperties }}
|
|
||||||
{{- toYaml . | nindent 6 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
@ -1,18 +0,0 @@
|
|||||||
{{- if .Values.global.podSecurityPolicy.enabled }}
|
|
||||||
kind: ClusterRole
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-psp
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
rules:
|
|
||||||
- apiGroups: ['policy']
|
|
||||||
resources: ['podsecuritypolicies']
|
|
||||||
verbs: ['use']
|
|
||||||
resourceNames:
|
|
||||||
- {{ template "cert-manager.fullname" . }}
|
|
||||||
{{- end }}
|
|
||||||
@ -1,20 +0,0 @@
|
|||||||
{{- if .Values.global.podSecurityPolicy.enabled }}
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: ClusterRoleBinding
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-psp
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
roleRef:
|
|
||||||
apiGroup: rbac.authorization.k8s.io
|
|
||||||
kind: ClusterRole
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-psp
|
|
||||||
subjects:
|
|
||||||
- kind: ServiceAccount
|
|
||||||
name: {{ template "cert-manager.serviceAccountName" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
{{- end }}
|
|
||||||
@ -1,49 +0,0 @@
|
|||||||
{{- if .Values.global.podSecurityPolicy.enabled }}
|
|
||||||
apiVersion: policy/v1beta1
|
|
||||||
kind: PodSecurityPolicy
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.fullname" . }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
annotations:
|
|
||||||
seccomp.security.alpha.kubernetes.io/allowedProfileNames: 'docker/default'
|
|
||||||
seccomp.security.alpha.kubernetes.io/defaultProfileName: 'docker/default'
|
|
||||||
{{- if .Values.global.podSecurityPolicy.useAppArmor }}
|
|
||||||
apparmor.security.beta.kubernetes.io/allowedProfileNames: 'runtime/default'
|
|
||||||
apparmor.security.beta.kubernetes.io/defaultProfileName: 'runtime/default'
|
|
||||||
{{- end }}
|
|
||||||
spec:
|
|
||||||
privileged: false
|
|
||||||
allowPrivilegeEscalation: false
|
|
||||||
allowedCapabilities: [] # default set of capabilities are implicitly allowed
|
|
||||||
volumes:
|
|
||||||
- 'configMap'
|
|
||||||
- 'emptyDir'
|
|
||||||
- 'projected'
|
|
||||||
- 'secret'
|
|
||||||
- 'downwardAPI'
|
|
||||||
hostNetwork: false
|
|
||||||
hostIPC: false
|
|
||||||
hostPID: false
|
|
||||||
runAsUser:
|
|
||||||
rule: 'MustRunAs'
|
|
||||||
ranges:
|
|
||||||
- min: 1000
|
|
||||||
max: 1000
|
|
||||||
seLinux:
|
|
||||||
rule: 'RunAsAny'
|
|
||||||
supplementalGroups:
|
|
||||||
rule: 'MustRunAs'
|
|
||||||
ranges:
|
|
||||||
- min: 1000
|
|
||||||
max: 1000
|
|
||||||
fsGroup:
|
|
||||||
rule: 'MustRunAs'
|
|
||||||
ranges:
|
|
||||||
- min: 1000
|
|
||||||
max: 1000
|
|
||||||
{{- end }}
|
|
||||||
@ -1,617 +0,0 @@
|
|||||||
{{- if .Values.global.rbac.create }}
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: Role
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.fullname" . }}:leaderelection
|
|
||||||
namespace: {{ .Values.global.leaderElection.namespace }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
rules:
|
|
||||||
- apiGroups: ["coordination.k8s.io"]
|
|
||||||
resources: ["leases"]
|
|
||||||
resourceNames: ["cert-manager-controller"]
|
|
||||||
verbs: ["get", "update", "patch"]
|
|
||||||
- apiGroups: ["coordination.k8s.io"]
|
|
||||||
resources: ["leases"]
|
|
||||||
verbs: ["create"]
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# grant cert-manager permission to manage the leaderelection configmap in the
|
|
||||||
# leader election namespace
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: RoleBinding
|
|
||||||
metadata:
|
|
||||||
name: {{ include "cert-manager.fullname" . }}:leaderelection
|
|
||||||
namespace: {{ .Values.global.leaderElection.namespace }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
roleRef:
|
|
||||||
apiGroup: rbac.authorization.k8s.io
|
|
||||||
kind: Role
|
|
||||||
name: {{ template "cert-manager.fullname" . }}:leaderelection
|
|
||||||
subjects:
|
|
||||||
- kind: ServiceAccount
|
|
||||||
name: {{ template "cert-manager.serviceAccountName" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
{{- if .Values.serviceAccount.create }}
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: Role
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-tokenrequest
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
rules:
|
|
||||||
- apiGroups: [""]
|
|
||||||
resources: ["serviceaccounts/token"]
|
|
||||||
resourceNames: ["{{ template "cert-manager.serviceAccountName" . }}"]
|
|
||||||
verbs: ["create"]
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# grant cert-manager permission to create tokens for the serviceaccount
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: RoleBinding
|
|
||||||
metadata:
|
|
||||||
name: {{ include "cert-manager.fullname" . }}-tokenrequest
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
roleRef:
|
|
||||||
apiGroup: rbac.authorization.k8s.io
|
|
||||||
kind: Role
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-tokenrequest
|
|
||||||
subjects:
|
|
||||||
- kind: ServiceAccount
|
|
||||||
name: {{ template "cert-manager.serviceAccountName" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
{{- end }}
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Issuer controller role
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: ClusterRole
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-controller-issuers
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
rules:
|
|
||||||
- apiGroups: ["cert-manager.io"]
|
|
||||||
resources: ["issuers", "issuers/status"]
|
|
||||||
verbs: ["update", "patch"]
|
|
||||||
- apiGroups: ["cert-manager.io"]
|
|
||||||
resources: ["issuers"]
|
|
||||||
verbs: ["get", "list", "watch"]
|
|
||||||
- apiGroups: [""]
|
|
||||||
resources: ["secrets"]
|
|
||||||
verbs: ["get", "list", "watch", "create", "update", "delete"]
|
|
||||||
- apiGroups: [""]
|
|
||||||
resources: ["events"]
|
|
||||||
verbs: ["create", "patch"]
|
|
||||||
---
|
|
||||||
|
|
||||||
# ClusterIssuer controller role
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: ClusterRole
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-controller-clusterissuers
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
rules:
|
|
||||||
- apiGroups: ["cert-manager.io"]
|
|
||||||
resources: ["clusterissuers", "clusterissuers/status"]
|
|
||||||
verbs: ["update", "patch"]
|
|
||||||
- apiGroups: ["cert-manager.io"]
|
|
||||||
resources: ["clusterissuers"]
|
|
||||||
verbs: ["get", "list", "watch"]
|
|
||||||
- apiGroups: [""]
|
|
||||||
resources: ["secrets"]
|
|
||||||
verbs: ["get", "list", "watch", "create", "update", "delete"]
|
|
||||||
- apiGroups: [""]
|
|
||||||
resources: ["events"]
|
|
||||||
verbs: ["create", "patch"]
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Certificates controller role
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: ClusterRole
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-controller-certificates
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
rules:
|
|
||||||
- apiGroups: ["cert-manager.io"]
|
|
||||||
resources: ["certificates", "certificates/status", "certificaterequests", "certificaterequests/status"]
|
|
||||||
verbs: ["update", "patch"]
|
|
||||||
- apiGroups: ["cert-manager.io"]
|
|
||||||
resources: ["certificates", "certificaterequests", "clusterissuers", "issuers"]
|
|
||||||
verbs: ["get", "list", "watch"]
|
|
||||||
# We require these rules to support users with the OwnerReferencesPermissionEnforcement
|
|
||||||
# admission controller enabled:
|
|
||||||
# https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#ownerreferencespermissionenforcement
|
|
||||||
- apiGroups: ["cert-manager.io"]
|
|
||||||
resources: ["certificates/finalizers", "certificaterequests/finalizers"]
|
|
||||||
verbs: ["update"]
|
|
||||||
- apiGroups: ["acme.cert-manager.io"]
|
|
||||||
resources: ["orders"]
|
|
||||||
verbs: ["create", "delete", "get", "list", "watch"]
|
|
||||||
- apiGroups: [""]
|
|
||||||
resources: ["secrets"]
|
|
||||||
verbs: ["get", "list", "watch", "create", "update", "delete", "patch"]
|
|
||||||
- apiGroups: [""]
|
|
||||||
resources: ["events"]
|
|
||||||
verbs: ["create", "patch"]
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Orders controller role
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: ClusterRole
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-controller-orders
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
rules:
|
|
||||||
- apiGroups: ["acme.cert-manager.io"]
|
|
||||||
resources: ["orders", "orders/status"]
|
|
||||||
verbs: ["update", "patch"]
|
|
||||||
- apiGroups: ["acme.cert-manager.io"]
|
|
||||||
resources: ["orders", "challenges"]
|
|
||||||
verbs: ["get", "list", "watch"]
|
|
||||||
- apiGroups: ["cert-manager.io"]
|
|
||||||
resources: ["clusterissuers", "issuers"]
|
|
||||||
verbs: ["get", "list", "watch"]
|
|
||||||
- apiGroups: ["acme.cert-manager.io"]
|
|
||||||
resources: ["challenges"]
|
|
||||||
verbs: ["create", "delete"]
|
|
||||||
# We require these rules to support users with the OwnerReferencesPermissionEnforcement
|
|
||||||
# admission controller enabled:
|
|
||||||
# https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#ownerreferencespermissionenforcement
|
|
||||||
- apiGroups: ["acme.cert-manager.io"]
|
|
||||||
resources: ["orders/finalizers"]
|
|
||||||
verbs: ["update"]
|
|
||||||
- apiGroups: [""]
|
|
||||||
resources: ["secrets"]
|
|
||||||
verbs: ["get", "list", "watch"]
|
|
||||||
- apiGroups: [""]
|
|
||||||
resources: ["events"]
|
|
||||||
verbs: ["create", "patch"]
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Challenges controller role
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: ClusterRole
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-controller-challenges
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
rules:
|
|
||||||
# Use to update challenge resource status
|
|
||||||
- apiGroups: ["acme.cert-manager.io"]
|
|
||||||
resources: ["challenges", "challenges/status"]
|
|
||||||
verbs: ["update", "patch"]
|
|
||||||
# Used to watch challenge resources
|
|
||||||
- apiGroups: ["acme.cert-manager.io"]
|
|
||||||
resources: ["challenges"]
|
|
||||||
verbs: ["get", "list", "watch"]
|
|
||||||
# Used to watch challenges, issuer and clusterissuer resources
|
|
||||||
- apiGroups: ["cert-manager.io"]
|
|
||||||
resources: ["issuers", "clusterissuers"]
|
|
||||||
verbs: ["get", "list", "watch"]
|
|
||||||
# Need to be able to retrieve ACME account private key to complete challenges
|
|
||||||
- apiGroups: [""]
|
|
||||||
resources: ["secrets"]
|
|
||||||
verbs: ["get", "list", "watch"]
|
|
||||||
# Used to create events
|
|
||||||
- apiGroups: [""]
|
|
||||||
resources: ["events"]
|
|
||||||
verbs: ["create", "patch"]
|
|
||||||
# HTTP01 rules
|
|
||||||
- apiGroups: [""]
|
|
||||||
resources: ["pods", "services"]
|
|
||||||
verbs: ["get", "list", "watch", "create", "delete"]
|
|
||||||
- apiGroups: ["networking.k8s.io"]
|
|
||||||
resources: ["ingresses"]
|
|
||||||
verbs: ["get", "list", "watch", "create", "delete", "update"]
|
|
||||||
- apiGroups: ["gateway.networking.k8s.io"]
|
|
||||||
resources: ["httproutes"]
|
|
||||||
verbs: ["get", "list", "watch", "create", "delete", "update"]
|
|
||||||
# We require the ability to specify a custom hostname when we are creating
|
|
||||||
# new ingress resources.
|
|
||||||
# See: https://github.com/openshift/origin/blob/21f191775636f9acadb44fa42beeb4f75b255532/pkg/route/apiserver/admission/ingress_admission.go#L84-L148
|
|
||||||
- apiGroups: ["route.openshift.io"]
|
|
||||||
resources: ["routes/custom-host"]
|
|
||||||
verbs: ["create"]
|
|
||||||
# We require these rules to support users with the OwnerReferencesPermissionEnforcement
|
|
||||||
# admission controller enabled:
|
|
||||||
# https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#ownerreferencespermissionenforcement
|
|
||||||
- apiGroups: ["acme.cert-manager.io"]
|
|
||||||
resources: ["challenges/finalizers"]
|
|
||||||
verbs: ["update"]
|
|
||||||
# DNS01 rules (duplicated above)
|
|
||||||
- apiGroups: [""]
|
|
||||||
resources: ["secrets"]
|
|
||||||
verbs: ["get", "list", "watch"]
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# ingress-shim controller role
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: ClusterRole
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-controller-ingress-shim
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
rules:
|
|
||||||
- apiGroups: ["cert-manager.io"]
|
|
||||||
resources: ["certificates", "certificaterequests"]
|
|
||||||
verbs: ["create", "update", "delete"]
|
|
||||||
- apiGroups: ["cert-manager.io"]
|
|
||||||
resources: ["certificates", "certificaterequests", "issuers", "clusterissuers"]
|
|
||||||
verbs: ["get", "list", "watch"]
|
|
||||||
- apiGroups: ["networking.k8s.io"]
|
|
||||||
resources: ["ingresses"]
|
|
||||||
verbs: ["get", "list", "watch"]
|
|
||||||
# We require these rules to support users with the OwnerReferencesPermissionEnforcement
|
|
||||||
# admission controller enabled:
|
|
||||||
# https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#ownerreferencespermissionenforcement
|
|
||||||
- apiGroups: ["networking.k8s.io"]
|
|
||||||
resources: ["ingresses/finalizers"]
|
|
||||||
verbs: ["update"]
|
|
||||||
- apiGroups: ["gateway.networking.k8s.io"]
|
|
||||||
resources: ["gateways", "httproutes", "listenersets"]
|
|
||||||
verbs: ["get", "list", "watch"]
|
|
||||||
- apiGroups: ["gateway.networking.k8s.io"]
|
|
||||||
resources: ["gateways/finalizers", "httproutes/finalizers", "listenersets/finalizers"]
|
|
||||||
verbs: ["update"]
|
|
||||||
- apiGroups: [""]
|
|
||||||
resources: ["events"]
|
|
||||||
verbs: ["create", "patch"]
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: ClusterRoleBinding
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-controller-issuers
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
roleRef:
|
|
||||||
apiGroup: rbac.authorization.k8s.io
|
|
||||||
kind: ClusterRole
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-controller-issuers
|
|
||||||
subjects:
|
|
||||||
- name: {{ template "cert-manager.serviceAccountName" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
kind: ServiceAccount
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: ClusterRoleBinding
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-controller-clusterissuers
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
roleRef:
|
|
||||||
apiGroup: rbac.authorization.k8s.io
|
|
||||||
kind: ClusterRole
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-controller-clusterissuers
|
|
||||||
subjects:
|
|
||||||
- name: {{ template "cert-manager.serviceAccountName" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
kind: ServiceAccount
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: ClusterRoleBinding
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-controller-certificates
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
roleRef:
|
|
||||||
apiGroup: rbac.authorization.k8s.io
|
|
||||||
kind: ClusterRole
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-controller-certificates
|
|
||||||
subjects:
|
|
||||||
- name: {{ template "cert-manager.serviceAccountName" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
kind: ServiceAccount
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: ClusterRoleBinding
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-controller-orders
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
roleRef:
|
|
||||||
apiGroup: rbac.authorization.k8s.io
|
|
||||||
kind: ClusterRole
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-controller-orders
|
|
||||||
subjects:
|
|
||||||
- name: {{ template "cert-manager.serviceAccountName" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
kind: ServiceAccount
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: ClusterRoleBinding
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-controller-challenges
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
roleRef:
|
|
||||||
apiGroup: rbac.authorization.k8s.io
|
|
||||||
kind: ClusterRole
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-controller-challenges
|
|
||||||
subjects:
|
|
||||||
- name: {{ template "cert-manager.serviceAccountName" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
kind: ServiceAccount
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: ClusterRoleBinding
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-controller-ingress-shim
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
roleRef:
|
|
||||||
apiGroup: rbac.authorization.k8s.io
|
|
||||||
kind: ClusterRole
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-controller-ingress-shim
|
|
||||||
subjects:
|
|
||||||
- name: {{ template "cert-manager.serviceAccountName" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
kind: ServiceAccount
|
|
||||||
|
|
||||||
{{- if .Values.global.rbac.aggregateClusterRoles }}
|
|
||||||
---
|
|
||||||
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: ClusterRole
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-cluster-view
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
rbac.authorization.k8s.io/aggregate-to-cluster-reader: "true"
|
|
||||||
rules:
|
|
||||||
- apiGroups: ["cert-manager.io"]
|
|
||||||
resources: ["clusterissuers"]
|
|
||||||
verbs: ["get", "list", "watch"]
|
|
||||||
|
|
||||||
{{- end }}
|
|
||||||
---
|
|
||||||
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: ClusterRole
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-view
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
{{- if .Values.global.rbac.aggregateClusterRoles }}
|
|
||||||
rbac.authorization.k8s.io/aggregate-to-view: "true"
|
|
||||||
rbac.authorization.k8s.io/aggregate-to-edit: "true"
|
|
||||||
rbac.authorization.k8s.io/aggregate-to-admin: "true"
|
|
||||||
rbac.authorization.k8s.io/aggregate-to-cluster-reader: "true"
|
|
||||||
{{- end }}
|
|
||||||
rules:
|
|
||||||
- apiGroups: ["cert-manager.io"]
|
|
||||||
resources: ["certificates", "certificaterequests", "issuers"]
|
|
||||||
verbs: ["get", "list", "watch"]
|
|
||||||
- apiGroups: ["acme.cert-manager.io"]
|
|
||||||
resources: ["challenges", "orders"]
|
|
||||||
verbs: ["get", "list", "watch"]
|
|
||||||
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: ClusterRole
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-edit
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
{{- if .Values.global.rbac.aggregateClusterRoles }}
|
|
||||||
rbac.authorization.k8s.io/aggregate-to-edit: "true"
|
|
||||||
rbac.authorization.k8s.io/aggregate-to-admin: "true"
|
|
||||||
{{- end }}
|
|
||||||
rules:
|
|
||||||
- apiGroups: ["cert-manager.io"]
|
|
||||||
resources: ["certificates", "certificaterequests", "issuers"]
|
|
||||||
verbs: ["create", "delete", "deletecollection", "patch", "update"]
|
|
||||||
- apiGroups: ["cert-manager.io"]
|
|
||||||
resources: ["certificates/status"]
|
|
||||||
verbs: ["update"]
|
|
||||||
- apiGroups: ["acme.cert-manager.io"]
|
|
||||||
resources: ["challenges", "orders"]
|
|
||||||
verbs: ["create", "delete", "deletecollection", "patch", "update"]
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
{{- if not .Values.disableAutoApproval -}}
|
|
||||||
|
|
||||||
# Permission to approve CertificateRequests referencing cert-manager.io Issuers and ClusterIssuers
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: ClusterRole
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-controller-approve:cert-manager-io
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "cert-manager"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
rules:
|
|
||||||
- apiGroups: ["cert-manager.io"]
|
|
||||||
resources: ["signers"]
|
|
||||||
verbs: ["approve"]
|
|
||||||
{{- with .Values.approveSignerNames }}
|
|
||||||
resourceNames:
|
|
||||||
{{- range . }}
|
|
||||||
- {{ . | quote }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: ClusterRoleBinding
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-controller-approve:cert-manager-io
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "cert-manager"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
roleRef:
|
|
||||||
apiGroup: rbac.authorization.k8s.io
|
|
||||||
kind: ClusterRole
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-controller-approve:cert-manager-io
|
|
||||||
subjects:
|
|
||||||
- name: {{ template "cert-manager.serviceAccountName" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
kind: ServiceAccount
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
# Permission to:
|
|
||||||
# - Update and sign CertificateSigningRequests referencing cert-manager.io Issuers and ClusterIssuers
|
|
||||||
# - Perform SubjectAccessReviews to test whether users are able to reference Namespaced Issuers
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: ClusterRole
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-controller-certificatesigningrequests
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "cert-manager"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
rules:
|
|
||||||
- apiGroups: ["certificates.k8s.io"]
|
|
||||||
resources: ["certificatesigningrequests"]
|
|
||||||
verbs: ["get", "list", "watch", "update"]
|
|
||||||
- apiGroups: ["certificates.k8s.io"]
|
|
||||||
resources: ["certificatesigningrequests/status"]
|
|
||||||
verbs: ["update", "patch"]
|
|
||||||
- apiGroups: ["certificates.k8s.io"]
|
|
||||||
resources: ["signers"]
|
|
||||||
resourceNames: ["issuers.cert-manager.io/*", "clusterissuers.cert-manager.io/*"]
|
|
||||||
verbs: ["sign"]
|
|
||||||
- apiGroups: ["authorization.k8s.io"]
|
|
||||||
resources: ["subjectaccessreviews"]
|
|
||||||
verbs: ["create"]
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: ClusterRoleBinding
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-controller-certificatesigningrequests
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "cert-manager"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
roleRef:
|
|
||||||
apiGroup: rbac.authorization.k8s.io
|
|
||||||
kind: ClusterRole
|
|
||||||
name: {{ template "cert-manager.fullname" . }}-controller-certificatesigningrequests
|
|
||||||
subjects:
|
|
||||||
- name: {{ template "cert-manager.serviceAccountName" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
kind: ServiceAccount
|
|
||||||
{{- end }}
|
|
||||||
@ -1,37 +0,0 @@
|
|||||||
{{- if and .Values.prometheus.enabled (not .Values.prometheus.podmonitor.enabled) }}
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.fullname" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
{{- with .Values.serviceAnnotations }}
|
|
||||||
annotations:
|
|
||||||
{{ toYaml . | indent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
{{- with .Values.serviceLabels }}
|
|
||||||
{{- toYaml . | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
spec:
|
|
||||||
type: ClusterIP
|
|
||||||
{{- if .Values.serviceIPFamilyPolicy }}
|
|
||||||
ipFamilyPolicy: {{ .Values.serviceIPFamilyPolicy }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if .Values.serviceIPFamilies }}
|
|
||||||
ipFamilies: {{ .Values.serviceIPFamilies | toYaml | nindent 2 }}
|
|
||||||
{{- end }}
|
|
||||||
ports:
|
|
||||||
- protocol: TCP
|
|
||||||
port: 9402
|
|
||||||
name: tcp-prometheus-servicemonitor
|
|
||||||
targetPort: {{ .Values.prometheus.servicemonitor.targetPort }}
|
|
||||||
selector:
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- end }}
|
|
||||||
@ -1,28 +0,0 @@
|
|||||||
{{- if .Values.serviceAccount.create }}
|
|
||||||
apiVersion: v1
|
|
||||||
kind: ServiceAccount
|
|
||||||
{{- with .Values.global.imagePullSecrets }}
|
|
||||||
imagePullSecrets:
|
|
||||||
{{- toYaml . | nindent 2 }}
|
|
||||||
{{- end }}
|
|
||||||
automountServiceAccountToken: {{ .Values.serviceAccount.automountServiceAccountToken }}
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.serviceAccountName" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
{{- with .Values.serviceAccount.annotations }}
|
|
||||||
annotations:
|
|
||||||
{{- range $k, $v := . }}
|
|
||||||
{{- $value := $v | quote }}
|
|
||||||
{{- printf "%s: %s" (tpl $k $) (tpl $value $) | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
{{- with .Values.serviceAccount.labels }}
|
|
||||||
{{- toYaml . | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
@ -1,69 +0,0 @@
|
|||||||
{{- if and .Values.prometheus.enabled (and .Values.prometheus.podmonitor.enabled .Values.prometheus.servicemonitor.enabled) }}
|
|
||||||
{{- fail "Either .Values.prometheus.podmonitor.enabled or .Values.prometheus.servicemonitor.enabled can be enabled at a time, but not both." }}
|
|
||||||
{{- else if and .Values.prometheus.enabled .Values.prometheus.servicemonitor.enabled }}
|
|
||||||
apiVersion: monitoring.coreos.com/v1
|
|
||||||
kind: ServiceMonitor
|
|
||||||
metadata:
|
|
||||||
name: {{ template "cert-manager.fullname" . }}
|
|
||||||
{{- if .Values.prometheus.servicemonitor.namespace }}
|
|
||||||
namespace: {{ .Values.prometheus.servicemonitor.namespace }}
|
|
||||||
{{- else }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
{{- end }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "cert-manager.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "controller"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
{{- if .Values.prometheus.servicemonitor.prometheusInstance }}
|
|
||||||
prometheus: {{ .Values.prometheus.servicemonitor.prometheusInstance }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.prometheus.servicemonitor.labels }}
|
|
||||||
{{- toYaml . | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if .Values.prometheus.servicemonitor.annotations }}
|
|
||||||
annotations:
|
|
||||||
{{- with .Values.prometheus.servicemonitor.annotations }}
|
|
||||||
{{- toYaml . | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
spec:
|
|
||||||
jobLabel: app.kubernetes.io/name
|
|
||||||
selector:
|
|
||||||
matchExpressions:
|
|
||||||
- key: app.kubernetes.io/name
|
|
||||||
operator: In
|
|
||||||
values:
|
|
||||||
- {{ include "cainjector.name" . }}
|
|
||||||
- {{ template "cert-manager.name" . }}
|
|
||||||
- {{ include "webhook.name" . }}
|
|
||||||
- key: app.kubernetes.io/instance
|
|
||||||
operator: In
|
|
||||||
values:
|
|
||||||
- {{ .Release.Name }}
|
|
||||||
- key: app.kubernetes.io/component
|
|
||||||
operator: In
|
|
||||||
values:
|
|
||||||
- cainjector
|
|
||||||
- controller
|
|
||||||
- webhook
|
|
||||||
{{- if .Values.prometheus.servicemonitor.namespace }}
|
|
||||||
namespaceSelector:
|
|
||||||
matchNames:
|
|
||||||
- {{ include "cert-manager.namespace" . }}
|
|
||||||
{{- end }}
|
|
||||||
endpoints:
|
|
||||||
- targetPort: {{ .Values.prometheus.servicemonitor.targetPort }}
|
|
||||||
path: {{ .Values.prometheus.servicemonitor.path }}
|
|
||||||
{{- if .Values.prometheus.servicemonitor.interval }}
|
|
||||||
interval: {{ .Values.prometheus.servicemonitor.interval }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if .Values.prometheus.servicemonitor.scrapeTimeout }}
|
|
||||||
scrapeTimeout: {{ .Values.prometheus.servicemonitor.scrapeTimeout }}
|
|
||||||
{{- end }}
|
|
||||||
honorLabels: {{ .Values.prometheus.servicemonitor.honorLabels }}
|
|
||||||
{{- with .Values.prometheus.servicemonitor.endpointAdditionalProperties }}
|
|
||||||
{{- toYaml . | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
@ -1,106 +0,0 @@
|
|||||||
{{- if .Values.startupapicheck.enabled }}
|
|
||||||
apiVersion: batch/v1
|
|
||||||
kind: Job
|
|
||||||
metadata:
|
|
||||||
name: {{ include "startupapicheck.fullname" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "startupapicheck.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "startupapicheck.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "startupapicheck"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
{{- with .Values.startupapicheck.jobAnnotations }}
|
|
||||||
annotations:
|
|
||||||
{{- toYaml . | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
spec:
|
|
||||||
backoffLimit: {{ .Values.startupapicheck.backoffLimit }}
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: {{ include "startupapicheck.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "startupapicheck.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "startupapicheck"
|
|
||||||
{{- include "labels" . | nindent 8 }}
|
|
||||||
{{- with .Values.startupapicheck.podLabels }}
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.startupapicheck.podAnnotations }}
|
|
||||||
annotations:
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
spec:
|
|
||||||
restartPolicy: OnFailure
|
|
||||||
serviceAccountName: {{ template "startupapicheck.serviceAccountName" . }}
|
|
||||||
{{- if hasKey .Values.startupapicheck "automountServiceAccountToken" }}
|
|
||||||
automountServiceAccountToken: {{ .Values.startupapicheck.automountServiceAccountToken }}
|
|
||||||
{{- end }}
|
|
||||||
enableServiceLinks: {{ .Values.startupapicheck.enableServiceLinks }}
|
|
||||||
{{- with .Values.global.priorityClassName }}
|
|
||||||
priorityClassName: {{ . | quote }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if (hasKey .Values.global "hostUsers") }}
|
|
||||||
hostUsers: {{ .Values.global.hostUsers }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.startupapicheck.securityContext }}
|
|
||||||
securityContext:
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.global.imagePullSecrets }}
|
|
||||||
imagePullSecrets:
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
containers:
|
|
||||||
- name: {{ .Chart.Name }}-startupapicheck
|
|
||||||
image: "{{ template "image" (tuple .Values.startupapicheck.image .Values.imageRegistry .Values.imageNamespace (printf ":%s" .Chart.AppVersion)) }}"
|
|
||||||
imagePullPolicy: {{ .Values.startupapicheck.image.pullPolicy }}
|
|
||||||
args:
|
|
||||||
- check
|
|
||||||
- api
|
|
||||||
- --wait={{ .Values.startupapicheck.timeout }}
|
|
||||||
{{- with .Values.startupapicheck.extraArgs }}
|
|
||||||
{{- toYaml . | nindent 10 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.startupapicheck.containerSecurityContext }}
|
|
||||||
securityContext:
|
|
||||||
{{- toYaml . | nindent 12 }}
|
|
||||||
{{- end }}
|
|
||||||
env:
|
|
||||||
- name: POD_NAMESPACE
|
|
||||||
valueFrom:
|
|
||||||
fieldRef:
|
|
||||||
fieldPath: metadata.namespace
|
|
||||||
{{- with .Values.startupapicheck.extraEnv }}
|
|
||||||
{{- toYaml . | nindent 10 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.startupapicheck.resources }}
|
|
||||||
resources:
|
|
||||||
{{- toYaml . | nindent 12 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.startupapicheck.volumeMounts }}
|
|
||||||
volumeMounts:
|
|
||||||
{{- toYaml . | nindent 12 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- $nodeSelector := .Values.global.nodeSelector | default dict }}
|
|
||||||
{{- $nodeSelector = merge $nodeSelector (.Values.startupapicheck.nodeSelector | default dict) }}
|
|
||||||
{{- with $nodeSelector }}
|
|
||||||
nodeSelector:
|
|
||||||
{{- range $key, $value := . }}
|
|
||||||
{{ $key }}: {{ $value | quote }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.startupapicheck.affinity }}
|
|
||||||
affinity:
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.startupapicheck.tolerations }}
|
|
||||||
tolerations:
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.startupapicheck.volumes }}
|
|
||||||
volumes:
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
@ -1,24 +0,0 @@
|
|||||||
{{- if .Values.startupapicheck.enabled }}
|
|
||||||
{{- if .Values.global.podSecurityPolicy.enabled }}
|
|
||||||
kind: ClusterRole
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
metadata:
|
|
||||||
name: {{ template "startupapicheck.fullname" . }}-psp
|
|
||||||
labels:
|
|
||||||
app: {{ include "startupapicheck.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "startupapicheck.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "startupapicheck"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
{{- with .Values.startupapicheck.rbac.annotations }}
|
|
||||||
annotations:
|
|
||||||
{{- toYaml . | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
rules:
|
|
||||||
- apiGroups: ['policy']
|
|
||||||
resources: ['podsecuritypolicies']
|
|
||||||
verbs: ['use']
|
|
||||||
resourceNames:
|
|
||||||
- {{ template "startupapicheck.fullname" . }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
@ -1,26 +0,0 @@
|
|||||||
{{- if .Values.startupapicheck.enabled }}
|
|
||||||
{{- if .Values.global.podSecurityPolicy.enabled }}
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: ClusterRoleBinding
|
|
||||||
metadata:
|
|
||||||
name: {{ template "startupapicheck.fullname" . }}-psp
|
|
||||||
labels:
|
|
||||||
app: {{ include "startupapicheck.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "startupapicheck.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "startupapicheck"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
{{- with .Values.startupapicheck.rbac.annotations }}
|
|
||||||
annotations:
|
|
||||||
{{- toYaml . | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
roleRef:
|
|
||||||
apiGroup: rbac.authorization.k8s.io
|
|
||||||
kind: ClusterRole
|
|
||||||
name: {{ template "startupapicheck.fullname" . }}-psp
|
|
||||||
subjects:
|
|
||||||
- kind: ServiceAccount
|
|
||||||
name: {{ template "startupapicheck.serviceAccountName" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
@ -1,51 +0,0 @@
|
|||||||
{{- if .Values.startupapicheck.enabled }}
|
|
||||||
{{- if .Values.global.podSecurityPolicy.enabled }}
|
|
||||||
apiVersion: policy/v1beta1
|
|
||||||
kind: PodSecurityPolicy
|
|
||||||
metadata:
|
|
||||||
name: {{ template "startupapicheck.fullname" . }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "startupapicheck.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "startupapicheck.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "startupapicheck"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
annotations:
|
|
||||||
seccomp.security.alpha.kubernetes.io/allowedProfileNames: 'docker/default'
|
|
||||||
seccomp.security.alpha.kubernetes.io/defaultProfileName: 'docker/default'
|
|
||||||
{{- if .Values.global.podSecurityPolicy.useAppArmor }}
|
|
||||||
apparmor.security.beta.kubernetes.io/allowedProfileNames: 'runtime/default'
|
|
||||||
apparmor.security.beta.kubernetes.io/defaultProfileName: 'runtime/default'
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.startupapicheck.rbac.annotations }}
|
|
||||||
{{- toYaml . | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
spec:
|
|
||||||
privileged: false
|
|
||||||
allowPrivilegeEscalation: false
|
|
||||||
allowedCapabilities: [] # default set of capabilities are implicitly allowed
|
|
||||||
volumes:
|
|
||||||
- 'projected'
|
|
||||||
- 'secret'
|
|
||||||
hostNetwork: false
|
|
||||||
hostIPC: false
|
|
||||||
hostPID: false
|
|
||||||
runAsUser:
|
|
||||||
rule: 'MustRunAs'
|
|
||||||
ranges:
|
|
||||||
- min: 1000
|
|
||||||
max: 1000
|
|
||||||
seLinux:
|
|
||||||
rule: 'RunAsAny'
|
|
||||||
supplementalGroups:
|
|
||||||
rule: 'MustRunAs'
|
|
||||||
ranges:
|
|
||||||
- min: 1000
|
|
||||||
max: 1000
|
|
||||||
fsGroup:
|
|
||||||
rule: 'MustRunAs'
|
|
||||||
ranges:
|
|
||||||
- min: 1000
|
|
||||||
max: 1000
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
@ -1,48 +0,0 @@
|
|||||||
{{- if .Values.startupapicheck.enabled }}
|
|
||||||
{{- if .Values.global.rbac.create }}
|
|
||||||
# create certificate role
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: Role
|
|
||||||
metadata:
|
|
||||||
name: {{ template "startupapicheck.fullname" . }}:create-cert
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "startupapicheck.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "startupapicheck.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "startupapicheck"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
{{- with .Values.startupapicheck.rbac.annotations }}
|
|
||||||
annotations:
|
|
||||||
{{- toYaml . | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
rules:
|
|
||||||
- apiGroups: ["cert-manager.io"]
|
|
||||||
resources: ["certificaterequests"]
|
|
||||||
verbs: ["create"]
|
|
||||||
---
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: RoleBinding
|
|
||||||
metadata:
|
|
||||||
name: {{ include "startupapicheck.fullname" . }}:create-cert
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "startupapicheck.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "startupapicheck.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "startupapicheck"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
{{- with .Values.startupapicheck.rbac.annotations }}
|
|
||||||
annotations:
|
|
||||||
{{- toYaml . | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
roleRef:
|
|
||||||
apiGroup: rbac.authorization.k8s.io
|
|
||||||
kind: Role
|
|
||||||
name: {{ template "startupapicheck.fullname" . }}:create-cert
|
|
||||||
subjects:
|
|
||||||
- kind: ServiceAccount
|
|
||||||
name: {{ template "startupapicheck.serviceAccountName" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
@ -1,27 +0,0 @@
|
|||||||
{{- if .Values.startupapicheck.enabled }}
|
|
||||||
{{- if .Values.startupapicheck.serviceAccount.create }}
|
|
||||||
apiVersion: v1
|
|
||||||
kind: ServiceAccount
|
|
||||||
automountServiceAccountToken: {{ .Values.startupapicheck.serviceAccount.automountServiceAccountToken }}
|
|
||||||
metadata:
|
|
||||||
name: {{ template "startupapicheck.serviceAccountName" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
{{- with .Values.startupapicheck.serviceAccount.annotations }}
|
|
||||||
annotations:
|
|
||||||
{{- toYaml . | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "startupapicheck.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "startupapicheck.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "startupapicheck"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
{{- with .Values.startupapicheck.serviceAccount.labels }}
|
|
||||||
{{ toYaml . | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.global.imagePullSecrets }}
|
|
||||||
imagePullSecrets:
|
|
||||||
{{- toYaml . | nindent 2 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
@ -1,19 +0,0 @@
|
|||||||
{{- if .Values.webhook.config -}}
|
|
||||||
{{- $config := .Values.webhook.config -}}
|
|
||||||
{{- $_ := set $config "apiVersion" (default "webhook.config.cert-manager.io/v1alpha1" $config.apiVersion) -}}
|
|
||||||
{{- $_ := set $config "kind" (default "WebhookConfiguration" $config.kind) -}}
|
|
||||||
apiVersion: v1
|
|
||||||
kind: ConfigMap
|
|
||||||
metadata:
|
|
||||||
name: {{ include "webhook.fullname" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "webhook"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
data:
|
|
||||||
config.yaml: |
|
|
||||||
{{- $config | toYaml | nindent 4 }}
|
|
||||||
{{- end -}}
|
|
||||||
@ -1,225 +0,0 @@
|
|||||||
apiVersion: apps/v1
|
|
||||||
kind: Deployment
|
|
||||||
metadata:
|
|
||||||
name: {{ include "webhook.fullname" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "webhook"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
{{- with .Values.webhook.deploymentAnnotations }}
|
|
||||||
annotations:
|
|
||||||
{{- toYaml . | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
spec:
|
|
||||||
replicas: {{ .Values.webhook.replicaCount }}
|
|
||||||
{{- /* The if statement below is equivalent to {{- if $value }} but will also return true for 0. */ -}}
|
|
||||||
{{- if not (has (quote .Values.global.revisionHistoryLimit) (list "" (quote ""))) }}
|
|
||||||
revisionHistoryLimit: {{ .Values.global.revisionHistoryLimit }}
|
|
||||||
{{- end }}
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app.kubernetes.io/name: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "webhook"
|
|
||||||
{{- with .Values.webhook.strategy }}
|
|
||||||
strategy:
|
|
||||||
{{- toYaml . | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "webhook"
|
|
||||||
{{- include "labels" . | nindent 8 }}
|
|
||||||
{{- with .Values.webhook.podLabels }}
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.webhook.podAnnotations }}
|
|
||||||
annotations:
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if and .Values.prometheus.enabled (not (or .Values.prometheus.servicemonitor.enabled .Values.prometheus.podmonitor.enabled)) }}
|
|
||||||
{{- if not .Values.webhook.podAnnotations }}
|
|
||||||
annotations:
|
|
||||||
{{- end }}
|
|
||||||
prometheus.io/path: "/metrics"
|
|
||||||
prometheus.io/scrape: 'true'
|
|
||||||
prometheus.io/port: '9402'
|
|
||||||
{{- end }}
|
|
||||||
spec:
|
|
||||||
{{- if not .Values.webhook.serviceAccount.create }}
|
|
||||||
{{- with .Values.global.imagePullSecrets }}
|
|
||||||
imagePullSecrets:
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
serviceAccountName: {{ template "webhook.serviceAccountName" . }}
|
|
||||||
{{- if hasKey .Values.webhook "automountServiceAccountToken" }}
|
|
||||||
automountServiceAccountToken: {{ .Values.webhook.automountServiceAccountToken }}
|
|
||||||
{{- end }}
|
|
||||||
enableServiceLinks: {{ .Values.webhook.enableServiceLinks }}
|
|
||||||
{{- with .Values.global.priorityClassName }}
|
|
||||||
priorityClassName: {{ . | quote }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if (hasKey .Values.global "hostUsers") }}
|
|
||||||
hostUsers: {{ .Values.global.hostUsers }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.webhook.securityContext }}
|
|
||||||
securityContext:
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if .Values.webhook.hostNetwork }}
|
|
||||||
hostNetwork: true
|
|
||||||
{{- end }}
|
|
||||||
{{- if .Values.webhook.hostNetwork }}
|
|
||||||
dnsPolicy: ClusterFirstWithHostNet
|
|
||||||
{{- end }}
|
|
||||||
containers:
|
|
||||||
- name: {{ .Chart.Name }}-webhook
|
|
||||||
image: "{{ template "image" (tuple .Values.webhook.image .Values.imageRegistry .Values.imageNamespace (printf ":%s" .Chart.AppVersion)) }}"
|
|
||||||
imagePullPolicy: {{ .Values.webhook.image.pullPolicy }}
|
|
||||||
args:
|
|
||||||
{{- /* The if statement below is equivalent to {{- if $value }} but will also return true for 0. */ -}}
|
|
||||||
{{- if not (has (quote .Values.global.logLevel) (list "" (quote ""))) }}
|
|
||||||
- --v={{ .Values.global.logLevel }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if .Values.webhook.config }}
|
|
||||||
- --config=/var/cert-manager/config/config.yaml
|
|
||||||
{{- end }}
|
|
||||||
{{- $config := default .Values.webhook.config "" }}
|
|
||||||
{{ if not $config.securePort -}}
|
|
||||||
- --secure-port={{ .Values.webhook.securePort }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if .Values.webhook.featureGates }}
|
|
||||||
- --feature-gates={{ .Values.webhook.featureGates }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if .Values.webhook.enableClientVerification }}
|
|
||||||
- --enable-client-verification={{ .Values.webhook.enableClientVerification }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if .Values.webhook.clientCAFile }}
|
|
||||||
- --client-ca-path={{ .Values.webhook.clientCAFile }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if .Values.webhook.apiserverClientCertSubjects }}
|
|
||||||
- --client-subject-names={{ .Values.webhook.apiserverClientCertSubjects }}
|
|
||||||
{{- end }}
|
|
||||||
{{- $tlsConfig := default $config.tlsConfig "" }}
|
|
||||||
{{ if or (not $config.tlsConfig) (and (not $tlsConfig.dynamic) (not $tlsConfig.filesystem) ) -}}
|
|
||||||
- --dynamic-serving-ca-secret-namespace=$(POD_NAMESPACE)
|
|
||||||
- --dynamic-serving-ca-secret-name={{ template "webhook.fullname" . }}-ca
|
|
||||||
- --dynamic-serving-dns-names={{ template "webhook.fullname" . }}
|
|
||||||
- --dynamic-serving-dns-names={{ template "webhook.fullname" . }}.$(POD_NAMESPACE)
|
|
||||||
- --dynamic-serving-dns-names={{ template "webhook.fullname" . }}.$(POD_NAMESPACE).svc
|
|
||||||
{{- if .Values.webhook.url.host }}
|
|
||||||
- --dynamic-serving-dns-names={{ .Values.webhook.url.host }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.webhook.extraArgs }}
|
|
||||||
{{- toYaml . | nindent 10 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if not .Values.prometheus.enabled }}
|
|
||||||
- --metrics-listen-address=0
|
|
||||||
{{- end }}
|
|
||||||
ports:
|
|
||||||
- name: https
|
|
||||||
protocol: TCP
|
|
||||||
{{- if $config.securePort }}
|
|
||||||
containerPort: {{ $config.securePort }}
|
|
||||||
{{- else if .Values.webhook.securePort }}
|
|
||||||
containerPort: {{ .Values.webhook.securePort }}
|
|
||||||
{{- else }}
|
|
||||||
containerPort: 6443
|
|
||||||
{{- end }}
|
|
||||||
- name: healthcheck
|
|
||||||
protocol: TCP
|
|
||||||
{{- if $config.healthzPort }}
|
|
||||||
containerPort: {{ $config.healthzPort }}
|
|
||||||
{{- else }}
|
|
||||||
containerPort: 6080
|
|
||||||
{{- end }}
|
|
||||||
{{- if .Values.prometheus.enabled }}
|
|
||||||
- containerPort: 9402
|
|
||||||
name: http-metrics
|
|
||||||
protocol: TCP
|
|
||||||
{{- end }}
|
|
||||||
livenessProbe:
|
|
||||||
httpGet:
|
|
||||||
path: /livez
|
|
||||||
port: healthcheck
|
|
||||||
scheme: HTTP
|
|
||||||
initialDelaySeconds: {{ .Values.webhook.livenessProbe.initialDelaySeconds }}
|
|
||||||
periodSeconds: {{ .Values.webhook.livenessProbe.periodSeconds }}
|
|
||||||
timeoutSeconds: {{ .Values.webhook.livenessProbe.timeoutSeconds }}
|
|
||||||
successThreshold: {{ .Values.webhook.livenessProbe.successThreshold }}
|
|
||||||
failureThreshold: {{ .Values.webhook.livenessProbe.failureThreshold }}
|
|
||||||
readinessProbe:
|
|
||||||
httpGet:
|
|
||||||
path: /healthz
|
|
||||||
port: healthcheck
|
|
||||||
scheme: HTTP
|
|
||||||
initialDelaySeconds: {{ .Values.webhook.readinessProbe.initialDelaySeconds }}
|
|
||||||
periodSeconds: {{ .Values.webhook.readinessProbe.periodSeconds }}
|
|
||||||
timeoutSeconds: {{ .Values.webhook.readinessProbe.timeoutSeconds }}
|
|
||||||
successThreshold: {{ .Values.webhook.readinessProbe.successThreshold }}
|
|
||||||
failureThreshold: {{ .Values.webhook.readinessProbe.failureThreshold }}
|
|
||||||
{{- with .Values.webhook.containerSecurityContext }}
|
|
||||||
securityContext:
|
|
||||||
{{- toYaml . | nindent 12 }}
|
|
||||||
{{- end }}
|
|
||||||
env:
|
|
||||||
- name: POD_NAMESPACE
|
|
||||||
valueFrom:
|
|
||||||
fieldRef:
|
|
||||||
fieldPath: metadata.namespace
|
|
||||||
{{- with .Values.webhook.extraEnv }}
|
|
||||||
{{- toYaml . | nindent 10 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.webhook.resources }}
|
|
||||||
resources:
|
|
||||||
{{- toYaml . | nindent 12 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if or .Values.webhook.config .Values.webhook.volumeMounts }}
|
|
||||||
volumeMounts:
|
|
||||||
{{- if .Values.webhook.config }}
|
|
||||||
- name: config
|
|
||||||
mountPath: /var/cert-manager/config
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.webhook.volumeMounts }}
|
|
||||||
{{- toYaml . | nindent 10 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
{{- $nodeSelector := .Values.global.nodeSelector | default dict }}
|
|
||||||
{{- $nodeSelector = merge $nodeSelector (.Values.webhook.nodeSelector | default dict) }}
|
|
||||||
{{- with $nodeSelector }}
|
|
||||||
nodeSelector:
|
|
||||||
{{- range $key, $value := . }}
|
|
||||||
{{ $key }}: {{ $value | quote }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.webhook.affinity }}
|
|
||||||
affinity:
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.webhook.tolerations }}
|
|
||||||
tolerations:
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.webhook.topologySpreadConstraints }}
|
|
||||||
topologySpreadConstraints:
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if or .Values.webhook.config .Values.webhook.volumes }}
|
|
||||||
volumes:
|
|
||||||
{{- if .Values.webhook.config }}
|
|
||||||
- name: config
|
|
||||||
configMap:
|
|
||||||
name: {{ include "webhook.fullname" . }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.webhook.volumes }}
|
|
||||||
{{- toYaml . | nindent 6 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
@ -1,48 +0,0 @@
|
|||||||
apiVersion: admissionregistration.k8s.io/v1
|
|
||||||
kind: MutatingWebhookConfiguration
|
|
||||||
metadata:
|
|
||||||
name: {{ include "webhook.fullname" . }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "webhook"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
annotations:
|
|
||||||
cert-manager.io/inject-ca-from-secret: {{ printf "%s/%s-ca" (include "cert-manager.namespace" .) (include "webhook.fullname" .) | quote }}
|
|
||||||
{{- with .Values.webhook.mutatingWebhookConfigurationAnnotations }}
|
|
||||||
{{- toYaml . | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
webhooks:
|
|
||||||
- name: webhook.cert-manager.io
|
|
||||||
{{- with .Values.webhook.mutatingWebhookConfiguration.namespaceSelector }}
|
|
||||||
namespaceSelector:
|
|
||||||
{{- toYaml . | nindent 6 }}
|
|
||||||
{{- end }}
|
|
||||||
rules:
|
|
||||||
- apiGroups:
|
|
||||||
- "cert-manager.io"
|
|
||||||
apiVersions:
|
|
||||||
- "v1"
|
|
||||||
operations:
|
|
||||||
- CREATE
|
|
||||||
resources:
|
|
||||||
- "certificaterequests"
|
|
||||||
admissionReviewVersions: ["v1"]
|
|
||||||
# This webhook only accepts v1 cert-manager resources.
|
|
||||||
# Equivalent matchPolicy ensures that non-v1 resource requests are sent to
|
|
||||||
# this webhook (after the resources have been converted to v1).
|
|
||||||
matchPolicy: Equivalent
|
|
||||||
timeoutSeconds: {{ .Values.webhook.timeoutSeconds }}
|
|
||||||
failurePolicy: Fail
|
|
||||||
# Only include 'sideEffects' field in Kubernetes 1.12+
|
|
||||||
sideEffects: None
|
|
||||||
clientConfig:
|
|
||||||
{{- if .Values.webhook.url.host }}
|
|
||||||
url: https://{{ .Values.webhook.url.host }}/mutate
|
|
||||||
{{- else }}
|
|
||||||
service:
|
|
||||||
name: {{ template "webhook.fullname" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
path: /mutate
|
|
||||||
{{- end }}
|
|
||||||
@ -1,32 +0,0 @@
|
|||||||
{{- if .Values.webhook.podDisruptionBudget.enabled }}
|
|
||||||
apiVersion: policy/v1
|
|
||||||
kind: PodDisruptionBudget
|
|
||||||
metadata:
|
|
||||||
name: {{ include "webhook.fullname" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "webhook"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
spec:
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app.kubernetes.io/name: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "webhook"
|
|
||||||
|
|
||||||
{{- if not (or (hasKey .Values.webhook.podDisruptionBudget "minAvailable") (hasKey .Values.webhook.podDisruptionBudget "maxUnavailable")) }}
|
|
||||||
minAvailable: 1 # Default value because minAvailable and maxUnavailable are not set
|
|
||||||
{{- end }}
|
|
||||||
{{- if hasKey .Values.webhook.podDisruptionBudget "minAvailable" }}
|
|
||||||
minAvailable: {{ .Values.webhook.podDisruptionBudget.minAvailable }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if hasKey .Values.webhook.podDisruptionBudget "maxUnavailable" }}
|
|
||||||
maxUnavailable: {{ .Values.webhook.podDisruptionBudget.maxUnavailable }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.webhook.podDisruptionBudget.unhealthyPodEvictionPolicy }}
|
|
||||||
unhealthyPodEvictionPolicy: {{ . }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
@ -1,18 +0,0 @@
|
|||||||
{{- if .Values.global.podSecurityPolicy.enabled }}
|
|
||||||
kind: ClusterRole
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
metadata:
|
|
||||||
name: {{ template "webhook.fullname" . }}-psp
|
|
||||||
labels:
|
|
||||||
app: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "webhook"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
rules:
|
|
||||||
- apiGroups: ['policy']
|
|
||||||
resources: ['podsecuritypolicies']
|
|
||||||
verbs: ['use']
|
|
||||||
resourceNames:
|
|
||||||
- {{ template "webhook.fullname" . }}
|
|
||||||
{{- end }}
|
|
||||||
@ -1,20 +0,0 @@
|
|||||||
{{- if .Values.global.podSecurityPolicy.enabled }}
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: ClusterRoleBinding
|
|
||||||
metadata:
|
|
||||||
name: {{ template "webhook.fullname" . }}-psp
|
|
||||||
labels:
|
|
||||||
app: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "webhook"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
roleRef:
|
|
||||||
apiGroup: rbac.authorization.k8s.io
|
|
||||||
kind: ClusterRole
|
|
||||||
name: {{ template "webhook.fullname" . }}-psp
|
|
||||||
subjects:
|
|
||||||
- kind: ServiceAccount
|
|
||||||
name: {{ template "webhook.serviceAccountName" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
{{- end }}
|
|
||||||
@ -1,54 +0,0 @@
|
|||||||
{{- if .Values.global.podSecurityPolicy.enabled }}
|
|
||||||
apiVersion: policy/v1beta1
|
|
||||||
kind: PodSecurityPolicy
|
|
||||||
metadata:
|
|
||||||
name: {{ template "webhook.fullname" . }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "webhook"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
annotations:
|
|
||||||
seccomp.security.alpha.kubernetes.io/allowedProfileNames: 'docker/default'
|
|
||||||
seccomp.security.alpha.kubernetes.io/defaultProfileName: 'docker/default'
|
|
||||||
{{- if .Values.global.podSecurityPolicy.useAppArmor }}
|
|
||||||
apparmor.security.beta.kubernetes.io/allowedProfileNames: 'runtime/default'
|
|
||||||
apparmor.security.beta.kubernetes.io/defaultProfileName: 'runtime/default'
|
|
||||||
{{- end }}
|
|
||||||
spec:
|
|
||||||
privileged: false
|
|
||||||
allowPrivilegeEscalation: false
|
|
||||||
allowedCapabilities: [] # default set of capabilities are implicitly allowed
|
|
||||||
volumes:
|
|
||||||
- 'configMap'
|
|
||||||
- 'emptyDir'
|
|
||||||
- 'projected'
|
|
||||||
- 'secret'
|
|
||||||
- 'downwardAPI'
|
|
||||||
hostNetwork: {{ .Values.webhook.hostNetwork }}
|
|
||||||
{{- if .Values.webhook.hostNetwork }}
|
|
||||||
hostPorts:
|
|
||||||
- max: {{ .Values.webhook.securePort }}
|
|
||||||
min: {{ .Values.webhook.securePort }}
|
|
||||||
{{- end }}
|
|
||||||
hostIPC: false
|
|
||||||
hostPID: false
|
|
||||||
runAsUser:
|
|
||||||
rule: 'MustRunAs'
|
|
||||||
ranges:
|
|
||||||
- min: 1000
|
|
||||||
max: 1000
|
|
||||||
seLinux:
|
|
||||||
rule: 'RunAsAny'
|
|
||||||
supplementalGroups:
|
|
||||||
rule: 'MustRunAs'
|
|
||||||
ranges:
|
|
||||||
- min: 1000
|
|
||||||
max: 1000
|
|
||||||
fsGroup:
|
|
||||||
rule: 'MustRunAs'
|
|
||||||
ranges:
|
|
||||||
- min: 1000
|
|
||||||
max: 1000
|
|
||||||
{{- end }}
|
|
||||||
@ -1,90 +0,0 @@
|
|||||||
{{- if .Values.global.rbac.create }}
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: Role
|
|
||||||
metadata:
|
|
||||||
name: {{ template "webhook.fullname" . }}:dynamic-serving
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "webhook"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
rules:
|
|
||||||
- apiGroups: [""]
|
|
||||||
resources: ["secrets"]
|
|
||||||
resourceNames:
|
|
||||||
- '{{ template "webhook.fullname" . }}-ca'
|
|
||||||
{{- $certmanagerNamespace := include "cert-manager.namespace" . }}
|
|
||||||
{{- with (.Values.webhook.config.metricsTLSConfig).dynamic }}
|
|
||||||
{{- if $certmanagerNamespace | eq .secretNamespace }}
|
|
||||||
# Allow webhook to read and update the metrics CA Secret when dynamic TLS is
|
|
||||||
# enabled for the metrics server and if the Secret is configured to be in the
|
|
||||||
# same namespace as cert-manager.
|
|
||||||
- {{ .secretName | quote }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
verbs: ["get", "list", "watch", "update"]
|
|
||||||
# It's not possible to grant CREATE permission on a single resourceName.
|
|
||||||
- apiGroups: [""]
|
|
||||||
resources: ["secrets"]
|
|
||||||
verbs: ["create"]
|
|
||||||
---
|
|
||||||
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: RoleBinding
|
|
||||||
metadata:
|
|
||||||
name: {{ template "webhook.fullname" . }}:dynamic-serving
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "webhook"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
roleRef:
|
|
||||||
apiGroup: rbac.authorization.k8s.io
|
|
||||||
kind: Role
|
|
||||||
name: {{ template "webhook.fullname" . }}:dynamic-serving
|
|
||||||
subjects:
|
|
||||||
- kind: ServiceAccount
|
|
||||||
name: {{ template "webhook.serviceAccountName" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: ClusterRole
|
|
||||||
metadata:
|
|
||||||
name: {{ template "webhook.fullname" . }}:subjectaccessreviews
|
|
||||||
labels:
|
|
||||||
app: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "webhook"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
rules:
|
|
||||||
- apiGroups: ["authorization.k8s.io"]
|
|
||||||
resources: ["subjectaccessreviews"]
|
|
||||||
verbs: ["create"]
|
|
||||||
---
|
|
||||||
|
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: ClusterRoleBinding
|
|
||||||
metadata:
|
|
||||||
name: {{ template "webhook.fullname" . }}:subjectaccessreviews
|
|
||||||
labels:
|
|
||||||
app: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "webhook"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
roleRef:
|
|
||||||
apiGroup: rbac.authorization.k8s.io
|
|
||||||
kind: ClusterRole
|
|
||||||
name: {{ template "webhook.fullname" . }}:subjectaccessreviews
|
|
||||||
subjects:
|
|
||||||
- kind: ServiceAccount
|
|
||||||
name: {{ template "webhook.serviceAccountName" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
{{- end }}
|
|
||||||
@ -1,44 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
name: {{ template "webhook.fullname" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
{{- with .Values.webhook.serviceAnnotations }}
|
|
||||||
annotations:
|
|
||||||
{{ toYaml . | indent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "webhook"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
{{- with .Values.webhook.serviceLabels }}
|
|
||||||
{{- toYaml . | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
spec:
|
|
||||||
type: {{ .Values.webhook.serviceType }}
|
|
||||||
{{- if .Values.webhook.serviceIPFamilyPolicy }}
|
|
||||||
ipFamilyPolicy: {{ .Values.webhook.serviceIPFamilyPolicy }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if .Values.webhook.serviceIPFamilies }}
|
|
||||||
ipFamilies: {{ .Values.webhook.serviceIPFamilies | toYaml | nindent 2 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.webhook.loadBalancerIP }}
|
|
||||||
loadBalancerIP: {{ . }}
|
|
||||||
{{- end }}
|
|
||||||
ports:
|
|
||||||
- name: https
|
|
||||||
port: 443
|
|
||||||
protocol: TCP
|
|
||||||
targetPort: "https"
|
|
||||||
{{- if and .Values.prometheus.enabled (not .Values.prometheus.podmonitor.enabled) }}
|
|
||||||
- name: metrics
|
|
||||||
port: 9402
|
|
||||||
protocol: TCP
|
|
||||||
targetPort: "http-metrics"
|
|
||||||
{{- end }}
|
|
||||||
selector:
|
|
||||||
app.kubernetes.io/name: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "webhook"
|
|
||||||
@ -1,25 +0,0 @@
|
|||||||
{{- if .Values.webhook.serviceAccount.create }}
|
|
||||||
apiVersion: v1
|
|
||||||
kind: ServiceAccount
|
|
||||||
automountServiceAccountToken: {{ .Values.webhook.serviceAccount.automountServiceAccountToken }}
|
|
||||||
metadata:
|
|
||||||
name: {{ template "webhook.serviceAccountName" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
{{- with .Values.webhook.serviceAccount.annotations }}
|
|
||||||
annotations:
|
|
||||||
{{- toYaml . | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "webhook"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
{{- with .Values.webhook.serviceAccount.labels }}
|
|
||||||
{{ toYaml . | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- with .Values.global.imagePullSecrets }}
|
|
||||||
imagePullSecrets:
|
|
||||||
{{- toYaml . | nindent 2 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
@ -1,49 +0,0 @@
|
|||||||
apiVersion: admissionregistration.k8s.io/v1
|
|
||||||
kind: ValidatingWebhookConfiguration
|
|
||||||
metadata:
|
|
||||||
name: {{ include "webhook.fullname" . }}
|
|
||||||
labels:
|
|
||||||
app: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/name: {{ include "webhook.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
app.kubernetes.io/component: "webhook"
|
|
||||||
{{- include "labels" . | nindent 4 }}
|
|
||||||
annotations:
|
|
||||||
cert-manager.io/inject-ca-from-secret: {{ printf "%s/%s-ca" (include "cert-manager.namespace" .) (include "webhook.fullname" .) | quote}}
|
|
||||||
{{- with .Values.webhook.validatingWebhookConfigurationAnnotations }}
|
|
||||||
{{- toYaml . | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
webhooks:
|
|
||||||
- name: webhook.cert-manager.io
|
|
||||||
{{- with .Values.webhook.validatingWebhookConfiguration.namespaceSelector }}
|
|
||||||
namespaceSelector:
|
|
||||||
{{- toYaml . | nindent 6 }}
|
|
||||||
{{- end }}
|
|
||||||
rules:
|
|
||||||
- apiGroups:
|
|
||||||
- "cert-manager.io"
|
|
||||||
- "acme.cert-manager.io"
|
|
||||||
apiVersions:
|
|
||||||
- "v1"
|
|
||||||
operations:
|
|
||||||
- CREATE
|
|
||||||
- UPDATE
|
|
||||||
resources:
|
|
||||||
- "*/*"
|
|
||||||
admissionReviewVersions: ["v1"]
|
|
||||||
# This webhook only accepts v1 cert-manager resources.
|
|
||||||
# Equivalent matchPolicy ensures that non-v1 resource requests are sent to
|
|
||||||
# this webhook (after the resources have been converted to v1).
|
|
||||||
matchPolicy: Equivalent
|
|
||||||
timeoutSeconds: {{ .Values.webhook.timeoutSeconds }}
|
|
||||||
failurePolicy: Fail
|
|
||||||
sideEffects: None
|
|
||||||
clientConfig:
|
|
||||||
{{- if .Values.webhook.url.host }}
|
|
||||||
url: https://{{ .Values.webhook.url.host }}/validate
|
|
||||||
{{- else }}
|
|
||||||
service:
|
|
||||||
name: {{ template "webhook.fullname" . }}
|
|
||||||
namespace: {{ include "cert-manager.namespace" . }}
|
|
||||||
path: /validate
|
|
||||||
{{- end }}
|
|
||||||
File diff suppressed because it is too large
Load Diff
93
manifests/cert-manager-stack/values.yaml
Normal file
93
manifests/cert-manager-stack/values.yaml
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
# =============================================================================
|
||||||
|
# Production values for cert-manager-stack
|
||||||
|
# This is the ONLY file you need to edit for your cert-manager deployment
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# cert-manager Configuration (Upstream Chart)
|
||||||
|
# These values are passed directly to the cert-manager Helm chart dependency
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
certManager:
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
# Install CRDs as part of the Helm release
|
||||||
|
crds:
|
||||||
|
enabled: true
|
||||||
|
keep: true
|
||||||
|
|
||||||
|
# Disable Prometheus monitoring (enable if needed)
|
||||||
|
prometheus:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
# Global configuration
|
||||||
|
global:
|
||||||
|
leaderElection:
|
||||||
|
namespace: cert-manager
|
||||||
|
|
||||||
|
# Uncomment to configure resource limits
|
||||||
|
# resources:
|
||||||
|
# requests:
|
||||||
|
# cpu: 10m
|
||||||
|
# memory: 32Mi
|
||||||
|
# limits:
|
||||||
|
# cpu: 100m
|
||||||
|
# memory: 128Mi
|
||||||
|
|
||||||
|
# Uncomment to configure node selector
|
||||||
|
# nodeSelector:
|
||||||
|
# kubernetes.io/os: linux
|
||||||
|
|
||||||
|
# Additional cert-manager values can be added here
|
||||||
|
# See: https://artifacthub.io/packages/helm/cert-manager/cert-manager
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Cloudflare DNS Provider Configuration
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
cloudflare:
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
# TODO: Replace with your actual Cloudflare API token
|
||||||
|
# Get from: https://dash.cloudflare.com/profile/api-tokens
|
||||||
|
# Required permissions: Zone:DNS:Edit for all zones
|
||||||
|
apiToken: "cfat_yJtvwaY2oRNw8FI0Xd2F07Ai5fyeIO0n8dF2JYFWd7929bd6"
|
||||||
|
|
||||||
|
# Secret configuration (usually no need to change these)
|
||||||
|
secretName: cloudflare-api-token
|
||||||
|
secretKey: api-token
|
||||||
|
namespace: cert-manager
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# ClusterIssuer Configuration (Let's Encrypt)
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
clusterIssuer:
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
# ClusterIssuer name - referenced in Certificate and Ingress resources
|
||||||
|
name: letsencrypt
|
||||||
|
|
||||||
|
# Email for Let's Encrypt account registration and notifications
|
||||||
|
email: dvirlabs@gmail.com
|
||||||
|
|
||||||
|
# ACME server URL
|
||||||
|
# Production (rate-limited): https://acme-v02.api.letsencrypt.org/directory
|
||||||
|
# Staging (for testing): https://acme-staging-v02.api.letsencrypt.org/directory
|
||||||
|
server: https://acme-v02.api.letsencrypt.org/directory
|
||||||
|
|
||||||
|
# Secret name for storing ACME account private key
|
||||||
|
privateKeySecretRef:
|
||||||
|
name: letsencrypt-account-key
|
||||||
|
|
||||||
|
# DNS-01 solver configuration using Cloudflare
|
||||||
|
dns01:
|
||||||
|
cloudflare:
|
||||||
|
apiTokenSecretRef:
|
||||||
|
name: cloudflare-api-token
|
||||||
|
key: api-token
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Migration Notes
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# To migrate to External Secrets / Vault:
|
||||||
|
# 1. Create ExternalSecret resource in templates/
|
||||||
|
# 2. Set cloudflare.enabled: false
|
||||||
|
# 3. Keep cloudflare.secretName the same for ClusterIssuer reference
|
||||||
Loading…
x
Reference in New Issue
Block a user