Add OIDC to argocd

This commit is contained in:
Ruben Hensen
2026-04-06 18:44:32 +02:00
parent faaf6b6729
commit 0fd7bf1135
7 changed files with 106 additions and 6 deletions
+17
View File
@@ -71,6 +71,11 @@ spec:
secretKeyRef: secretKeyRef:
name: stalwart-oidc-client-secret name: stalwart-oidc-client-secret
key: client_secret key: client_secret
- name: ARGOCD_OIDC_CLIENT_SECRET
valueFrom:
secretKeyRef:
name: argocd-oidc-client-secret
key: client_secret
server: server:
volumes: volumes:
- name: blueprint-vault - name: blueprint-vault
@@ -82,6 +87,9 @@ spec:
- name: blueprint-ldap - name: blueprint-ldap
configMap: configMap:
name: authentik-blueprint-ldap name: authentik-blueprint-ldap
- name: blueprint-argocd
configMap:
name: authentik-blueprint-argocd
volumeMounts: volumeMounts:
- name: blueprint-vault - name: blueprint-vault
mountPath: /blueprints/custom/vault-oidc.yaml mountPath: /blueprints/custom/vault-oidc.yaml
@@ -92,6 +100,9 @@ spec:
- name: blueprint-ldap - name: blueprint-ldap
mountPath: /blueprints/custom/ldap.yaml mountPath: /blueprints/custom/ldap.yaml
subPath: ldap.yaml subPath: ldap.yaml
- name: blueprint-argocd
mountPath: /blueprints/custom/argocd-oidc.yaml
subPath: argocd-oidc.yaml
ingress: ingress:
enabled: true enabled: true
ingressClassName: nginx ingressClassName: nginx
@@ -114,6 +125,9 @@ spec:
- name: blueprint-ldap - name: blueprint-ldap
configMap: configMap:
name: authentik-blueprint-ldap name: authentik-blueprint-ldap
- name: blueprint-argocd
configMap:
name: authentik-blueprint-argocd
volumeMounts: volumeMounts:
- name: blueprint-vault - name: blueprint-vault
mountPath: /blueprints/custom/vault-oidc.yaml mountPath: /blueprints/custom/vault-oidc.yaml
@@ -124,6 +138,9 @@ spec:
- name: blueprint-ldap - name: blueprint-ldap
mountPath: /blueprints/custom/ldap.yaml mountPath: /blueprints/custom/ldap.yaml
subPath: ldap.yaml subPath: ldap.yaml
- name: blueprint-argocd
mountPath: /blueprints/custom/argocd-oidc.yaml
subPath: argocd-oidc.yaml
postgresql: postgresql:
enabled: false enabled: false
redis: redis:
+2 -1
View File
@@ -16,4 +16,5 @@ patches:
kind: ReplicaSet kind: ReplicaSet
name: argocd-notifications-controller name: argocd-notifications-controller
path: overlays/argocd-notifications-controller-patch.yaml path: overlays/argocd-notifications-controller-patch.yaml
- path: overlays/argocd-cm.patch.yaml - path: overlays/argocd-cm.patch.yaml
- path: overlays/argocd-rbac-cm.patch.yaml
+10 -1
View File
@@ -6,7 +6,16 @@ metadata:
app.kubernetes.io/name: argocd-cm app.kubernetes.io/name: argocd-cm
app.kubernetes.io/part-of: argocd app.kubernetes.io/part-of: argocd
data: data:
# kustomize.buildOptions: "--enable-helm" url: https://argocd.rubenhensen.nl
oidc.config: |
name: Authentik
issuer: https://authentik.rubenhensen.nl/application/o/argocd/
clientID: argocd
clientSecret: $oidc.authentik.clientSecret
requestedScopes:
- openid
- profile
- email
resource.exclusions: | resource.exclusions: |
- apiGroups: - apiGroups:
- "velero.io" - "velero.io"
+11
View File
@@ -0,0 +1,11 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-rbac-cm
labels:
app.kubernetes.io/name: argocd-rbac-cm
app.kubernetes.io/part-of: argocd
data:
policy.csv: |
g, ik@rubenhensen.nl, role:admin
scopes: "[email]"
+8 -4
View File
@@ -10,12 +10,16 @@ spec:
kind: ClusterSecretStore kind: ClusterSecretStore
target: target:
template: template:
type: kubernetes.io/dockerconfigjson
data: data:
webhook.github.secret: "{{ .mysecret | toString }}" webhook.github.secret: "{{ .webhook_secret | toString }}"
oidc.authentik.clientSecret: "{{ .oidc_client_secret | toString }}"
name: argocd-secret name: argocd-secret
creationPolicy: Owner creationPolicy: Merge
data: data:
- secretKey: mysecret - secretKey: webhook_secret
remoteRef: remoteRef:
key: github_secret key: github_secret
- secretKey: oidc_client_secret
remoteRef:
key: kv/argocd-oidc
property: client_secret
+40
View File
@@ -0,0 +1,40 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: authentik-blueprint-argocd
data:
argocd-oidc.yaml: |
version: 1
metadata:
name: ArgoCD OIDC
entries:
- model: authentik_providers_oauth2.oauth2provider
id: argocd-provider
state: present
identifiers:
name: ArgoCD
attrs:
name: ArgoCD
authorization_flow: !Find [authentik_flows.flow, [slug, default-provider-authorization-implicit-consent]]
authentication_flow: !Find [authentik_flows.flow, [slug, default-authentication-flow]]
invalidation_flow: !Find [authentik_flows.flow, [slug, default-provider-invalidation-flow]]
client_type: confidential
client_id: argocd
client_secret: !Env [ARGOCD_OIDC_CLIENT_SECRET, ""]
redirect_uris:
- matching_mode: strict
url: https://argocd.rubenhensen.nl/auth/callback
signing_key: !Find [authentik_crypto.certificatekeypair, [name, "authentik Self-signed Certificate"]]
property_mappings:
- !Find [authentik_providers_oauth2.scopemapping, [managed, goauthentik.io/providers/oauth2/scope-openid]]
- !Find [authentik_providers_oauth2.scopemapping, [managed, goauthentik.io/providers/oauth2/scope-email]]
- !Find [authentik_providers_oauth2.scopemapping, [managed, goauthentik.io/providers/oauth2/scope-profile]]
- model: authentik_core.application
id: argocd-app
state: present
identifiers:
slug: argocd
attrs:
name: ArgoCD
provider: !KeyOf argocd-provider
meta_launch_url: https://argocd.rubenhensen.nl
+18
View File
@@ -81,3 +81,21 @@ spec:
remoteRef: remoteRef:
key: kv/stalwart-oidc key: kv/stalwart-oidc
property: client_secret property: client_secret
---
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: argocd-oidc-client-secret
spec:
secretStoreRef:
name: vault-backend
kind: ClusterSecretStore
refreshInterval: 15m
target:
name: argocd-oidc-client-secret
creationPolicy: Owner
data:
- secretKey: client_secret
remoteRef:
key: kv/argocd-oidc
property: client_secret