Skip to main content

pat--authenticate

Overview​

  • Namespace: pat--authenticate
  • Purpose: Patient Authentication Backend - PRODUCTION
  • Age: ~3 years 60 days (since August 2022)
  • Status: Active - Patient authentication and authorization system
  • Workloads: 3 deployments + 1 CronJob (all active)
  • Environment: PRODUCTION - Critical authentication service

Architecture​

Patient authentication system handling login, registration, and LIS patient synchronization:

  • Main Application: REST API backend (3 replicas) - High Availability
  • Event Consumer: LIS patient data sync (3 replicas) - High Availability
  • Worker: Background job processing (1 deployment)
  • CronJob: Scheduled task (runs every minute)

Auto-Scaling Configuration​

No Auto-Scaling Configured:

  • No HorizontalPodAutoscalers (HPAs)
  • No KEDA scaled objects
  • Fixed replica counts (Main app: 3, Consumer: 3, Worker: 1)

Workload Categories​

Main Application (1 deployment)​

NameReplicasStatusPurpose
pat--authenticate--be--app--prod3/3RunningMain auth API (HA configured)

Event Consumer (1 deployment)​

NameReplicasStatusPurpose
consumer-lis-patient3/3RunningLIS patient sync (HA configured)

Workers (1 deployment)​

NameReplicasStatusPurpose
wrk--default1/1RunningDefault worker queue

Scheduler (1 CronJob)​

NameScheduleStatusPurpose
cron--prod* * * * * (every minute)ActiveScheduled tasks (high frequency)

Services​

NameTypeCluster IPPortsPurpose
pat--authenticate--be--app--prodClusterIP10.8.21.18280Main authentication API (internal)

Access & Management​

View all resources:​

kubectl get all -n pat--authenticate

Check main application:​

# View app pods (3 replicas)
kubectl get pods -n pat--authenticate | grep "app--prod"

# View logs from all replicas
kubectl logs -f deployment/pat--authenticate--be--app--prod -n pat--authenticate

# Check specific replica
kubectl logs -f deployment/pat--authenticate--be--app--prod -n pat--authenticate --all-containers=true

Check LIS consumer:​

# View consumer pods (3 replicas)
kubectl get pods -n pat--authenticate | grep consumer

# View logs from all consumer replicas
kubectl logs -f deployment/pat--authenticate--be--consumer-lis-patient--prod -n pat--authenticate

# Check specific consumer pod
for pod in $(kubectl get pods -n pat--authenticate | grep consumer | awk '{print $1}'); do
echo "=== $pod ==="
kubectl logs $pod -n pat--authenticate --tail=20
done

Check CronJob:​

# View CronJob
kubectl get cronjob -n pat--authenticate

# View recent job runs
kubectl get jobs -n pat--authenticate --sort-by=.status.startTime

# View CronJob pods
kubectl get pods -n pat--authenticate | grep cron

Restart services:​

# Restart main app (all 3 replicas)
kubectl rollout restart deployment/pat--authenticate--be--app--prod -n pat--authenticate

# Restart LIS consumer (all 3 replicas)
kubectl rollout restart deployment/pat--authenticate--be--consumer-lis-patient--prod -n pat--authenticate

# Restart worker
kubectl rollout restart deployment/pat--authenticate--be--wrk--default--prod -n pat--authenticate

Monitoring​

Resource usage:​

kubectl top pods -n pat--authenticate --sort-by=memory
kubectl top pods -n pat--authenticate --sort-by=cpu

Check CronJob executions:​

# Recent jobs
kubectl get jobs -n pat--authenticate --sort-by=.status.startTime | tail -10

# Failed jobs
kubectl get jobs -n pat--authenticate --field-selector status.successful=0

# Job logs
kubectl logs -n pat--authenticate job/<job-name>

Events:​

kubectl get events -n pat--authenticate --sort-by='.lastTimestamp' | head -20

Data Flow​

Patient Auth Request
↓
pat--authenticate--be--app--prod (ClusterIP - internal)
↓
Main Authentication API (3 replicas - HA)
↓
Database (external)
↓
Events Published to Message Queue
↓
LIS Patient Consumer → consumer-lis-patient (3 replicas)
↓
Worker Processes Background Jobs
↓
CronJob → Scheduled Tasks (every minute)
↓
Patient auth updates, session management

Authentication Workflow​

1. Authentication API (High Availability)​

  • 3 replicas for redundancy and load distribution
  • Patient login and registration
  • Session management
  • Token generation and validation
  • Password management
  • Multi-factor authentication
  • OAuth/SSO integration

2. LIS Patient Synchronization (High Availability)​

  • 3 replicas for reliability
  • consumer-lis-patient processes patient sync events from LIS
  • Updates patient authentication records
  • Links patient accounts with lab system
  • Critical for cross-system authentication

3. Background Worker​

  • Async job processing
  • User provisioning tasks
  • Email/notification sending
  • Session cleanup

4. Scheduled Tasks (High Frequency)​

  • CronJob runs every minute (very high frequency)
  • Session expiration checks
  • Token cleanup
  • User sync operations
  • Health checks

