Added Outfleet VPN
This commit is contained in:
21
k8s/apps/vpn/app.yaml
Normal file
21
k8s/apps/vpn/app.yaml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: vpn
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: homelab
|
||||||
|
destination:
|
||||||
|
namespace: vpn
|
||||||
|
server: https://kubernetes.default.svc
|
||||||
|
source:
|
||||||
|
repoURL: ssh://git@gt.hexor.cy:30022/ab/homelab.git
|
||||||
|
targetRevision: HEAD
|
||||||
|
path: k8s/apps/vpn
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
selfHeal: true
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
|
118
k8s/apps/vpn/external-secrets.yaml
Normal file
118
k8s/apps/vpn/external-secrets.yaml
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: outfleet-secrets
|
||||||
|
namespace: vpn
|
||||||
|
spec:
|
||||||
|
target:
|
||||||
|
name: outfleet-secrets
|
||||||
|
deletionPolicy: Delete
|
||||||
|
template:
|
||||||
|
type: Opaque
|
||||||
|
data:
|
||||||
|
TIMEZONE: Asia/Nicosia
|
||||||
|
POSTGRES_DB: outfleet
|
||||||
|
POSTGRES_HOST: psql.psql.svc
|
||||||
|
POSTGRES_PORT: "5432"
|
||||||
|
POSTGRES_USER: outfleet
|
||||||
|
CELERY_BROKER_URL: "redis://localhost:6379/0"
|
||||||
|
POSTGRES_PASSWORD: |-
|
||||||
|
{{ .pg_pass }}
|
||||||
|
SECRET_KEY: |-
|
||||||
|
{{ .secret_key }}
|
||||||
|
EXTERNAL_ADDRESS: |-
|
||||||
|
{{ .external_address }}
|
||||||
|
CSRF_TRUSTED_ORIGINS: |-
|
||||||
|
{{ .external_address }}
|
||||||
|
data:
|
||||||
|
- secretKey: external_address
|
||||||
|
sourceRef:
|
||||||
|
storeRef:
|
||||||
|
name: vaultwarden-login
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
remoteRef:
|
||||||
|
key: 760ed4c1-8441-4f11-ac88-aa3717d4b092 # Outfleet
|
||||||
|
property: fields[1].value
|
||||||
|
- secretKey: secret_key
|
||||||
|
sourceRef:
|
||||||
|
storeRef:
|
||||||
|
name: vaultwarden-login
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
remoteRef:
|
||||||
|
key: 760ed4c1-8441-4f11-ac88-aa3717d4b092 # Outfleet
|
||||||
|
property: fields[0].value
|
||||||
|
- secretKey: pg_pass
|
||||||
|
sourceRef:
|
||||||
|
storeRef:
|
||||||
|
name: vaultwarden-login
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
remoteRef:
|
||||||
|
key: 2a9deb39-ef22-433e-a1be-df1555625e22 # postgers-users
|
||||||
|
property: fields[1].value
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: outline-config
|
||||||
|
namespace: vpn
|
||||||
|
spec:
|
||||||
|
target:
|
||||||
|
name: outline-config
|
||||||
|
deletionPolicy: Delete
|
||||||
|
template:
|
||||||
|
type: Opaque
|
||||||
|
data:
|
||||||
|
SB_API_PORT: "1285"
|
||||||
|
SB_CLIENT_PORT: "1257"
|
||||||
|
SB_API_PREFIX: |-
|
||||||
|
{{ .api_prefix }}
|
||||||
|
PROM_USER: |-
|
||||||
|
{{ .prom_user }}
|
||||||
|
PROM_PASS: |-
|
||||||
|
{{ .prom_token }}
|
||||||
|
shadowbox.crt: |-
|
||||||
|
{{ .cert }}
|
||||||
|
shadowbox.key: |-
|
||||||
|
{{ .key }}
|
||||||
|
data:
|
||||||
|
- secretKey: api_prefix
|
||||||
|
sourceRef:
|
||||||
|
storeRef:
|
||||||
|
name: vaultwarden-login
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
remoteRef:
|
||||||
|
key: 760ed4c1-8441-4f11-ac88-aa3717d4b092 # Outfleet
|
||||||
|
property: fields[2].value
|
||||||
|
- secretKey: cert
|
||||||
|
sourceRef:
|
||||||
|
storeRef:
|
||||||
|
name: vaultwarden-login
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
remoteRef:
|
||||||
|
key: c4549690-945d-4bf0-af09-a178c7711f87 # Outline cert
|
||||||
|
property: notes
|
||||||
|
- secretKey: key
|
||||||
|
sourceRef:
|
||||||
|
storeRef:
|
||||||
|
name: vaultwarden-login
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
remoteRef:
|
||||||
|
key: 353eae71-4828-431b-9c65-dc1a8fd61ef6 # Outline key
|
||||||
|
property: notes
|
||||||
|
- secretKey: prom_user
|
||||||
|
sourceRef:
|
||||||
|
storeRef:
|
||||||
|
name: vaultwarden-login
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
remoteRef:
|
||||||
|
key: 7cec6228-7dca-45a9-9eff-6b27a47cdfd3 # Outline prom creds
|
||||||
|
property: login.username
|
||||||
|
- secretKey: prom_token
|
||||||
|
sourceRef:
|
||||||
|
storeRef:
|
||||||
|
name: vaultwarden-login
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
remoteRef:
|
||||||
|
key: 7cec6228-7dca-45a9-9eff-6b27a47cdfd3 # Outline prom creds
|
9
k8s/apps/vpn/kustomization.yaml
Normal file
9
k8s/apps/vpn/kustomization.yaml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
||||||
|
|
||||||
|
resources:
|
||||||
|
- app.yaml
|
||||||
|
- external-secrets.yaml
|
||||||
|
- outfleet.yaml
|
||||||
|
- shadowsocks.yaml
|
||||||
|
|
88
k8s/apps/vpn/outfleet.yaml
Normal file
88
k8s/apps/vpn/outfleet.yaml
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: outfleet
|
||||||
|
namespace: vpn
|
||||||
|
labels:
|
||||||
|
app: outfleet
|
||||||
|
annotations:
|
||||||
|
reloader.stakater.com/auto: "true"
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: outfleet
|
||||||
|
replicas: 1
|
||||||
|
strategy:
|
||||||
|
type: RollingUpdate
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: outfleet
|
||||||
|
spec:
|
||||||
|
hostname: outfleet
|
||||||
|
nodeSelector:
|
||||||
|
kubernetes.io/hostname: master.tail2fe2d.ts.net
|
||||||
|
containers:
|
||||||
|
- name: outfleet-web
|
||||||
|
image: 'ultradesu/outfleet:v2'
|
||||||
|
imagePullPolicy: Always
|
||||||
|
command: ["/bin/sh"]
|
||||||
|
args:
|
||||||
|
- "-c"
|
||||||
|
- |
|
||||||
|
python ./manage.py makemigrations vpn
|
||||||
|
python ./manage.py migrate
|
||||||
|
python ./manage.py create_admin
|
||||||
|
python ./manage.py runserver 0.0.0.0:8000
|
||||||
|
envFrom:
|
||||||
|
- secretRef:
|
||||||
|
name: outfleet-secrets
|
||||||
|
env:
|
||||||
|
# value: "true"
|
||||||
|
- name: ALLOWED_HOSTS
|
||||||
|
# - name: DEBUG
|
||||||
|
|
||||||
|
value: "*"
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
containerPort: 8000
|
||||||
|
protocol: TCP
|
||||||
|
- name: outfleet-redis
|
||||||
|
image: 'redis:latest'
|
||||||
|
ports:
|
||||||
|
- name: redis
|
||||||
|
containerPort: 6379
|
||||||
|
protocol: TCP
|
||||||
|
- name: outfleet-celery-worker
|
||||||
|
image: 'ultradesu/outfleet:v2'
|
||||||
|
envFrom:
|
||||||
|
- secretRef:
|
||||||
|
name: outfleet-secrets
|
||||||
|
command:
|
||||||
|
- celery
|
||||||
|
- -A
|
||||||
|
- mysite
|
||||||
|
- worker
|
||||||
|
- --loglevel=INFO
|
||||||
|
- name: outfleet-celery-beat
|
||||||
|
image: 'ultradesu/outfleet:v2'
|
||||||
|
command:
|
||||||
|
- celery
|
||||||
|
- -A
|
||||||
|
- mysite
|
||||||
|
- beat
|
||||||
|
- --loglevel=INFO
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: outfleet
|
||||||
|
namespace: vpn
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: outfleet
|
||||||
|
ports:
|
||||||
|
- protocol: TCP
|
||||||
|
port: 80
|
||||||
|
targetPort: 8000
|
247
k8s/apps/vpn/shadowsocks.yaml
Normal file
247
k8s/apps/vpn/shadowsocks.yaml
Normal file
@ -0,0 +1,247 @@
|
|||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: outline-config
|
||||||
|
namespace: vpn
|
||||||
|
spec:
|
||||||
|
target:
|
||||||
|
name: outline-config
|
||||||
|
deletionPolicy: Delete
|
||||||
|
template:
|
||||||
|
type: Opaque
|
||||||
|
data:
|
||||||
|
SB_API_PORT: "1285"
|
||||||
|
SB_CLIENT_PORT: "1257"
|
||||||
|
SB_API_PREFIX: |-
|
||||||
|
{{ .api_prefix }}
|
||||||
|
PROM_USER: |-
|
||||||
|
{{ .prom_user }}
|
||||||
|
PROM_PASS: |-
|
||||||
|
{{ .prom_token }}
|
||||||
|
shadowbox.crt: |-
|
||||||
|
{{ .cert }}
|
||||||
|
shadowbox.key: |-
|
||||||
|
{{ .key }}
|
||||||
|
data:
|
||||||
|
- secretKey: api_prefix
|
||||||
|
sourceRef:
|
||||||
|
storeRef:
|
||||||
|
name: vaultwarden-login
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
remoteRef:
|
||||||
|
key: 760ed4c1-8441-4f11-ac88-aa3717d4b092 # Outfleet
|
||||||
|
property: fields[2].value
|
||||||
|
- secretKey: cert
|
||||||
|
sourceRef:
|
||||||
|
storeRef:
|
||||||
|
name: vaultwarden-login
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
remoteRef:
|
||||||
|
key: c4549690-945d-4bf0-af09-a178c7711f87 # Outline cert
|
||||||
|
property: notes
|
||||||
|
- secretKey: key
|
||||||
|
sourceRef:
|
||||||
|
storeRef:
|
||||||
|
name: vaultwarden-login
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
remoteRef:
|
||||||
|
key: 353eae71-4828-431b-9c65-dc1a8fd61ef6 # Outline key
|
||||||
|
property: notes
|
||||||
|
- secretKey: prom_user
|
||||||
|
sourceRef:
|
||||||
|
storeRef:
|
||||||
|
name: vaultwarden-login
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
remoteRef:
|
||||||
|
key: 7cec6228-7dca-45a9-9eff-6b27a47cdfd3 # Outline prom creds
|
||||||
|
property: login.username
|
||||||
|
- secretKey: prom_token
|
||||||
|
sourceRef:
|
||||||
|
storeRef:
|
||||||
|
name: vaultwarden-login
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
remoteRef:
|
||||||
|
key: 7cec6228-7dca-45a9-9eff-6b27a47cdfd3 # Outline prom creds
|
||||||
|
property: login.password
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: shadowbox-prometheus-config
|
||||||
|
namespace: vpn
|
||||||
|
data:
|
||||||
|
config.yml: |
|
||||||
|
global:
|
||||||
|
scrape_interval: 1m
|
||||||
|
remote_write:
|
||||||
|
- url: "https://prom.hexor.cy/api/v1/write"
|
||||||
|
basic_auth:
|
||||||
|
username: "_PROM_USER_"
|
||||||
|
password: "_PROM_PASS_"
|
||||||
|
scrape_configs:
|
||||||
|
- job_name: outline_vpn
|
||||||
|
static_configs:
|
||||||
|
- targets:
|
||||||
|
- '127.0.0.1:9092'
|
||||||
|
relabel_configs:
|
||||||
|
- source_labels: [__address__]
|
||||||
|
target_label: instance
|
||||||
|
replacement: "_HOSTNAME_"
|
||||||
|
- target_label: k8s_app
|
||||||
|
replacement: true
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: DaemonSet
|
||||||
|
metadata:
|
||||||
|
name: shadowbox
|
||||||
|
namespace: vpn
|
||||||
|
annotations:
|
||||||
|
reloader.stakater.com/auto: "true"
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: shadowbox
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: shadowbox
|
||||||
|
spec:
|
||||||
|
hostNetwork: true
|
||||||
|
initContainers:
|
||||||
|
- name: cert-generator
|
||||||
|
image: finalgene/openssh:latest
|
||||||
|
command: ["/bin/sh", "-c"]
|
||||||
|
args:
|
||||||
|
- |
|
||||||
|
openssl x509 -noout -fingerprint -sha256 -inform pem -in /certs/shadowbox.crt | sed "s/://g" | sed 's/.*=//' > /cache/certSha256 ;
|
||||||
|
volumeMounts:
|
||||||
|
- name: cert-volume
|
||||||
|
mountPath: /certs
|
||||||
|
- name: server-config-volume
|
||||||
|
mountPath: /cache
|
||||||
|
- name: get-external-ip
|
||||||
|
image: curlimages/curl:latest
|
||||||
|
command: ["/bin/sh", "-c"]
|
||||||
|
args:
|
||||||
|
- |
|
||||||
|
IP=$(curl -s -4 ifconfig.io);
|
||||||
|
echo "External IP is: $IP";
|
||||||
|
echo $IP > /cache/external_ip;
|
||||||
|
volumeMounts:
|
||||||
|
- name: server-config-volume
|
||||||
|
mountPath: /cache
|
||||||
|
- name: manager-config-json
|
||||||
|
image: busybox
|
||||||
|
command: ["/bin/sh", "-c"]
|
||||||
|
env:
|
||||||
|
- name: SB_API_PREFIX
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: outline-config
|
||||||
|
key: SB_API_PREFIX
|
||||||
|
- name: SB_API_PORT
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: outline-config
|
||||||
|
key: SB_API_PORT
|
||||||
|
args:
|
||||||
|
- |
|
||||||
|
OUTLINE_HOSTNAME=$(cat /cache/external_ip);
|
||||||
|
CERT_SHA256=$(cat /cache/certSha256);
|
||||||
|
echo "{
|
||||||
|
\"apiUrl\": \"https://$OUTLINE_HOSTNAME:$SB_API_PORT/$SB_API_PREFIX\",
|
||||||
|
\"certSha256\": \"$CERT_SHA256\"
|
||||||
|
}"
|
||||||
|
volumeMounts:
|
||||||
|
- name: server-config-volume
|
||||||
|
mountPath: /cache
|
||||||
|
affinity:
|
||||||
|
nodeAffinity:
|
||||||
|
requiredDuringSchedulingIgnoredDuringExecution:
|
||||||
|
nodeSelectorTerms:
|
||||||
|
- matchExpressions:
|
||||||
|
- key: outline-server
|
||||||
|
operator: Exists
|
||||||
|
containers:
|
||||||
|
- name: prom
|
||||||
|
image: prom/prometheus
|
||||||
|
command: ["/bin/sh", "-c"]
|
||||||
|
env:
|
||||||
|
- name: PROM_USER
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: outline-config
|
||||||
|
key: PROM_USER
|
||||||
|
- name: PROM_PASS
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: outline-config
|
||||||
|
key: PROM_PASS
|
||||||
|
args:
|
||||||
|
- |
|
||||||
|
cat /prometheus/config.yml | sed -e "s/_HOSTNAME_/${HOSTNAME}/g" -e "s/_PROM_PASS_/${PROM_PASS}/g" -e "s/_PROM_USER_/${PROM_USER}/g" > /prometheus/real_config.yml &&
|
||||||
|
exec prometheus --config.file=/prometheus/real_config.yml --log.level=info --web.enable-lifecycle --web.enable-admin-api --web.listen-address=127.0.0.1:3478
|
||||||
|
volumeMounts:
|
||||||
|
- name: prometheus-config-volume
|
||||||
|
mountPath: /prometheus/config.yml
|
||||||
|
subPath: config.yml
|
||||||
|
- name: shadowbox
|
||||||
|
image: ultradesu/shadowbox:latest
|
||||||
|
ports:
|
||||||
|
- containerPort: 1257
|
||||||
|
protocol: TCP
|
||||||
|
- containerPort: 1285
|
||||||
|
protocol: TCP
|
||||||
|
env:
|
||||||
|
- name: SB_API_PREFIX
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: outline-config
|
||||||
|
key: SB_API_PREFIX
|
||||||
|
- name: SB_API_PORT
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: outline-config
|
||||||
|
key: SB_API_PORT
|
||||||
|
- name: SB_CLIENT_PORT
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: outline-config
|
||||||
|
key: SB_CLIENT_PORT
|
||||||
|
- name: SB_CERTIFICATE_FILE
|
||||||
|
value: /certs/shadowbox.crt
|
||||||
|
- name: SB_PRIVATE_KEY_FILE
|
||||||
|
value: /certs/shadowbox.key
|
||||||
|
lifecycle:
|
||||||
|
postStart:
|
||||||
|
exec:
|
||||||
|
command:
|
||||||
|
- /bin/sh
|
||||||
|
- "-c"
|
||||||
|
- >-
|
||||||
|
OUTLINE_HOSTNAME=$(cat /cache/external_ip); echo '{"rollouts":[{"id":"single-port","enabled":true}],"portForNewAccessKeys":1257,"hostname":"'"$OUTLINE_HOSTNAME"'"}' > /root/shadowbox/persisted-state/shadowbox_server_config.json;
|
||||||
|
volumeMounts:
|
||||||
|
- name: server-config-volume
|
||||||
|
mountPath: /opt/outline
|
||||||
|
- name: server-config-volume
|
||||||
|
mountPath: /root/shadowbox/persisted-state
|
||||||
|
- name: server-config-volume
|
||||||
|
mountPath: /cache
|
||||||
|
- name: cert-volume
|
||||||
|
mountPath: /certs/
|
||||||
|
volumes:
|
||||||
|
- name: server-config-volume
|
||||||
|
emptyDir: {}
|
||||||
|
- name: cert-volume
|
||||||
|
secret:
|
||||||
|
secretName: outline-config
|
||||||
|
items:
|
||||||
|
- key: shadowbox.crt
|
||||||
|
path: shadowbox.crt
|
||||||
|
- key: shadowbox.key
|
||||||
|
path: shadowbox.key
|
||||||
|
- name: prometheus-config-volume
|
||||||
|
configMap:
|
||||||
|
name: shadowbox-prometheus-config
|
||||||
|
|
Reference in New Issue
Block a user