k3s/retired-services/navidrome/navidrome-oauth2.yaml

121 lines
3 KiB
YAML
Raw Normal View History

2026-06-13 11:05:56 -04:00
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: navidrome-oauth-secrets
namespace: security
spec:
refreshInterval: "1h"
secretStoreRef:
name: vault-external-secrets-store
kind: ClusterSecretStore
target:
name: navidrome-oauth-secrets
creationPolicy: Owner
data:
- secretKey: OAUTH2_PROXY_CLIENT_ID
remoteRef:
key: oauth2-proxy/navidrome
property: client-id
- secretKey: OAUTH2_PROXY_CLIENT_SECRET
remoteRef:
key: oauth2-proxy/navidrome
property: client-secret
- secretKey: OAUTH2_PROXY_COOKIE_SECRET
remoteRef:
key: oauth2-proxy/navidrome
property: cookie-secret
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: oauth2-proxy-navidrome
namespace: security
spec:
replicas: 1
selector:
matchLabels:
app: oauth2-proxy-navidrome
template:
metadata:
labels:
app: oauth2-proxy-navidrome
spec:
containers:
- name: oauth2-proxy
image: quay.io/oauth2-proxy/oauth2-proxy:v7.6.0
envFrom:
- secretRef:
name: navidrome-oauth-secrets
args:
- "--provider=oidc"
- "--user-id-claim=preferred_username"
- "--set-xauthrequest=true"
- "--oidc-issuer-url=https://sso.mynest.love/realms/nest"
- "--oidc-groups-claim=groups"
- "--redirect-url=https://chirp.mynest.love/oauth2/callback"
- "--email-domain=*"
- "--allowed-group=navidrome"
- "--skip-provider-button=true"
- "--cookie-secure=true"
- "--cookie-domain=chirp.mynest.love"
- "--http-address=0.0.0.0:4180"
- "--reverse-proxy=true"
- "--upstream=static://200"
- "--whitelist-domain=chirp.mynest.love"
- "--set-xauthrequest=true"
ports:
- containerPort: 4180
---
apiVersion: v1
kind: Service
metadata:
name: oauth2-proxy-navidrome
namespace: security
spec:
ports:
- port: 4180
targetPort: 4180
selector:
app: oauth2-proxy-navidrome
---
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: auth-navidrome
namespace: security
spec:
forwardAuth:
address: http://oauth2-proxy-navidrome.security.svc.cluster.local:4180
trustForwardHeader: true
authResponseHeaders:
- X-Auth-Request-User
- X-Auth-Request-Email
- X-Auth-Request-Preferred-Username
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: navidrome-auth-ingress
namespace: security
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.tls: "true"
spec:
ingressClassName: traefik
tls:
- hosts:
- chirp.mynest.love
secretName: navidrome-tls
rules:
- host: chirp.mynest.love
http:
paths:
- path: /oauth2
pathType: Prefix
backend:
service:
name: oauth2-proxy-navidrome
port:
number: 4180