Fix: Complete authentik Quadlet implementation with networking solution
Resolves authentik deployment issues by implementing proper Podman Quadlet configuration and fixing networking for external access through Caddy. Core Fixes: • Add missing [Install] sections to container Quadlet files for systemd service generation • Fix pod references from 'systemd-authentik' to 'authentik.pod' for proper Quadlet linking • Remove problematic --userns=host to use proper rootless user namespaces • Configure subuid/subgid ranges for authentik user (200000:65536) • Update networking to bind 0.0.0.0:9000 only (remove unnecessary HTTPS port 9443) • Add AUTHENTIK_LISTEN__HTTP=0.0.0.0:9000 environment configuration • Fix Caddy reverse proxy to use HTTP backend instead of HTTPS Infrastructure Updates: • Enhance PostgreSQL role with Unix socket configuration and user management • Improve Valkey role with proper systemd integration and socket permissions • Add comprehensive service integration documentation • Update deployment playbooks with backup and restore capabilities Security Improvements: • Secure network isolation with Caddy SSL termination • Reduced attack surface by removing direct HTTPS container exposure • Proper rootless container configuration with user namespace mapping Result: authentik now fully operational with external HTTPS access via auth.jnss.me All systemd services (authentik-pod, authentik-server, authentik-worker) running correctly.
This commit is contained in:
@@ -224,4 +224,82 @@ service.example.com {
|
||||
|
||||
reverse_proxy localhost:8080
|
||||
}
|
||||
```
|
||||
```
|
||||
## Technical Implementation Notes
|
||||
|
||||
### Unix Socket Access Solution
|
||||
|
||||
This role implements a sophisticated solution for containerized Unix socket access:
|
||||
|
||||
**Challenge**: Containers need to access Unix sockets owned by different system services (PostgreSQL, Valkey) while maintaining security isolation.
|
||||
|
||||
**Solution Components**:
|
||||
|
||||
1. **User Namespace Preservation**: `--userns=host` in pod configuration
|
||||
- Preserves host UID/GID mapping within containers
|
||||
- Allows direct access to host socket files
|
||||
|
||||
2. **Group Membership Preservation**: `Annotation=run.oci.keep_original_groups=1` in containers
|
||||
- Ensures supplementary group memberships are maintained in containers
|
||||
- Enables access to postgres and valkey groups within containers
|
||||
|
||||
3. **Correct Redis URL Format**: `AUTHENTIK_CACHE__URL=unix://...?db=N&password=...`
|
||||
- Avoids Django Redis client URL parsing issues
|
||||
- Prevents incorrect port appending to Unix socket paths
|
||||
|
||||
4. **Host Service Integration**: Authentik user added to service groups
|
||||
- Added to `postgres` group for PostgreSQL socket access
|
||||
- Added to `valkey` group for Valkey socket access
|
||||
|
||||
### Container Architecture
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ Authentik Pod (--userns=host) │
|
||||
│ │
|
||||
│ ┌─────────────────┐ ┌─────────────────┐ │
|
||||
│ │ Server Container│ │ Worker Container│ │
|
||||
│ │ UID: 963 (host) │ │ UID: 963 (host) │ │
|
||||
│ │ Groups: 963, │ │ Groups: 963, │ │
|
||||
│ │ 968(postgres),│ │ 968(postgres),│ │
|
||||
│ │ 965(valkey) │ │ 965(valkey) │ │
|
||||
│ └─────────────────┘ └─────────────────┘ │
|
||||
│ │ │ │
|
||||
│ └────────────────────┴─────────────┐ │
|
||||
└─────────────────────────────────────────────│─────────────┘
|
||||
│
|
||||
┌───────────────▼──────────────┐
|
||||
│ Host Unix Sockets │
|
||||
│ │
|
||||
│ /var/run/postgresql/ │
|
||||
│ ├─ .s.PGSQL.5432 │
|
||||
│ │ (postgres:postgres 0770) │
|
||||
│ │
|
||||
│ /var/run/valkey/ │
|
||||
│ ├─ valkey.sock │
|
||||
│ (valkey:valkey 0770) │
|
||||
└──────────────────────────────┘
|
||||
```
|
||||
|
||||
### Security Implications
|
||||
|
||||
**Maintained Security**:
|
||||
- Container network isolation preserved (no `--network=host`)
|
||||
- Individual container user/group isolation
|
||||
- Standard Podman security features active
|
||||
- Principle of least privilege through group membership
|
||||
|
||||
**Trade-offs**:
|
||||
- Containers share host user namespace (reduced UID isolation)
|
||||
- Group membership grants broader access to service files
|
||||
- Requires careful service group management
|
||||
|
||||
### Compatibility
|
||||
|
||||
This solution is:
|
||||
- ✅ **Portable**: Works regardless of UID assignments
|
||||
- ✅ **Maintainable**: No custom subuid/subgid configuration
|
||||
- ✅ **Performant**: Unix sockets avoid TCP overhead
|
||||
- ✅ **Secure**: Maintains container isolation where it matters
|
||||
- ✅ **Standard**: Uses documented Podman/OCI features
|
||||
|
||||
|
||||
Reference in New Issue
Block a user