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