mirror of https://github.com/wg-easy/wg-easy
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4.0 KiB
4.0 KiB
| title |
|---|
| Kubernetes |
Create a namespace
# 01-namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: wg-easy
Create a PVC
# 02-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wg-config
namespace: wg-easy
spec:
accessModes:
- ReadWriteOnce
storageClassName: local-path
resources:
requests:
storage: 100Mi
Create the deployment
Note this example uses a host port. You could create a node port instead as well. Ensure that INIT_PORT, containerPort and hostPort coincide.
The below is an example; please refer to Optional config and Unattended setup for all possible variables.
# 03-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: wg-easy
namespace: wg-easy
spec:
replicas: 1
revisionHistoryLimit: 1
selector:
matchLabels:
app.kubernetes.io/name: wg-easy
strategy:
# Restrict to a Single wg-easy instance, on redeploys it will tear down the old one before bring a new one up.
type: Recreate
template:
metadata:
labels:
app.kubernetes.io/name: wg-easy
spec:
containers:
- name: wg-easy
env:
- name: INIT_ENABLED
value: true
- name: INIT_USERNAME
value: admin
- name: INIT_PASSWORD
value: Chan9eM3L4t3r!
- name: INIT_HOST
value: wg.yourdomain.com
- name: INIT_PORT
value: "33333"
- name: INIT_DNS
value: "9.9.9.9,149.112.112.112"
image: ghcr.io/wg-easy/wg-easy:15
imagePullPolicy: IfNotPresent
ports:
- containerPort: 33333
hostPort: 33333
protocol: UDP
- containerPort: 51821
name: http
protocol: TCP
# Use the http server for pod health checks
livenessProbe:
failureThreshold: 3
periodSeconds: 10
successThreshold: 1
tcpSocket:
port: http
timeoutSeconds: 1
readinessProbe:
failureThreshold: 3
periodSeconds: 10
successThreshold: 1
tcpSocket:
port: http
timeoutSeconds: 1
startupProbe:
failureThreshold: 30
periodSeconds: 5
successThreshold: 1
tcpSocket:
port: http
timeoutSeconds: 1
# Give pod permissions to modify iptables and load the wireguard kernel module
securityContext:
capabilities:
add:
- NET_ADMIN
- SYS_MODULE
# Persistent storage location
volumeMounts:
- mountPath: /etc/wireguard
name: config
restartPolicy: Always
volumes:
- name: config
persistentVolumeClaim:
claimName: wg-config
Create a service
# 04-service.yaml
apiVersion: v1
kind: Service
metadata:
name: wg-easy-http
namespace: wg-easy
spec:
ports:
- name: http
port: 51821
protocol: TCP
targetPort: http
selector:
app.kubernetes.io/name: wg-easy
type: ClusterIP
(optional) Create an ingress
For example, using traefik ingress class
# 05-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: wg-easy
namespace: wg-easy
spec:
ingressClassName: traefik
rules:
- host: wg.yourdomain.com
http:
paths:
- backend:
service:
name: wg-easy-http
port:
name: http
path: /
pathType: Prefix
You should now be able to browse https://wg.yourdomain.com and set up your wireguard config.