Skip to content
Snippets Groups Projects
certmanager.yaml 5.72 KiB
Newer Older
Rob Kooper's avatar
Rob Kooper committed
{{ if .Values.certmanager.enabled }}
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
Rob Kooper's avatar
Rob Kooper committed
  name: {{ .Values.cluster.name }}-cert-manager
Rob Kooper's avatar
Rob Kooper committed
  labels:
    cluster: {{ .Values.cluster.name | quote }}
Rob Kooper's avatar
Rob Kooper committed
    app: cert-manager
Rob Kooper's avatar
Rob Kooper committed
  namespace: {{ .Values.cluster.namespace | default "argocd" | quote }}
  annotations:
    {{- toYaml .Values.notifications | nindent 4 }}
spec:
  project: {{ .Values.cluster.name }}
  destination:
    server: {{ .Values.cluster.url }}
Rob Kooper's avatar
Rob Kooper committed
    namespace: cert-manager
Rob Kooper's avatar
Rob Kooper committed
  syncPolicy:
    {{- if .Values.sync }}
    automated:
      prune: true
      selfHeal: true
      allowEmpty: false
    {{- end }}
    syncOptions:
      - CreateNamespace=true
    managedNamespaceMetadata:
      labels:
        pod-security.kubernetes.io/enforce: privileged
        pod-security.kubernetes.io/audit: privileged
        pod-security.kubernetes.io/warn: privileged
  source:
    repoURL: https://charts.jetstack.io
Rob Kooper's avatar
Rob Kooper committed
    chart: cert-manager
Rob Kooper's avatar
Rob Kooper committed
    targetRevision: {{ .Values.certmanager.version | quote }}
    helm:
      version: v3
Rob Kooper's avatar
Rob Kooper committed
      releaseName: cert-manager
Rob Kooper's avatar
Rob Kooper committed
      values: |
        ingressShim:
          defaultIssuerKind: ClusterIssuer
          defaultIssuerName: letsencrypt-prod
        installCRDs: true
---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
Rob Kooper's avatar
Rob Kooper committed
  name: {{ .Values.cluster.name }}-cert-manager-issuer
Rob Kooper's avatar
Rob Kooper committed
  labels:
    cluster: {{ .Values.cluster.name | quote }}
Rob Kooper's avatar
Rob Kooper committed
    app: cert-manager-issuer
Rob Kooper's avatar
Rob Kooper committed
  namespace: {{ .Values.cluster.namespace | default "argocd" | quote }}
  annotations:
    {{- toYaml .Values.notifications | nindent 4 }}
spec:
  project: {{ .Values.cluster.name }}
  destination:
    server: {{ .Values.cluster.url }}
Rob Kooper's avatar
Rob Kooper committed
    namespace: cert-manager
Rob Kooper's avatar
Rob Kooper committed
  syncPolicy:
    {{- if .Values.sync }}
    automated:
      prune: true
      selfHeal: true
      allowEmpty: false
    {{- end }}
  source:
    repoURL: https://bedag.github.io/helm-charts/
    chart: raw
    targetRevision: {{ .Values.raw.version | quote }}
    helm:
      version: v3
      releaseName: raw
      values: |
        resources:
Rob Kooper's avatar
Rob Kooper committed
          - apiVersion: cert-manager.io/v1
Rob Kooper's avatar
Rob Kooper committed
            kind: ClusterIssuer
            metadata:
              name: letsencrypt-prod
            spec:
              acme:
                server: https://acme-v02.api.letsencrypt.org/directory
                email: {{ .Values.certmanager.email }}
                privateKeySecretRef:
                  name: letsencrypt-prod-account
                solvers:
                - http01:
                    ingress:
                      ingressClassName: {{ .Values.certmanager.class | default .Values.ingresscontroller.class }}
Rob Kooper's avatar
Rob Kooper committed
                      ingressTemplate:
                        metadata:
                          annotations:
                            "traefik.ingress.kubernetes.io/router.priority": "99999"
                            "traefik.ingress.kubernetes.io/frontend-entry-points": "web"
Rob Kooper's avatar
Rob Kooper committed
          - apiVersion: cert-manager.io/v1
Rob Kooper's avatar
Rob Kooper committed
            kind: ClusterIssuer
            metadata:
              name: letsencrypt-staging
            spec:
              acme:
                server: https://acme-staging-v02.api.letsencrypt.org/directory
                email: {{ .Values.certmanager.email }}
                privateKeySecretRef:
                  name: letsencrypt-staging-account
                solvers:
                - http01:
                    ingress:
                      ingressClassName: {{ .Values.certmanager.class | default .Values.ingresscontroller.class }}
Rob Kooper's avatar
Rob Kooper committed
                      ingressTemplate:
                        metadata:
                          annotations:
                            "traefik.ingress.kubernetes.io/router.priority": "99999"
                            "traefik.ingress.kubernetes.io/frontend-entry-points": "web"
Rob Kooper's avatar
Rob Kooper committed
          {{- if eq .Values.ingresscontroller.class "traefik" }}
          - apiVersion: v1
            kind: ServiceAccount
            metadata:
              name: traefik-certmanager
              namespace: traefik
          - apiVersion: rbac.authorization.k8s.io/v1
            kind: ClusterRole
            metadata:
              name: traefik-certmanager
            rules:
            - apiGroups: ["traefik.containo.us"]
              resources: ["ingressroutes"]
              verbs: ["watch"]
            - apiGroups: ["cert-manager.io"]
              resources: ["certificates"]
              verbs: ["get", "create", "delete"]
          - apiVersion: rbac.authorization.k8s.io/v1
            kind: ClusterRoleBinding
            metadata:
              name: traefik-certmanager
            subjects:
            - kind: ServiceAccount
              name: traefik-certmanager
              namespace: traefik
            roleRef:
              kind: ClusterRole
              name: traefik-certmanager
              apiGroup: rbac.authorization.k8s.io
          - apiVersion: apps/v1
            kind: Deployment
            metadata:
              name: traefik-certmanager
              namespace: traefik
            spec:
              replicas: 1
              selector:
                matchLabels:
                  app.kubernetes.io/name: traefik-certmanager
              template:
                metadata:
                  labels:
                    app.kubernetes.io/name: traefik-certmanager
                spec:
                  serviceAccount: traefik-certmanager
                  containers:
                  - name: traefik-certmanager
                    image: kooper/traefik-certmanager
                    imagePullPolicy: Always
                    env:
                    - name: ISSUER_NAME
                      value: letsencrypt-prod
                    - name: ISSUER_KIND
                      value: ClusterIssuer
                    - name: CERT_CLEANUP
                      value: "false"
          {{- end }}
Rob Kooper's avatar
Rob Kooper committed
{{- end }}