FEAT(authentik): add authelia sso
- replacing authentik
This commit is contained in:
44
authelia/argocd.yaml
Normal file
44
authelia/argocd.yaml
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: authelia
|
||||||
|
namespace: argocd
|
||||||
|
finalizers:
|
||||||
|
- resources-finalizer.argocd.argoproj.io
|
||||||
|
spec:
|
||||||
|
project: default
|
||||||
|
sources:
|
||||||
|
- repoURL: https://charts.authelia.com
|
||||||
|
chart: authelia
|
||||||
|
targetRevision: 0.9.*
|
||||||
|
helm:
|
||||||
|
valueFiles:
|
||||||
|
- $values/authelia/helm-values.yaml
|
||||||
|
- repoURL: https://github.com/Mayne0213/cluster-infrastructure.git
|
||||||
|
targetRevision: main
|
||||||
|
ref: values
|
||||||
|
- repoURL: https://github.com/Mayne0213/cluster-infrastructure.git
|
||||||
|
targetRevision: main
|
||||||
|
path: authelia
|
||||||
|
destination:
|
||||||
|
server: https://kubernetes.default.svc
|
||||||
|
namespace: authelia
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
selfHeal: true
|
||||||
|
allowEmpty: false
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
- PrunePropagationPolicy=foreground
|
||||||
|
- PruneLast=true
|
||||||
|
retry:
|
||||||
|
limit: 5
|
||||||
|
backoff:
|
||||||
|
duration: 5s
|
||||||
|
factor: 2
|
||||||
|
maxDuration: 3m
|
||||||
|
managedNamespaceMetadata:
|
||||||
|
labels:
|
||||||
|
goldilocks.fairwinds.com/enabled: 'true'
|
||||||
|
revisionHistoryLimit: 10
|
||||||
102
authelia/helm-values.yaml
Normal file
102
authelia/helm-values.yaml
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
# Authelia Helm Values
|
||||||
|
# Chart: https://charts.authelia.com
|
||||||
|
|
||||||
|
# Domain configuration
|
||||||
|
domain: mayne0213.kro.kr
|
||||||
|
|
||||||
|
# Ingress - disabled, using separate ingress.yaml
|
||||||
|
ingress:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
# Pod configuration
|
||||||
|
pod:
|
||||||
|
replicas: 1
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 25m
|
||||||
|
memory: 64Mi
|
||||||
|
limits:
|
||||||
|
memory: 128Mi
|
||||||
|
extraVolumes:
|
||||||
|
- name: users-database
|
||||||
|
configMap:
|
||||||
|
name: authelia-users
|
||||||
|
extraVolumeMounts:
|
||||||
|
- name: users-database
|
||||||
|
mountPath: /config/users_database.yml
|
||||||
|
subPath: users_database.yml
|
||||||
|
readOnly: true
|
||||||
|
|
||||||
|
# ConfigMap configuration
|
||||||
|
configMap:
|
||||||
|
# Authentication backend - file-based users
|
||||||
|
authentication_backend:
|
||||||
|
file:
|
||||||
|
enabled: true
|
||||||
|
path: /config/users_database.yml
|
||||||
|
password:
|
||||||
|
algorithm: argon2
|
||||||
|
argon2:
|
||||||
|
variant: argon2id
|
||||||
|
iterations: 3
|
||||||
|
memory: 65536
|
||||||
|
parallelism: 4
|
||||||
|
key_length: 32
|
||||||
|
salt_length: 16
|
||||||
|
|
||||||
|
# Session configuration
|
||||||
|
session:
|
||||||
|
cookies:
|
||||||
|
- domain: mayne0213.kro.kr
|
||||||
|
authelia_url: https://auth.mayne0213.kro.kr
|
||||||
|
default_redirection_url: https://mayne.kro.kr
|
||||||
|
|
||||||
|
# Storage - local SQLite (lightweight)
|
||||||
|
storage:
|
||||||
|
local:
|
||||||
|
enabled: true
|
||||||
|
path: /data/db.sqlite3
|
||||||
|
|
||||||
|
# Access control rules
|
||||||
|
access_control:
|
||||||
|
default_policy: deny
|
||||||
|
rules:
|
||||||
|
# Bypass for public services
|
||||||
|
- domain:
|
||||||
|
- mayne.kro.kr
|
||||||
|
- "*.jaejadle.kro.kr"
|
||||||
|
- "*.joossameng.kro.kr"
|
||||||
|
- "*.jovies.kro.kr"
|
||||||
|
- "*.minjo0213.kro.kr"
|
||||||
|
- "*.todo0213.kro.kr"
|
||||||
|
policy: bypass
|
||||||
|
# One factor for admin services
|
||||||
|
- domain:
|
||||||
|
- "*.mayne0213.kro.kr"
|
||||||
|
policy: one_factor
|
||||||
|
|
||||||
|
# Notifier - filesystem (no email)
|
||||||
|
notifier:
|
||||||
|
filesystem:
|
||||||
|
enabled: true
|
||||||
|
filename: /data/notification.txt
|
||||||
|
|
||||||
|
# TOTP configuration
|
||||||
|
totp:
|
||||||
|
enabled: true
|
||||||
|
issuer: mayne0213.kro.kr
|
||||||
|
|
||||||
|
# Identity providers (OIDC) - can be enabled later
|
||||||
|
identity_providers:
|
||||||
|
oidc:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
# Secret configuration - use existing secret from Vault
|
||||||
|
secret:
|
||||||
|
existingSecret: authelia-secrets
|
||||||
|
|
||||||
|
# Persistence for SQLite database
|
||||||
|
persistence:
|
||||||
|
enabled: true
|
||||||
|
storageClass: longhorn
|
||||||
|
size: 1Gi
|
||||||
24
authelia/ingress.yaml
Normal file
24
authelia/ingress.yaml
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: authelia-ingress
|
||||||
|
namespace: authelia
|
||||||
|
annotations:
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||||
|
spec:
|
||||||
|
ingressClassName: traefik
|
||||||
|
tls:
|
||||||
|
- hosts:
|
||||||
|
- auth.mayne0213.kro.kr
|
||||||
|
secretName: authelia-tls
|
||||||
|
rules:
|
||||||
|
- host: auth.mayne0213.kro.kr
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: authelia
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
7
authelia/kustomization.yaml
Normal file
7
authelia/kustomization.yaml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
||||||
|
resources:
|
||||||
|
- vault/authelia-secrets.yaml
|
||||||
|
- ingress.yaml
|
||||||
|
- middleware.yaml
|
||||||
|
- users-database.yaml
|
||||||
14
authelia/middleware.yaml
Normal file
14
authelia/middleware.yaml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
apiVersion: traefik.io/v1alpha1
|
||||||
|
kind: Middleware
|
||||||
|
metadata:
|
||||||
|
name: authelia-auth
|
||||||
|
namespace: authelia
|
||||||
|
spec:
|
||||||
|
forwardAuth:
|
||||||
|
address: http://authelia.authelia.svc.cluster.local/api/authz/forward-auth
|
||||||
|
trustForwardHeader: true
|
||||||
|
authResponseHeaders:
|
||||||
|
- Remote-User
|
||||||
|
- Remote-Groups
|
||||||
|
- Remote-Email
|
||||||
|
- Remote-Name
|
||||||
19
authelia/users-database.yaml
Normal file
19
authelia/users-database.yaml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: authelia-users
|
||||||
|
namespace: authelia
|
||||||
|
data:
|
||||||
|
users_database.yml: |
|
||||||
|
# Authelia Users Database
|
||||||
|
# Generate password hash: docker run --rm authelia/authelia:latest authelia crypto hash generate argon2
|
||||||
|
users:
|
||||||
|
admin:
|
||||||
|
disabled: false
|
||||||
|
displayname: "Admin"
|
||||||
|
email: admin@mayne0213.kro.kr
|
||||||
|
# Default password: changeme (CHANGE THIS!)
|
||||||
|
# Generate new hash: docker run --rm authelia/authelia:latest authelia crypto hash generate argon2
|
||||||
|
password: "$argon2id$v=19$m=65536,t=3,p=4$placeholder$placeholder"
|
||||||
|
groups:
|
||||||
|
- admins
|
||||||
26
authelia/vault/authelia-secrets.yaml
Normal file
26
authelia/vault/authelia-secrets.yaml
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
apiVersion: external-secrets.io/v1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: authelia-secrets
|
||||||
|
namespace: authelia
|
||||||
|
spec:
|
||||||
|
refreshInterval: 1h
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault-backend
|
||||||
|
target:
|
||||||
|
name: authelia-secrets
|
||||||
|
creationPolicy: Owner
|
||||||
|
data:
|
||||||
|
- secretKey: JWT_TOKEN
|
||||||
|
remoteRef:
|
||||||
|
key: cluster-infrastructure/authelia
|
||||||
|
property: JWT_SECRET
|
||||||
|
- secretKey: SESSION_ENCRYPTION_KEY
|
||||||
|
remoteRef:
|
||||||
|
key: cluster-infrastructure/authelia
|
||||||
|
property: SESSION_SECRET
|
||||||
|
- secretKey: STORAGE_ENCRYPTION_KEY
|
||||||
|
remoteRef:
|
||||||
|
key: cluster-infrastructure/authelia
|
||||||
|
property: STORAGE_ENCRYPTION_KEY
|
||||||
Reference in New Issue
Block a user