Add new infra architecture 2
This commit is contained in:
20
infrastructure/platform/mail/mailu/base/kustomization.yaml
Normal file
20
infrastructure/platform/mail/mailu/base/kustomization.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
namespace: bakery-ia
|
||||
|
||||
resources:
|
||||
- mailu-configmap.yaml
|
||||
- mailu-secrets.yaml
|
||||
- mailu-pvc.yaml
|
||||
- mailu-deployment.yaml
|
||||
- mailu-services.yaml
|
||||
- mailu-antispam.yaml
|
||||
- mailu-networkpolicy.yaml
|
||||
- mailu-nginx-config.yaml
|
||||
|
||||
labels:
|
||||
- includeSelectors: true
|
||||
pairs:
|
||||
app: mailu
|
||||
platform: mail
|
||||
managed-by: kustomize
|
||||
48
infrastructure/platform/mail/mailu/base/mailu-antispam.yaml
Normal file
48
infrastructure/platform/mail/mailu/base/mailu-antispam.yaml
Normal file
@@ -0,0 +1,48 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: mailu-antispam
|
||||
namespace: bakery-ia
|
||||
labels:
|
||||
app: mailu
|
||||
component: antispam
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: mailu
|
||||
component: antispam
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: mailu
|
||||
component: antispam
|
||||
spec:
|
||||
containers:
|
||||
- name: antispam
|
||||
image: ghcr.io/mailu/rspamd:2024.06
|
||||
imagePullPolicy: IfNotPresent
|
||||
ports:
|
||||
- containerPort: 11333
|
||||
name: rspamd
|
||||
- containerPort: 11334
|
||||
name: rspamd-admin
|
||||
envFrom:
|
||||
- configMapRef:
|
||||
name: mailu-config
|
||||
- secretRef:
|
||||
name: mailu-secrets
|
||||
volumeMounts:
|
||||
- name: mailu-data
|
||||
mountPath: /data
|
||||
resources:
|
||||
requests:
|
||||
cpu: 200m
|
||||
memory: 512Mi
|
||||
limits:
|
||||
cpu: 1000m
|
||||
memory: 1Gi
|
||||
volumes:
|
||||
- name: mailu-data
|
||||
persistentVolumeClaim:
|
||||
claimName: mailu-data
|
||||
79
infrastructure/platform/mail/mailu/base/mailu-configmap.yaml
Normal file
79
infrastructure/platform/mail/mailu/base/mailu-configmap.yaml
Normal file
@@ -0,0 +1,79 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: mailu-config
|
||||
namespace: bakery-ia
|
||||
labels:
|
||||
app: mailu
|
||||
component: config
|
||||
data:
|
||||
# Domain configuration
|
||||
DOMAIN: "DOMAIN_PLACEHOLDER"
|
||||
HOSTNAMES: "mail.DOMAIN_PLACEHOLDER"
|
||||
POSTMASTER: "admin"
|
||||
|
||||
# Kubernetes-specific settings
|
||||
# These help Mailu components discover each other in K8s
|
||||
FRONT_ADDRESS: "mailu-front.bakery-ia.svc.cluster.local"
|
||||
ADMIN_ADDRESS: "mailu-admin.bakery-ia.svc.cluster.local"
|
||||
SMTP_ADDRESS: "mailu-smtp.bakery-ia.svc.cluster.local"
|
||||
IMAP_ADDRESS: "mailu-imap.bakery-ia.svc.cluster.local"
|
||||
ANTISPAM_ADDRESS: "mailu-antispam.bakery-ia.svc.cluster.local"
|
||||
|
||||
# Redis Configuration - Using shared cluster Redis (database 15 reserved for Mailu)
|
||||
# The shared Redis has 16 databases (0-15), Mailu uses db 15 for isolation
|
||||
# Using plain TCP port 6380 for internal cluster communication (TLS on 6379 for external)
|
||||
# Primary configuration: Redis URL is configured in mailu-secrets.yaml as REDIS_URL
|
||||
# Format: redis://:password@host:port/db
|
||||
# Fallback configuration: REDIS_ADDRESS, REDIS_DB, and REDIS_PW
|
||||
REDIS_ADDRESS: "redis-service.bakery-ia.svc.cluster.local:6380"
|
||||
REDIS_DB: "15"
|
||||
# REDIS_PW is set from secrets for Redis authentication
|
||||
|
||||
# External SMTP Relay Configuration
|
||||
# Mailu relays outbound emails through an external service for better deliverability
|
||||
# Supported providers: Mailgun, SendGrid, AWS SES, Postmark
|
||||
#
|
||||
# Provider RELAYHOST examples:
|
||||
# Mailgun: [smtp.mailgun.org]:587
|
||||
# SendGrid: [smtp.sendgrid.net]:587
|
||||
# AWS SES: [email-smtp.us-east-1.amazonaws.com]:587
|
||||
# Postmark: [smtp.postmarkapp.com]:587
|
||||
#
|
||||
# IMPORTANT: Update RELAY_PASSWORD in mailu-secrets.yaml with your provider's API key
|
||||
RELAYHOST: "[smtp.mailgun.org]:587"
|
||||
RELAY_LOGIN: "postmaster@DOMAIN_PLACEHOLDER"
|
||||
|
||||
# Security settings
|
||||
TLS_FLAVOR: "cert"
|
||||
AUTH_RATELIMIT_IP: "60/hour"
|
||||
AUTH_RATELIMIT_USER: "100/day"
|
||||
|
||||
# Message limits
|
||||
MESSAGE_SIZE_LIMIT: "52428800" # 50MB
|
||||
MESSAGE_RATELIMIT: "200/day"
|
||||
|
||||
# Features - disable ClamAV in dev to save resources (enable in prod)
|
||||
WEBMAIL: "roundcube"
|
||||
ANTIVIRUS: "none"
|
||||
ANTISPAM: "rspamd"
|
||||
|
||||
# Postfix configuration
|
||||
POSTFIX_MESSAGE_SIZE_LIMIT: "52428800"
|
||||
POSTFIX_QUEUE_MINIMUM: "1"
|
||||
POSTFIX_QUEUE_LIFETIME: "7d"
|
||||
|
||||
# DKIM configuration
|
||||
DKIM_SELECTOR: "mailu"
|
||||
DKIM_KEY_LENGTH: "2048"
|
||||
|
||||
# Webmail settings
|
||||
WEB_WEBMAIL: "/webmail"
|
||||
WEB_ADMIN: "/admin"
|
||||
WEBMAIL_ADMIN: "admin@DOMAIN_PLACEHOLDER"
|
||||
|
||||
# Logging
|
||||
LOG_LEVEL: "INFO"
|
||||
|
||||
# Disable welcome email during development
|
||||
WELCOME: "false"
|
||||
218
infrastructure/platform/mail/mailu/base/mailu-deployment.yaml
Normal file
218
infrastructure/platform/mail/mailu/base/mailu-deployment.yaml
Normal file
@@ -0,0 +1,218 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: mailu-front
|
||||
namespace: bakery-ia
|
||||
labels:
|
||||
app: mailu
|
||||
component: front
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: mailu
|
||||
component: front
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: mailu
|
||||
component: front
|
||||
spec:
|
||||
containers:
|
||||
- name: front
|
||||
image: ghcr.io/mailu/nginx:2024.06
|
||||
imagePullPolicy: IfNotPresent
|
||||
ports:
|
||||
- containerPort: 80
|
||||
name: http
|
||||
- containerPort: 443
|
||||
name: https
|
||||
envFrom:
|
||||
- configMapRef:
|
||||
name: mailu-config
|
||||
- secretRef:
|
||||
name: mailu-secrets
|
||||
volumeMounts:
|
||||
- name: mailu-data
|
||||
mountPath: /data
|
||||
- name: mailu-tls
|
||||
mountPath: /certs
|
||||
readOnly: true
|
||||
- name: nginx-config
|
||||
mountPath: /overrides/ingress-fix.conf
|
||||
subPath: ingress-fix.conf
|
||||
readOnly: true
|
||||
resources:
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 128Mi
|
||||
limits:
|
||||
cpu: 200m
|
||||
memory: 256Mi
|
||||
volumes:
|
||||
- name: mailu-data
|
||||
persistentVolumeClaim:
|
||||
claimName: mailu-data
|
||||
- name: mailu-tls
|
||||
secret:
|
||||
# TLS secret name is environment-specific:
|
||||
# - Dev: bakery-dev-tls-cert (self-signed, from dev-certificate.yaml)
|
||||
# - Prod: bakery-ia-prod-tls-cert (Let's Encrypt, from prod-certificate.yaml)
|
||||
# Patched via kustomize overlays in dev/prod kustomization.yaml
|
||||
secretName: MAILU_TLS_SECRET_PLACEHOLDER
|
||||
items:
|
||||
- key: tls.crt
|
||||
path: cert.pem
|
||||
- key: tls.key
|
||||
path: key.pem
|
||||
- name: nginx-config
|
||||
configMap:
|
||||
name: mailu-nginx-config
|
||||
items:
|
||||
- key: ingress-fix.conf
|
||||
path: ingress-fix.conf
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: mailu-admin
|
||||
namespace: bakery-ia
|
||||
labels:
|
||||
app: mailu
|
||||
component: admin
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: mailu
|
||||
component: admin
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: mailu
|
||||
component: admin
|
||||
spec:
|
||||
containers:
|
||||
- name: admin
|
||||
image: ghcr.io/mailu/admin:2024.06
|
||||
imagePullPolicy: IfNotPresent
|
||||
ports:
|
||||
- containerPort: 80
|
||||
name: http
|
||||
envFrom:
|
||||
- configMapRef:
|
||||
name: mailu-config
|
||||
- secretRef:
|
||||
name: mailu-secrets
|
||||
volumeMounts:
|
||||
- name: mailu-data
|
||||
mountPath: /data
|
||||
resources:
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 256Mi
|
||||
limits:
|
||||
cpu: 300m
|
||||
memory: 512Mi
|
||||
volumes:
|
||||
- name: mailu-data
|
||||
persistentVolumeClaim:
|
||||
claimName: mailu-data
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: mailu-smtp
|
||||
namespace: bakery-ia
|
||||
labels:
|
||||
app: mailu
|
||||
component: smtp
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: mailu
|
||||
component: smtp
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: mailu
|
||||
component: smtp
|
||||
spec:
|
||||
containers:
|
||||
- name: smtp
|
||||
image: ghcr.io/mailu/postfix:2024.06
|
||||
imagePullPolicy: IfNotPresent
|
||||
ports:
|
||||
- containerPort: 25
|
||||
name: smtp
|
||||
- containerPort: 587
|
||||
name: submission
|
||||
envFrom:
|
||||
- configMapRef:
|
||||
name: mailu-config
|
||||
- secretRef:
|
||||
name: mailu-secrets
|
||||
volumeMounts:
|
||||
- name: mailu-data
|
||||
mountPath: /data
|
||||
resources:
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 256Mi
|
||||
limits:
|
||||
cpu: 500m
|
||||
memory: 512Mi
|
||||
volumes:
|
||||
- name: mailu-data
|
||||
persistentVolumeClaim:
|
||||
claimName: mailu-data
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: mailu-imap
|
||||
namespace: bakery-ia
|
||||
labels:
|
||||
app: mailu
|
||||
component: imap
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: mailu
|
||||
component: imap
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: mailu
|
||||
component: imap
|
||||
spec:
|
||||
containers:
|
||||
- name: imap
|
||||
image: ghcr.io/mailu/dovecot:2024.06
|
||||
imagePullPolicy: IfNotPresent
|
||||
ports:
|
||||
- containerPort: 143
|
||||
name: imap
|
||||
- containerPort: 993
|
||||
name: imaps
|
||||
envFrom:
|
||||
- configMapRef:
|
||||
name: mailu-config
|
||||
- secretRef:
|
||||
name: mailu-secrets
|
||||
volumeMounts:
|
||||
- name: mailu-data
|
||||
mountPath: /data
|
||||
resources:
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 256Mi
|
||||
limits:
|
||||
cpu: 500m
|
||||
memory: 512Mi
|
||||
volumes:
|
||||
- name: mailu-data
|
||||
persistentVolumeClaim:
|
||||
claimName: mailu-data
|
||||
@@ -0,0 +1,93 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: NetworkPolicy
|
||||
metadata:
|
||||
name: mailu-network-policy
|
||||
namespace: bakery-ia
|
||||
labels:
|
||||
app: mailu
|
||||
component: network-policy
|
||||
spec:
|
||||
# Apply to all Mailu pods (matches mailu-deployment.yaml labels)
|
||||
podSelector:
|
||||
matchLabels:
|
||||
app: mailu
|
||||
policyTypes:
|
||||
- Ingress
|
||||
- Egress
|
||||
ingress:
|
||||
# Allow SMTP from notification-service
|
||||
- from:
|
||||
- podSelector:
|
||||
matchLabels:
|
||||
app: notification-service
|
||||
ports:
|
||||
- port: 25
|
||||
- port: 587
|
||||
# Allow SMTP from other internal services that may need to send email
|
||||
- from:
|
||||
- podSelector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: bakery-ia
|
||||
ports:
|
||||
- port: 587
|
||||
# Allow webmail/admin access via ingress controller
|
||||
- from:
|
||||
- namespaceSelector:
|
||||
matchLabels:
|
||||
kubernetes.io/metadata.name: ingress-nginx
|
||||
ports:
|
||||
- port: 80
|
||||
- port: 443
|
||||
# Allow internal Mailu component communication
|
||||
- from:
|
||||
- podSelector:
|
||||
matchLabels:
|
||||
app: mailu
|
||||
ports:
|
||||
- port: 25
|
||||
- port: 587
|
||||
- port: 143
|
||||
- port: 993
|
||||
- port: 80
|
||||
- port: 11333
|
||||
- port: 11334
|
||||
egress:
|
||||
# Allow relay to external SMTP (Mailgun)
|
||||
- to:
|
||||
- ipBlock:
|
||||
cidr: 0.0.0.0/0
|
||||
except:
|
||||
- 10.0.0.0/8
|
||||
- 172.16.0.0/12
|
||||
- 192.168.0.0/16
|
||||
ports:
|
||||
- port: 587
|
||||
- port: 465
|
||||
- port: 25
|
||||
# Allow internal Mailu component communication
|
||||
- to:
|
||||
- podSelector:
|
||||
matchLabels:
|
||||
app: mailu
|
||||
ports:
|
||||
- port: 25
|
||||
- port: 587
|
||||
- port: 143
|
||||
- port: 993
|
||||
- port: 80
|
||||
- port: 11333
|
||||
- port: 11334
|
||||
# Allow connection to shared Redis (database 15)
|
||||
- to:
|
||||
- podSelector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: redis
|
||||
ports:
|
||||
- port: 6379
|
||||
# Allow DNS lookups
|
||||
- to: []
|
||||
ports:
|
||||
- port: 53
|
||||
protocol: UDP
|
||||
- port: 53
|
||||
protocol: TCP
|
||||
@@ -0,0 +1,31 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: mailu-nginx-config
|
||||
namespace: bakery-ia
|
||||
labels:
|
||||
app: mailu
|
||||
component: nginx-config
|
||||
data:
|
||||
# Custom Nginx configuration to prevent redirect loops when behind ingress
|
||||
# This file is mounted as /overrides/ingress-fix.conf in the Mailu frontend container
|
||||
ingress-fix.conf: |
|
||||
# Override the default HTTP to HTTPS redirect behavior
|
||||
# When behind ingress controller, we should trust X-Forwarded-Proto header
|
||||
# and avoid redirect loops
|
||||
|
||||
# Disable the HTTP to HTTPS redirect by overriding the redirect condition
|
||||
# This prevents the redirect loop by setting the proxy protocol to https
|
||||
set $proxy_x_forwarded_proto "https";
|
||||
|
||||
# Override the map directive to always return https when behind ingress
|
||||
map "" $proxy_x_forwarded_proto {
|
||||
default "https";
|
||||
}
|
||||
|
||||
# Trust the X-Forwarded-* headers from the ingress controller
|
||||
set_real_ip_from 10.0.0.0/8;
|
||||
set_real_ip_from 172.16.0.0/12;
|
||||
set_real_ip_from 192.168.0.0/16;
|
||||
real_ip_header X-Forwarded-For;
|
||||
real_ip_recursive on;
|
||||
21
infrastructure/platform/mail/mailu/base/mailu-pvc.yaml
Normal file
21
infrastructure/platform/mail/mailu/base/mailu-pvc.yaml
Normal file
@@ -0,0 +1,21 @@
|
||||
# Mailu data storage - shared across all Mailu components
|
||||
# Contains: mail data, SQLite database, DKIM keys, SSL certificates, queue
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: mailu-data
|
||||
namespace: bakery-ia
|
||||
labels:
|
||||
app: mailu
|
||||
component: storage
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 10Gi
|
||||
# NOTE: Change storageClassName based on your cluster's storage provisioner
|
||||
# For local development (kind): standard
|
||||
# For AWS EKS: gp2 or gp3
|
||||
# For GKE: standard or premium-rwo
|
||||
# For AKS: managed-premium or managed-csi
|
||||
37
infrastructure/platform/mail/mailu/base/mailu-secrets.yaml
Normal file
37
infrastructure/platform/mail/mailu/base/mailu-secrets.yaml
Normal file
@@ -0,0 +1,37 @@
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: mailu-secrets
|
||||
namespace: bakery-ia
|
||||
labels:
|
||||
app: mailu
|
||||
component: secrets
|
||||
type: Opaque
|
||||
data:
|
||||
# Admin credentials (base64 encoded)
|
||||
# IMPORTANT: Replace with real credentials before production deployment
|
||||
# Generate with: openssl rand -base64 24 | tr -d '\n' | base64
|
||||
ADMIN_PASSWORD: "VzJYS2tSdUxpT25ZS2RCWVFTQXJvbjFpeWtFU1M1b2I=" # W2XKkRuLiOnYKdBYQSAron1iykESS5ob
|
||||
|
||||
# Mailu secret key for internal encryption
|
||||
# Generate with: openssl rand -base64 32
|
||||
SECRET_KEY: "Y2I2MWI5MzRkNDcwMjlhNjQxMTdjMGU0MTEwYzkzZjY2YmJjZjVlYWExNWM4NGM0MjcyN2ZhZDc4Zjc=" # cb61b934d47029a64117c0e4110c93f66bbcf5eaa15c84c42727fad78f7
|
||||
|
||||
# External SMTP relay credentials (Mailgun)
|
||||
# For Mailgun: use postmaster@domain as username
|
||||
RELAY_USER: "cG9zdG1hc3RlckBET01BSU5fUExBQ0VIT0xERVI=" # postmaster@DOMAIN_PLACEHOLDER
|
||||
RELAY_PASSWORD: "bWFpbGd1bi1hcGkta2V5LXJlcGxhY2UtaW4tcHJvZHVjdGlvbg==" # mailgun-api-key-replace-in-production
|
||||
|
||||
# Database credentials
|
||||
DB_PASSWORD: "RThLejQ3WW1WekRsSEdzMU05d0FiSnp4Y0tuR09OQ1Q=" # E8Kz47YmVzDlHGs1M9wAbJzxcKnGONCT
|
||||
|
||||
# Dovecot admin password (moved from ConfigMap for security)
|
||||
DOVEADM_PASSWORD: "WnZhMzNoaVBJc2ZtV3RxUlBWV29taTRYZ2xLTlZPcHY=" # Zva33hiPIsfmWtqRPVWomi4XglKNVOpv
|
||||
|
||||
# Redis password - same as shared cluster Redis (redis-secrets)
|
||||
# Mailu uses database 15 for isolation from other services
|
||||
# REDIS_PW is required by Mailu for Redis authentication
|
||||
REDIS_PASSWORD: "SjNsa2x4cHU5QzlPTElLdkJteFVIT2h0czFnc0lvM0E=" # J3lklxpu9C9OLIKvBmxUHOhts1gsIo3A
|
||||
REDIS_PW: "SjNsa2x4cHU5QzlPTElLdkJteFVIT2h0czFnc0lvM0E=" # J3lklxpu9C9OLIKvBmxUHOhts1gsIo3A
|
||||
# Redis URL for Mailu - using plain TCP port 6380 for internal cluster communication
|
||||
REDIS_URL: "cmVkaXM6Ly86SjNsa2x4cHU5QzlPTElLdkJteFVIT2h0czFnc0lvM0FAcmVkaXMtc2VydmljZS5iYWtlcnktaWEuc3ZjLmNsdXN0ZXIubG9jYWw6NjM4MC8xNQ==" # redis://:J3lklxpu9C9OLIKvBmxUHOhts1gsIo3A@redis-service.bakery-ia.svc.cluster.local:6380/15
|
||||
126
infrastructure/platform/mail/mailu/base/mailu-services.yaml
Normal file
126
infrastructure/platform/mail/mailu/base/mailu-services.yaml
Normal file
@@ -0,0 +1,126 @@
|
||||
# Mailu Services - Routes traffic to Mailu stack components
|
||||
# All services use app: mailu selectors to match mailu-deployment.yaml
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: mailu-front
|
||||
namespace: bakery-ia
|
||||
labels:
|
||||
app: mailu
|
||||
component: front
|
||||
spec:
|
||||
type: ClusterIP
|
||||
selector:
|
||||
app: mailu
|
||||
component: front
|
||||
ports:
|
||||
- name: http
|
||||
port: 80
|
||||
targetPort: 80
|
||||
- name: https
|
||||
port: 443
|
||||
targetPort: 443
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: mailu-admin
|
||||
namespace: bakery-ia
|
||||
labels:
|
||||
app: mailu
|
||||
component: admin
|
||||
spec:
|
||||
type: ClusterIP
|
||||
selector:
|
||||
app: mailu
|
||||
component: admin
|
||||
ports:
|
||||
- name: http
|
||||
port: 80
|
||||
targetPort: 80
|
||||
---
|
||||
# Primary SMTP service - used by notification-service and other internal services
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: mailu-smtp
|
||||
namespace: bakery-ia
|
||||
labels:
|
||||
app: mailu
|
||||
component: smtp
|
||||
spec:
|
||||
type: ClusterIP
|
||||
selector:
|
||||
app: mailu
|
||||
component: smtp
|
||||
ports:
|
||||
- name: smtp
|
||||
port: 25
|
||||
targetPort: 25
|
||||
- name: submission
|
||||
port: 587
|
||||
targetPort: 587
|
||||
---
|
||||
# Alias for backwards compatibility with services expecting 'email-smtp'
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: email-smtp
|
||||
namespace: bakery-ia
|
||||
labels:
|
||||
app: mailu
|
||||
component: smtp
|
||||
spec:
|
||||
type: ClusterIP
|
||||
selector:
|
||||
app: mailu
|
||||
component: smtp
|
||||
ports:
|
||||
- name: smtp
|
||||
port: 25
|
||||
targetPort: 25
|
||||
- name: submission
|
||||
port: 587
|
||||
targetPort: 587
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: mailu-imap
|
||||
namespace: bakery-ia
|
||||
labels:
|
||||
app: mailu
|
||||
component: imap
|
||||
spec:
|
||||
type: ClusterIP
|
||||
selector:
|
||||
app: mailu
|
||||
component: imap
|
||||
ports:
|
||||
- name: imap
|
||||
port: 143
|
||||
targetPort: 143
|
||||
- name: imaps
|
||||
port: 993
|
||||
targetPort: 993
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: mailu-antispam
|
||||
namespace: bakery-ia
|
||||
labels:
|
||||
app: mailu
|
||||
component: antispam
|
||||
spec:
|
||||
type: ClusterIP
|
||||
selector:
|
||||
app: mailu
|
||||
component: antispam
|
||||
ports:
|
||||
- name: rspamd
|
||||
port: 11333
|
||||
targetPort: 11333
|
||||
- name: rspamd-admin
|
||||
port: 11334
|
||||
targetPort: 11334
|
||||
@@ -0,0 +1,32 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
|
||||
resources:
|
||||
- ../../base
|
||||
|
||||
namePrefix: dev-
|
||||
|
||||
patches:
|
||||
- target:
|
||||
kind: ConfigMap
|
||||
name: mailu-config
|
||||
patch: |-
|
||||
- op: replace
|
||||
path: /data/DOMAIN
|
||||
value: "bakery-ia.local"
|
||||
- op: replace
|
||||
path: /data/HOSTNAMES
|
||||
value: "mail.bakery-ia.local"
|
||||
- op: replace
|
||||
path: /data/RELAY_LOGIN
|
||||
value: "postmaster@bakery-ia.local"
|
||||
- op: replace
|
||||
path: /data/WEBMAIL_ADMIN
|
||||
value: "admin@bakery-ia.local"
|
||||
- target:
|
||||
kind: Secret
|
||||
name: mailu-secrets
|
||||
patch: |-
|
||||
- op: replace
|
||||
path: /data/RELAY_USER
|
||||
value: "cG9zdG1hc3RlckBiYWtlcnktaWEubG9jYWw=" # postmaster@bakery-ia.local
|
||||
@@ -0,0 +1,32 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
|
||||
resources:
|
||||
- ../../base
|
||||
|
||||
namePrefix: prod-
|
||||
|
||||
patches:
|
||||
- target:
|
||||
kind: ConfigMap
|
||||
name: mailu-config
|
||||
patch: |-
|
||||
- op: replace
|
||||
path: /data/DOMAIN
|
||||
value: "bakewise.ai"
|
||||
- op: replace
|
||||
path: /data/HOSTNAMES
|
||||
value: "mail.bakewise.ai"
|
||||
- op: replace
|
||||
path: /data/RELAY_LOGIN
|
||||
value: "postmaster@bakewise.ai"
|
||||
- op: replace
|
||||
path: /data/WEBMAIL_ADMIN
|
||||
value: "admin@bakewise.ai"
|
||||
- target:
|
||||
kind: Secret
|
||||
name: mailu-secrets
|
||||
patch: |-
|
||||
- op: replace
|
||||
path: /data/RELAY_USER
|
||||
value: "cG9zdG1hc3RlckBiYWtld2lzZS5haQ==" # postmaster@bakewise.ai
|
||||
Reference in New Issue
Block a user