diff --git a/kubernetes/home/apps/certs-manager/certs-manager/app/helmrelease.yaml b/kubernetes/home/apps/certs-manager/certs-manager/app/helmrelease.yaml new file mode 100644 index 0000000..3f5b29b --- /dev/null +++ b/kubernetes/home/apps/certs-manager/certs-manager/app/helmrelease.yaml @@ -0,0 +1,37 @@ +--- +# yaml-language-server: $schema=https://kubernetes-schemas.ok8.sh/helm.toolkit.fluxcd.io/helmrelease_v2beta1.json +apiVersion: helm.toolkit.fluxcd.io/v2 +kind: HelmRelease +metadata: + name: cert-manager +spec: + interval: 30m + chart: + spec: + chart: cert-manager + version: v1.16.1 + sourceRef: + kind: HelmRepository + name: cert-manager + namespace: flux-system + install: + remediation: + retries: 3 + upgrade: + cleanupOnFail: true + remediation: + strategy: rollback + retries: 3 + values: + installCRDs: true + dns01RecursiveNameservers: 1.1.1.1:53,9.9.9.9:53 + dns01RecursiveNameserversOnly: true + podDnsPolicy: None + podDnsConfig: + nameservers: + - "1.1.1.1" + - "9.9.9.9" + prometheus: + enabled: true + servicemonitor: + enabled: true diff --git a/kubernetes/home/apps/certs-manager/certs-manager/app/kustomization.yaml b/kubernetes/home/apps/certs-manager/certs-manager/app/kustomization.yaml new file mode 100644 index 0000000..d5b1617 --- /dev/null +++ b/kubernetes/home/apps/certs-manager/certs-manager/app/kustomization.yaml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://json.schemastore.org/kustomization +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - ./repository.yaml + - ./helmrelease.yaml diff --git a/kubernetes/home/apps/certs-manager/certs-manager/app/repository.yaml b/kubernetes/home/apps/certs-manager/certs-manager/app/repository.yaml new file mode 100644 index 0000000..737826a --- /dev/null +++ b/kubernetes/home/apps/certs-manager/certs-manager/app/repository.yaml @@ -0,0 +1,9 @@ +--- +apiVersion: source.toolkit.fluxcd.io/v1 +kind: HelmRepository +metadata: + name: cert-manager + namespace: flux-system +spec: + interval: 1h + url: https://charts.jetstack.io/ diff --git a/kubernetes/home/apps/certs-manager/certs-manager/issuers/issuers.yaml b/kubernetes/home/apps/certs-manager/certs-manager/issuers/issuers.yaml new file mode 100644 index 0000000..02fba3d --- /dev/null +++ b/kubernetes/home/apps/certs-manager/certs-manager/issuers/issuers.yaml @@ -0,0 +1,33 @@ +apiVersion: cert-manager.io/v1 +kind: ClusterIssuer +metadata: + name: letsencrypt-production +spec: + acme: + server: https://acme-v02.api.letsencrypt.org/directory + email: "${CERTIFICATE_EMAIL}" + privateKeySecretRef: + name: letsencrypt-production + solvers: + - dns01: + cloudflare: + apiTokenSecretRef: + name: cloudflare-secret + key: CLOUDFLARE_API_TOKEN +--- +apiVersion: cert-manager.io/v1 +kind: ClusterIssuer +metadata: + name: letsencrypt-staging +spec: + acme: + server: https://acme-staging-v02.api.letsencrypt.org/directory + email: "${CERTIFICATE_EMAIL}" + privateKeySecretRef: + name: letsencrypt-staging + solvers: + - dns01: + cloudflare: + apiTokenSecretRef: + name: cloudflare-secret + key: CLOUDFLARE_API_TOKEN diff --git a/kubernetes/home/apps/certs-manager/certs-manager/ks.yaml b/kubernetes/home/apps/certs-manager/certs-manager/ks.yaml new file mode 100644 index 0000000..2b49b96 --- /dev/null +++ b/kubernetes/home/apps/certs-manager/certs-manager/ks.yaml @@ -0,0 +1,44 @@ +--- +# yaml-language-server: $schema=https://kubernetes-schemas.ok8.sh/kustomize.toolkit.fluxcd.io/kustomization_v1.json +apiVersion: kustomize.toolkit.fluxcd.io/v1 +kind: Kustomization +metadata: + name: &app cert-manager + namespace: flux-system +spec: + targetNamespace: cert-manager + commonMetadata: + labels: + app.kubernetes.io/name: *app + path: ./kubernetes/home/apps/cert-manager/cert-manager/app + prune: true + sourceRef: + kind: GitRepository + name: home-kubernetes + wait: true + interval: 30m + retryInterval: 1m + timeout: 5m +--- +# yaml-language-server: $schema=https://kubernetes-schemas.ok8.sh/kustomize.toolkit.fluxcd.io/kustomization_v1.json +apiVersion: kustomize.toolkit.fluxcd.io/v1 +kind: Kustomization +metadata: + name: &app cert-manager-issuers + namespace: flux-system +spec: + targetNamespace: cert-manager + commonMetadata: + labels: + app.kubernetes.io/name: *app + dependsOn: + - name: cert-manager + - name: external-secrets-stores + path: ./kubernetes/home/apps/cert-manager/cert-manager/issuers + prune: true + sourceRef: + kind: GitRepository + name: home-kubernetes + interval: 30m + retryInterval: 1m + timeout: 5m diff --git a/kubernetes/home/apps/certs-manager/kustomization.yaml b/kubernetes/home/apps/certs-manager/kustomization.yaml new file mode 100644 index 0000000..f173691 --- /dev/null +++ b/kubernetes/home/apps/certs-manager/kustomization.yaml @@ -0,0 +1,9 @@ +--- +# yaml-language-server: $schema=https://json.schemastore.org/kustomization +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + # Pre Flux-Kustomizations + - ./namespace.yaml + # Flux-Kustomizations + - ./cert-manager/ks.yaml diff --git a/kubernetes/home/apps/certs-manager/namespace.yaml b/kubernetes/home/apps/certs-manager/namespace.yaml new file mode 100644 index 0000000..6e34540 --- /dev/null +++ b/kubernetes/home/apps/certs-manager/namespace.yaml @@ -0,0 +1,7 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: cert-manager + annotations: + kustomize.toolkit.fluxcd.io/prune: disabled diff --git a/kubernetes/home/flux/apps.yaml b/kubernetes/home/flux/apps.yaml new file mode 100644 index 0000000..a6aca4e --- /dev/null +++ b/kubernetes/home/flux/apps.yaml @@ -0,0 +1,45 @@ +--- +# yaml-language-server: $schema=https://kubernetes-schemas.ok8.sh/kustomize.toolkit.fluxcd.io/kustomization_v1.json +apiVersion: kustomize.toolkit.fluxcd.io/v1 +kind: Kustomization +metadata: + name: cluster-apps + namespace: flux-system +spec: + interval: 30m + path: ./kubernetes/home/apps/ + prune: false + sourceRef: + kind: GitRepository + name: home-kubernetes + decryption: + provider: sops + secretRef: + name: sops-gpg + postBuild: + substituteFrom: + - kind: ConfigMap + name: cluster-settings + - kind: Secret + name: cluster-secrets + patches: + - patch: |- + apiVersion: kustomize.toolkit.fluxcd.io/v1 + kind: Kustomization + metadata: + name: not-used + spec: + decryption: + provider: sops + secretRef: + name: sops-gpg + postBuild: + substituteFrom: + - kind: ConfigMap + name: cluster-settings + - kind: Secret + name: cluster-secrets + target: + group: kustomize.toolkit.fluxcd.io + kind: Kustomization + labelSelector: substitution.flux.home.arpa/disabled notin (true) diff --git a/kubernetes/home/flux/vars/cluster-settings.yaml b/kubernetes/home/flux/vars/cluster-settings.yaml new file mode 100644 index 0000000..be3754a --- /dev/null +++ b/kubernetes/home/flux/vars/cluster-settings.yaml @@ -0,0 +1,9 @@ +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: cluster-settings + namespace: flux-system +data: + TIMEZONE: "America/Denver" + CLUSTER_NAME: home diff --git a/kubernetes/home/flux/vars/kustomization.yaml b/kubernetes/home/flux/vars/kustomization.yaml new file mode 100644 index 0000000..7df8332 --- /dev/null +++ b/kubernetes/home/flux/vars/kustomization.yaml @@ -0,0 +1,6 @@ +--- +# yaml-language-server: $schema=https://json.schemastore.org/kustomization +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - ./cluster-settings.yaml