Compare commits

..

4 Commits

Author SHA1 Message Date
gitea-admin 163823b6b4 feat: deploy Bitwarden vault to security namespace
Validate Manifests / validate (pull_request) Has been cancelled
2026-05-19 08:46:45 +00:00
gitea-admin c2a7260e18 feat: deploy Bitwarden vault to security namespace 2026-05-19 08:46:45 +00:00
gitea-admin 80b021426a feat: deploy Bitwarden vault to security namespace 2026-05-19 08:46:45 +00:00
gitea-admin d994cb4134 feat: deploy Bitwarden vault to security namespace 2026-05-19 08:46:44 +00:00
36 changed files with 238 additions and 446 deletions
-54
View File
@@ -1,54 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: khalisio
namespace: apps
labels:
app: khalisio
spec:
replicas: 2
selector:
matchLabels:
app: khalisio
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
template:
metadata:
labels:
app: khalisio
spec:
imagePullSecrets:
- name: ghcr-pull-secret
nodeSelector:
kubernetes.io/arch: amd64
containers:
- name: web
image: ghcr.io/richard-callis/portfolio:latest
imagePullPolicy: Always
ports:
- name: http
containerPort: 8080
resources:
requests:
cpu: 10m
memory: 16Mi
limits:
cpu: 100m
memory: 64Mi
readinessProbe:
httpGet: { path: /, port: http }
initialDelaySeconds: 2
periodSeconds: 5
livenessProbe:
httpGet: { path: /, port: http }
initialDelaySeconds: 5
periodSeconds: 30
securityContext:
allowPrivilegeEscalation: false
runAsNonRoot: true
runAsUser: 101
capabilities:
drop: ["ALL"]
-35
View File
@@ -1,35 +0,0 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: khalisio
namespace: apps
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
tls:
- hosts:
- khalisio.com
- www.khalisio.com
secretName: khalisio-tls
rules:
- host: khalisio.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: khalisio
port:
number: 80
- host: www.khalisio.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: khalisio
port:
number: 80
-13
View File
@@ -1,13 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: khalisio
namespace: apps
spec:
selector:
app: khalisio
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: ClusterIP
@@ -0,0 +1,59 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: bitwarden
namespace: security
labels:
app: bitwarden
spec:
replicas: 1
selector:
matchLabels:
app: bitwarden
template:
metadata:
labels:
app: bitwarden
spec:
containers:
- name: bitwarden
image: bitwarden/server:latest
ports:
- containerPort: 80
env:
- name: SIGNUPS_ALLOWED
value: "true"
- name: WEBVAULT_ENABLED
value: "true"
- name: IDENTITY_URL
value: "https://bitwarden.khalisio.com"
- name: API_URL
value: "https://bitwarden.khalisio.com"
- name: DATABASE_URL
value: "/bitwarden/data/bitwarden.db"
resources:
requests:
cpu: 100m
memory: 256Mi
limits:
cpu: 500m
memory: 512Mi
volumeMounts:
- name: bitwarden-data
mountPath: /bitwarden
readinessProbe:
httpGet:
path: /healthz
port: 80
initialDelaySeconds: 15
periodSeconds: 10
livenessProbe:
httpGet:
path: /healthz
port: 80
initialDelaySeconds: 30
periodSeconds: 30
volumes:
- name: bitwarden-data
persistentVolumeClaim:
claimName: bitwarden-data
@@ -6,6 +6,7 @@ metadata:
annotations: annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod cert-manager.io/cluster-issuer: letsencrypt-prod
traefik.ingress.kubernetes.io/router.entrypoints: websecure traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.tls: "true"
spec: spec:
ingressClassName: traefik ingressClassName: traefik
tls: tls:
@@ -17,21 +17,26 @@ spec:
spec: spec:
containers: containers:
- name: bitwarden - name: bitwarden
image: vaultwarden/server:latest image: bitwarden/server:latest
ports: ports:
- containerPort: 80 - containerPort: 80
name: http
env: env:
- name: BW_ADMIN_DOMAIN
value: bitwarden.khalisio.com
- name: WEBSOCKETS_ENABLED
value: "true"
- name: SIGNUPS_ALLOWED - name: SIGNUPS_ALLOWED
value: "false"
- name: DATABASE_TYPE
value: sqlite
- name: DATABASE_FILE
value: /bitwarden/data/bitwarden.db
- name: WEB_VAULT_ENABLE
value: "true"
- name: API_ENABLED
value: "true"
- name: IDENTITY_ENABLED
value: "true" value: "true"
- name: DOMAIN
value: https://bitwarden.khalisio.com
volumeMounts: volumeMounts:
- name: bitwarden-data - name: bitwarden-data
mountPath: /data mountPath: /bitwarden/data
resources: resources:
requests: requests:
cpu: 100m cpu: 100m
@@ -1,20 +1,24 @@
apiVersion: networking.k8s.io/v1 apiVersion: networking.k8s.io/v1
kind: Ingress kind: Ingress
metadata: metadata:
name: transmission name: bitwarden
namespace: media namespace: security
annotations: annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod cert-manager.io/cluster-issuer: letsencrypt-prod
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec: spec:
ingressClassName: traefik
tls:
- hosts:
- bitwarden.khalisio.com
secretName: bitwarden-tls
rules: rules:
- host: transmission.khalis.corp - host: bitwarden.khalisio.com
http: http:
paths: paths:
- path: / - path: /
pathType: Prefix pathType: Prefix
backend: backend:
service: service:
name: transmission name: bitwarden
port: port:
name: http number: 80
@@ -3,5 +3,5 @@ kind: Namespace
metadata: metadata:
name: security name: security
labels: labels:
app.kubernetes.io/name: security app.kubernetes.io/name: bitwarden
app.kubernetes.io/managed-by: orion app.kubernetes.io/managed-by: orion
+13
View File
@@ -0,0 +1,13 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: bitwarden-data
namespace: security
labels:
app: bitwarden
spec:
accessModes: [ReadWriteOnce]
storageClassName: longhorn
resources:
requests:
storage: 5Gi
+16
View File
@@ -0,0 +1,16 @@
apiVersion: v1
kind: Service
metadata:
name: bitwarden
namespace: security
labels:
app: bitwarden
spec:
selector:
app: bitwarden
ports:
- name: http
port: 80
targetPort: 80
protocol: TCP
type: ClusterIP
-1
View File
@@ -5,4 +5,3 @@ metadata:
labels: labels:
app.kubernetes.io/name: game-servers app.kubernetes.io/name: game-servers
app.kubernetes.io/managed-by: orion app.kubernetes.io/managed-by: orion
pod-security.kubernetes.io/enforce: privileged
@@ -71,6 +71,9 @@ spec:
- | - |
export DOCKER_HOST=tcp://localhost:2375 export DOCKER_HOST=tcp://localhost:2375
exec wings exec wings
envFrom:
- secretRef:
name: wings-ark-sa-config
env: env:
- name: DOCKER_HOST - name: DOCKER_HOST
value: tcp://localhost:2375 value: tcp://localhost:2375
@@ -1,4 +1,4 @@
apiVersion: external-secrets.io/v1 apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret kind: ExternalSecret
metadata: metadata:
name: wings-ark-sa-config name: wings-ark-sa-config
@@ -6,13 +6,21 @@ metadata:
spec: spec:
refreshInterval: 1h refreshInterval: 1h
secretStoreRef: secretStoreRef:
name: orion-vault name: vault
kind: ClusterSecretStore kind: ClusterSecretStore
target: target:
name: wings-ark-sa-config name: wings-ark-sa-config
creationPolicy: Owner creationPolicy: Owner
data: data:
- secretKey: config.yml - secretKey: WINGS_UUID
remoteRef: remoteRef:
key: Talos Cluster/wings/ark-sa key: wings/ark-sa
property: config property: uuid
- secretKey: WINGS_TOKEN
remoteRef:
key: wings/ark-sa
property: token
- secretKey: LOCALE
remoteRef:
key: wings/ark-sa
property: locale
@@ -9,7 +9,6 @@ metadata:
app.kubernetes.io/part-of: pelican app.kubernetes.io/part-of: pelican
game: valheim game: valheim
spec: spec:
replicas: 1
strategy: strategy:
type: Recreate type: Recreate
selector: selector:
@@ -23,21 +22,44 @@ spec:
spec: spec:
nodeSelector: nodeSelector:
kubernetes.io/arch: amd64 kubernetes.io/arch: amd64
volumes:
- name: wings-config
secret:
secretName: wings-valheim-config
- name: docker-socket
emptyDir: {}
- name: dind-storage
emptyDir: {}
- name: server-data
persistentVolumeClaim:
claimName: wings-valheim-data
- name: autostart-token
secret:
secretName: pelican-autostart-key
containers: containers:
- name: wings
image: ghcr.io/pelican-dev/wings:latest
env:
- name: DOCKER_HOST
value: tcp://localhost:2375
- name: WINGS_UID
value: "1000"
- name: WINGS_GID
value: "1000"
- name: WINGS_PORT
value: "8081"
- name: WINGS_API_SFTP_PORT
value: "2023"
- name: WINGS_SERVER_UUID
value: "9d09e83d-00c3-4404-07c0522a6c25"
envFrom:
- secretRef:
name: wings-valheim-config
volumeMounts:
- name: docker-socket
mountPath: /var/run/docker.sock
- name: wings-data
mountPath: /var/lib/wings
- name: server-data
mountPath: /mnt/server
readinessProbe:
httpGet:
path: /ready
port: 8081
initialDelaySeconds: 10
periodSeconds: 10
livenessProbe:
httpGet:
path: /health
port: 8081
initialDelaySeconds: 15
periodSeconds: 30
- name: dind - name: dind
image: docker:24-dind image: docker:24-dind
securityContext: securityContext:
@@ -50,62 +72,47 @@ spec:
mountPath: /var/run mountPath: /var/run
- name: dind-storage - name: dind-storage
mountPath: /var/lib/docker mountPath: /var/lib/docker
resources: readinessProbe:
requests: exec:
cpu: "500m"
memory: "512Mi"
limits:
cpu: "1"
memory: "1Gi"
- name: wings
image: ghcr.io/pelican-dev/wings:latest
command: command:
- /bin/sh - sh
- -c - -c
- | - '[ -S /var/run/docker.sock ]'
export DOCKER_HOST=tcp://localhost:2375 initialDelaySeconds: 5
exec wings periodSeconds: 5
env:
- name: DOCKER_HOST
value: tcp://localhost:2375
- name: WATCHDOG_ENABLED
value: "true"
volumeMounts:
- name: wings-config
mountPath: /etc/pterodactyl
readOnly: true
- name: docker-socket
mountPath: /var/run/docker.sock
- name: server-data
mountPath: /mnt/server
resources:
requests:
cpu: "1"
memory: "2Gi"
limits:
cpu: "4"
memory: "8Gi"
- name: game-autostart - name: game-autostart
image: curlimages/curl:latest image: curlimages/curl:latest
env:
- name: PELICAN_API_KEY
valueFrom:
secretKeyRef:
name: pelican-autostart-key
key: api_key
- name: SERVER_UUID
value: "9d09e83d-00c3-4404-07c0522a6c25"
command: command:
- /bin/sh - /bin/sh
- -c - -c
- | - |
echo "Waiting for Wings API to be ready..."
while ! curl -sf http://localhost:8081/ready; do
sleep 2
done
echo "Wings ready. Starting game server..."
while true; do while true; do
sleep 60 sleep 60
curl -sf -X POST "https://pelican.khalisio.com/api/client/servers/9d09e83d-00c3-4404-8f81-07c0522a6c25/power" \ echo "Checking game server status..."
-H "Authorization: Bearer $(cat /etc/secrets/autostart/api_key)" \
-H "Content-Type: application/json" \
-d '{"signal":"start"}' > /dev/null 2>&1 || true
done done
volumeMounts: volumeMounts:
- name: autostart-token - name: server-data
mountPath: /etc/secrets/autostart mountPath: /mnt/server
readOnly: true volumes:
resources: - name: docker-socket
requests: emptyDir: {}
cpu: "50m" - name: dind-storage
memory: "64Mi" emptyDir: {}
limits: - name: wings-data
cpu: "100m" emptyDir: {}
memory: "128Mi" - name: server-data
persistentVolumeClaim:
claimName: wings-valheim-data
@@ -1,18 +0,0 @@
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: wings-valheim-config
namespace: game-servers
spec:
refreshInterval: 1h
secretStoreRef:
name: orion-vault
kind: ClusterSecretStore
target:
name: wings-valheim-config
creationPolicy: Owner
data:
- secretKey: config.yml
remoteRef:
key: Talos Cluster/wings/valheim
property: config
@@ -1,12 +1,12 @@
apiVersion: v1 apiVersion: v1
kind: PersistentVolumeClaim kind: PersistentVolumeClaim
metadata: metadata:
name: wings-valheim-data name: media-data
namespace: game-servers namespace: media
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteMany
storageClassName: longhorn storageClassName: longhorn
resources: resources:
requests: requests:
storage: 100Gi storage: 500Gi
@@ -9,5 +9,4 @@ spec:
storageClassName: longhorn storageClassName: longhorn
resources: resources:
requests: requests:
storage: 3Ti storage: 500Gi
@@ -1,7 +0,0 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: transmission-config
namespace: media
data:
peer-port: "0"
@@ -1,85 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: transmission
namespace: media
labels:
app: transmission
spec:
replicas: 1
selector:
matchLabels:
app: transmission
template:
metadata:
labels:
app: transmission
spec:
containers:
- name: gluetun
image: ghcr.io/qmcgaw/gluetun:v3.40.0
env:
- name: OPENVPN_PROVIDER
value: "PROTONVPN"
- name: OPENVPN_USERNAME
valueFrom:
secretKeyRef:
name: transmission-vpn-secret
key: username
- name: OPENVPN_PASSWORD
valueFrom:
secretKeyRef:
name: transmission-vpn-secret
key: password
- name: SERVER_COUNTRIES
value: "US"
- name: FIREWALL_ENABLED
value: "off"
- name: DOT_ENABLED
value: "true"
ports:
- name: http
containerPort: 8000
volumeMounts:
- name: config
mountPath: /config
- name: transmission
image: lscr.io/linuxserver/transmission:latest
env:
- name: PUID
value: "1000"
- name: PGID
value: "1000"
- name: TZ
value: "America/New_York"
- name: USER
value: "admin"
- name: PASS
value: "admin"
- name: TRANSMISSION_WEB_HOME
value: "/combui"
- name: PEER_PORT
valueFrom:
configMapKeyRef:
name: transmission-config
key: peer-port
ports:
- name: http
containerPort: 9091
- name: peer
containerPort: 0
protocol: TCP
- name: peer-udp
containerPort: 0
protocol: UDP
volumeMounts:
- name: config
mountPath: /config
- name: downloads
mountPath: /downloads
volumes:
- name: config
emptyDir: {}
- name: downloads
persistentVolumeClaim:
claimName: media-data
@@ -1,13 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: transmission
namespace: media
spec:
selector:
app: transmission
ports:
- name: http
port: 9091
targetPort: http
type: ClusterIP
-12
View File
@@ -1,12 +0,0 @@
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: pelican-panel-tls
namespace: pelican
spec:
secretName: pelican-panel-tls
issuerRef:
name: letsencrypt-prod
kind: ClusterIssuer
dnsNames:
- pelican.khalisio.com
+22 -15
View File
@@ -8,9 +8,12 @@ metadata:
app.kubernetes.io/component: panel app.kubernetes.io/component: panel
app.kubernetes.io/managed-by: orion app.kubernetes.io/managed-by: orion
spec: spec:
replicas: 1 replicas: 2
strategy: strategy:
type: Recreate type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector: selector:
matchLabels: matchLabels:
app.kubernetes.io/name: pelican app.kubernetes.io/name: pelican
@@ -21,19 +24,12 @@ spec:
app.kubernetes.io/name: pelican app.kubernetes.io/name: pelican
app.kubernetes.io/component: panel app.kubernetes.io/component: panel
spec: spec:
initContainers:
- name: fix-perms
image: busybox
command: ["sh", "-c", "chown -R 82:82 /pelican-data && chmod -R 770 /pelican-data"]
volumeMounts:
- name: data
mountPath: /pelican-data
containers: containers:
- name: panel - name: panel
image: ghcr.io/pelican-dev/panel:latest image: ghcr.io/pelican-dev/panel:latest
ports: ports:
- name: http - name: http
containerPort: 80 containerPort: 8080
protocol: TCP protocol: TCP
env: env:
- name: APP_ENV - name: APP_ENV
@@ -42,10 +38,6 @@ spec:
value: "Pelican" value: "Pelican"
- name: APP_URL - name: APP_URL
value: "https://pelican.khalisio.com" value: "https://pelican.khalisio.com"
- name: BEHIND_PROXY
value: "true"
- name: DB_CONNECTION
value: pgsql
- name: DB_HOST - name: DB_HOST
value: postgres.pelican.svc.cluster.local value: postgres.pelican.svc.cluster.local
- name: DB_PORT - name: DB_PORT
@@ -93,8 +85,23 @@ spec:
value: file value: file
volumeMounts: volumeMounts:
- name: data - name: data
mountPath: /pelican-data mountPath: /var/www/app/storage
- name: logs
mountPath: /var/www/app/storage/logs
- name: uploads
mountPath: /var/www/app/public/uploads
- name: pufferpanel
mountPath: /var/www/app/storage/pufferpanel
volumes: volumes:
- name: data - name: data
persistentVolumeClaim: persistentVolumeClaim:
claimName: pelican-data claimName: pelican-data
- name: logs
persistentVolumeClaim:
claimName: pelican-logs
- name: uploads
persistentVolumeClaim:
claimName: pelican-data
- name: pufferpanel
persistentVolumeClaim:
claimName: pelican-data
+4 -7
View File
@@ -1,26 +1,23 @@
apiVersion: external-secrets.io/v1 apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret kind: ExternalSecret
metadata: metadata:
name: pelican-panel-app name: pelican-panel-app
namespace: pelican namespace: pelican
spec: spec:
refreshInterval: 1h refreshInterval: 1h
secretStoreRef:
name: orion-vault
kind: ClusterSecretStore
target: target:
name: pelican-panel-app name: pelican-panel-app
creationPolicy: Owner creationPolicy: Owner
data: data:
- secretKey: APP_KEY - secretKey: APP_KEY
remoteRef: remoteRef:
key: Talos Cluster/pelican/panel/app key: secret/data/Talos Cluster/pelican/panel/app
property: APP_KEY property: APP_KEY
- secretKey: SESSION_SECURE - secretKey: SESSION_SECURE
remoteRef: remoteRef:
key: Talos Cluster/pelican/panel/app key: secret/data/Talos Cluster/pelican/panel/app
property: SESSION_SECURE property: SESSION_SECURE
- secretKey: OAUTH_CLIENT_SECRET - secretKey: OAUTH_CLIENT_SECRET
remoteRef: remoteRef:
key: Talos Cluster/pelican/panel/app key: secret/data/Talos Cluster/pelican/panel/app
property: OAUTH_CLIENT_SECRET property: OAUTH_CLIENT_SECRET
@@ -1,18 +1,15 @@
apiVersion: external-secrets.io/v1 apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret kind: ExternalSecret
metadata: metadata:
name: pelican-autostart-key name: pelican-autostart-key
namespace: pelican namespace: pelican
spec: spec:
refreshInterval: 1h refreshInterval: 1h
secretStoreRef:
name: orion-vault
kind: ClusterSecretStore
target: target:
name: pelican-autostart-key name: pelican-autostart-key
creationPolicy: Owner creationPolicy: Owner
data: data:
- secretKey: api_key - secretKey: api_key
remoteRef: remoteRef:
key: Talos Cluster/pelican/panel/autostart key: secret/data/Talos Cluster/pelican/panel/autostart
property: api_key property: api_key
+3 -6
View File
@@ -1,22 +1,19 @@
apiVersion: external-secrets.io/v1 apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret kind: ExternalSecret
metadata: metadata:
name: pelican-panel-db name: pelican-panel-db
namespace: pelican namespace: pelican
spec: spec:
refreshInterval: 1h refreshInterval: 1h
secretStoreRef:
name: orion-vault
kind: ClusterSecretStore
target: target:
name: pelican-panel-db name: pelican-panel-db
creationPolicy: Owner creationPolicy: Owner
data: data:
- secretKey: DB_PASSWORD - secretKey: DB_PASSWORD
remoteRef: remoteRef:
key: Talos Cluster/pelican/panel/db key: secret/data/Talos Cluster/pelican/panel/db
property: DB_PASSWORD property: DB_PASSWORD
- secretKey: DB_USER - secretKey: DB_USER
remoteRef: remoteRef:
key: Talos Cluster/pelican/panel/db key: secret/data/Talos Cluster/pelican/panel/db
property: DB_USER property: DB_USER
+1 -2
View File
@@ -1,4 +1,4 @@
apiVersion: traefik.io/v1alpha1 apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute kind: IngressRoute
metadata: metadata:
name: pelican-panel name: pelican-panel
@@ -17,4 +17,3 @@ spec:
- name: pelican-panel - name: pelican-panel
port: 80 port: 80
scheme: http scheme: http
-82
View File
@@ -1,82 +0,0 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgres-data
namespace: pelican
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 10Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
namespace: pelican
labels:
app.kubernetes.io/name: postgres
app.kubernetes.io/component: database
app.kubernetes.io/managed-by: orion
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app.kubernetes.io/name: postgres
app.kubernetes.io/component: database
template:
metadata:
labels:
app.kubernetes.io/name: postgres
app.kubernetes.io/component: database
spec:
containers:
- name: postgres
image: postgres:16
ports:
- containerPort: 5432
protocol: TCP
env:
- name: POSTGRES_DB
value: pelican
- name: POSTGRES_USER
valueFrom:
secretKeyRef:
name: pelican-panel-db
key: DB_USER
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: pelican-panel-db
key: DB_PASSWORD
- name: PGDATA
value: /var/lib/postgresql/data/pgdata
volumeMounts:
- name: data
mountPath: /var/lib/postgresql/data
volumes:
- name: data
persistentVolumeClaim:
claimName: postgres-data
---
apiVersion: v1
kind: Service
metadata:
name: postgres
namespace: pelican
labels:
app.kubernetes.io/name: postgres
app.kubernetes.io/component: database
spec:
type: ClusterIP
selector:
app.kubernetes.io/name: postgres
app.kubernetes.io/component: database
ports:
- port: 5432
targetPort: 5432
protocol: TCP
+1 -1
View File
@@ -14,5 +14,5 @@ spec:
ports: ports:
- name: http - name: http
port: 80 port: 80
targetPort: 80 targetPort: 8080
protocol: TCP protocol: TCP