Production Considerations​

High Availability​

Excellent Configuration:

  • Main API: 3 replicas for redundancy
  • LIS consumer: 3 replicas for reliability
  • ClusterIP service (internal only)
  • Very mature namespace (~3 years)

x Single Points of Failure:

  • Worker: 1 replica (consider 2 for HA)

x CronJob Frequency:

  • Runs every minute (very high frequency)
  • Monitor for resource impact
  • Review if all runs are necessary

Recommendations​

  1. Auto-Scaling (Optional):

    • Currently fixed at 3 replicas (good baseline)
    • Consider HPA to scale during peak auth times
    • Target: 3-10 replicas based on load
  2. Worker Resilience:

    • Currently 1 replica
    • Consider 2 replicas for HA
    • Critical for async auth operations
  3. CronJob Review:

    • Runs every minute (very frequent)
    • Review if frequency can be reduced
    • Monitor resource usage from cron jobs
    • Consider if some tasks can be event-driven
  4. Monitoring Priorities:

    • API response times (3 replicas handling load)
    • Authentication success/failure rates
    • LIS sync status (3 consumer replicas)
    • CronJob execution success rate
    • Session management performance
  5. Security:

    • ClusterIP service (internal only) - good security
    • Monitor authentication patterns
    • Track failed login attempts
    • Session security audits

Troubleshooting​

Main API issues:​

# Check all 3 API pods
kubectl get pods -n pat--authenticate | grep "app--prod"

# Check logs from all replicas
kubectl logs deployment/pat--authenticate--be--app--prod -n pat--authenticate --all-containers=true --tail=100

# Check specific pod
POD_NAME=$(kubectl get pods -n pat--authenticate | grep "app--prod" | head -1 | awk '{print $1}')
kubectl logs $POD_NAME -n pat--authenticate --tail=100

# Test API endpoint (internal - need port-forward)
kubectl port-forward -n pat--authenticate service/pat--authenticate--be--app--prod 8080:80
# Access http://localhost:8080

LIS sync issues:​

# Check all 3 consumer pods
kubectl get pods -n pat--authenticate | grep consumer

# Check logs from all consumer replicas
kubectl logs deployment/pat--authenticate--be--consumer-lis-patient--prod -n pat--authenticate --all-containers=true --tail=100

# Check each replica separately
for pod in $(kubectl get pods -n pat--authenticate | grep consumer | awk '{print $1}'); do
echo "=== $pod ==="
kubectl logs $pod -n pat--authenticate --tail=50 | grep -i "error\|sync\|lis"
done

# Restart all consumer replicas
kubectl rollout restart deployment/pat--authenticate--be--consumer-lis-patient--prod -n pat--authenticate

Authentication failures:​

# Check API logs for auth errors
kubectl logs deployment/pat--authenticate--be--app--prod -n pat--authenticate --tail=200 | grep -i "auth\|login\|fail\|error"

# Check across all replicas
for pod in $(kubectl get pods -n pat--authenticate | grep "app--prod" | awk '{print $1}'); do
echo "=== $pod ==="
kubectl logs $pod -n pat--authenticate --tail=50 | grep -i "401\|403\|auth.*fail"
done

CronJob issues:​

# Check CronJob status
kubectl get cronjob -n pat--authenticate

# Check recent jobs
kubectl get jobs -n pat--authenticate --sort-by=.status.startTime | tail -20

# Check failed jobs
kubectl get jobs -n pat--authenticate --field-selector status.successful=0

# Check specific job logs
kubectl logs -n pat--authenticate job/<job-name>

# Delete old completed jobs (if too many)
kubectl delete jobs -n pat--authenticate --field-selector status.successful=1

Worker issues:​

# Check worker
kubectl logs -f deployment/pat--authenticate--be--wrk--default--prod -n pat--authenticate

# Check for job processing errors
kubectl logs deployment/pat--authenticate--be--wrk--default--prod -n pat--authenticate --tail=100 | grep -i "error\|fail"

# Restart worker
kubectl rollout restart deployment/pat--authenticate--be--wrk--default--prod -n pat--authenticate

Load distribution issues:​

# Check resource usage across API replicas
kubectl top pods -n pat--authenticate | grep app--prod

# Check resource usage across consumer replicas
kubectl top pods -n pat--authenticate | grep consumer

# Restart all to redistribute load
kubectl rollout restart deployment/pat--authenticate--be--app--prod -n pat--authenticate
kubectl rollout restart deployment/pat--authenticate--be--consumer-lis-patient--prod -n pat--authenticate

Performance Metrics​

Current Scale​

  • Main API: 3 replicas (excellent HA)
  • LIS Consumer: 3 replicas (excellent HA)
  • Worker: 1 replica
  • CronJob: Runs every minute (high frequency)
  • Total Active Pods: ~7 pods + CronJob pods

Stability​

  • Namespace Age: ~3 years (very mature, stable)
  • Recent Updates: 205 days ago (very stable)
  • HA Configuration: 3+3 replicas (excellent)
  • Service Type: ClusterIP (internal only - good security)