apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: yas-ingress spec: ingressClassName: nginx rules: - host: api.yas.local http: paths: - path: /swagger-ui pathType: Prefix backend: service: name: swagger-ui port: number: 80 - path: /media pathType: Prefix backend: service: name: media port: number: 80 - path: /product pathType: Prefix backend: service: name: product port: number: 80 - host: storefront http: paths: - path: / pathType: Prefix backend: service: name: storefront port: number: 80 - host: backoffice http: paths: - path: / pathType: Prefix backend: service: name: backoffice port: number: 80 - host: identity http: paths: - path: / pathType: Prefix backend: service: name: identity port: number: 80 - host: pgadmin.yas.local http: paths: - path: / pathType: Prefix backend: service: name: pgadmin port: number: 80 - host: jaeger http: paths: - path: / pathType: Prefix backend: service: name: jaeger port: number: 80 --- apiVersion: v1 kind: Service metadata: name: storefront labels: app: storefront spec: selector: app: storefront ports: - name: http port: 80 targetPort: 80 --- apiVersion: v1 kind: Service metadata: name: backoffice labels: app: backoffice spec: selector: app: backoffice ports: - name: http port: 80 targetPort: 80 --- apiVersion: v1 kind: Service metadata: name: swagger-ui labels: app: swagger-ui spec: selector: app: swagger-ui ports: - name: http port: 80 targetPort: 8080 --- apiVersion: v1 kind: Service metadata: name: media labels: app: media spec: selector: app: media ports: - name: http port: 80 --- apiVersion: v1 kind: Service metadata: name: product labels: app: product spec: selector: app: product ports: - name: http port: 80 --- apiVersion: apps/v1 kind: Deployment metadata: name: storefront spec: minReadySeconds: 30 selector: matchLabels: app: storefront replicas: 1 template: metadata: labels: app: storefront spec: containers: - name: storefront-bff image: ghcr.io/nashtech-garage/yas-storefront-bff:latest env: - name: SERVER_PORT value: "80" - name: SPRING_PROFILES_ACTIVE value: "prod" - name: SPRING_SLEUTH_OTEL_EXPORTER_OTLP_ENDPOINT value: http://jaeger:4317 ports: - name: http containerPort: 80 - name: storefront image: ghcr.io/nashtech-garage/yas-storefront:latest ports: - name: http containerPort: 3000 --- apiVersion: apps/v1 kind: Deployment metadata: name: backoffice spec: minReadySeconds: 30 selector: matchLabels: app: backoffice replicas: 1 template: metadata: labels: app: backoffice spec: containers: - name: backoffice-bff image: ghcr.io/nashtech-garage/yas-backoffice-bff:latest env: - name: SERVER_PORT value: "80" - name: SPRING_PROFILES_ACTIVE value: "prod" - name: SPRING_SLEUTH_OTEL_EXPORTER_OTLP_ENDPOINT value: http://jaeger:4317 ports: - name: http containerPort: 80 - name: backoffice image: ghcr.io/nashtech-garage/yas-backoffice:latest ports: - name: http containerPort: 3000 --- apiVersion: apps/v1 kind: Deployment metadata: name: swagger-ui spec: selector: matchLabels: app: swagger-ui replicas: 1 template: metadata: labels: app: swagger-ui spec: containers: - name: swagger-ui image: swaggerapi/swagger-ui env: - name: BASE_URL value: "/swagger-ui" - name: URLS value: "[{ url: 'http://api.yas.local/product/v3/api-docs', name: 'Product' },{ url: 'http://api.yas.local/media/v3/api-docs', name: 'Media' }]" - name: OAUTH_CLIENT_ID value: "swagger-ui" - name: OAUTH_USE_PKCE value: "true" ports: - name: http containerPort: 8080 --- apiVersion: apps/v1 kind: Deployment metadata: name: media spec: minReadySeconds: 30 selector: matchLabels: app: media replicas: 1 template: metadata: labels: app: media spec: containers: - name: media image: ghcr.io/nashtech-garage/yas-media:latest env: - name: SPRING_DATASOURCE_URL value: "jdbc:postgresql://postgres:5432/media" - name: SERVER_SERVLET_CONTEXT_PATH # a hacky way to fix sub path behind nginx value: "/media" - name: YAS_PUBLICURL value: "http://api.yas.local/media" - name: SERVER_PORT value: "80" - name: SPRING_SLEUTH_OTEL_EXPORTER_OTLP_ENDPOINT value: http://jaeger:4317 ports: - name: http containerPort: 80 --- apiVersion: apps/v1 kind: Deployment metadata: name: product spec: minReadySeconds: 30 selector: matchLabels: app: product replicas: 1 template: metadata: labels: app: product spec: containers: - name: product image: ghcr.io/nashtech-garage/yas-product:latest env: - name: SPRING_DATASOURCE_URL value: "jdbc:postgresql://postgres:5432/product" - name: SERVER_SERVLET_CONTEXT_PATH value: "/product" - name: YAS_SERVICES_MEDIA value: "http://media/media" - name: SERVER_PORT value: "80" - name: SPRING_SLEUTH_OTEL_EXPORTER_OTLP_ENDPOINT value: http://jaeger:4317 ports: - name: http containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: identity labels: app: identity spec: ports: - name: http port: 80 targetPort: 8080 selector: app: keycloak --- apiVersion: apps/v1 kind: Deployment metadata: name: keycloak labels: app: keycloak spec: replicas: 1 selector: matchLabels: app: keycloak template: metadata: labels: app: keycloak spec: containers: - name: keycloak image: quay.io/keycloak/keycloak:16.1.0 env: - name: KEYCLOAK_USER value: "admin" - name: KEYCLOAK_PASSWORD value: "admin" - name: PROXY_ADDRESS_FORWARDING value: "true" - name: DB_VENDOR value: "POSTGRES" - name: DB_USER value: "admin" - name: DB_PASSWORD value: "admin" - name: DB_ADDR value: "postgres" - name: DB_DATABASE value: "keycloak" ports: - name: http containerPort: 8080 readinessProbe: httpGet: path: /auth/realms/master port: 8080 --- apiVersion: v1 kind: Service metadata: name: postgres labels: app: postgres spec: type: NodePort ports: - port: 5432 nodePort: 30007 selector: app: postgres --- apiVersion: v1 kind: Service metadata: name: pgadmin labels: app: pgadmin spec: ports: - name: http port: 80 selector: app: postgres --- apiVersion: apps/v1 kind: Deployment metadata: name: postgres labels: app: postgres spec: replicas: 1 selector: matchLabels: app: postgres template: metadata: labels: app: postgres spec: containers: - name: postgres image: postgres ports: - containerPort: 5432 env: - name: POSTGRES_USER value: "admin" - name: POSTGRES_PASSWORD value: "admin" volumeMounts: - mountPath: "/var/lib/postgresql/data" name: postgredb - name: pgadmin image: dpage/pgadmin4 ports: - containerPort: 80 env: - name: PGADMIN_DEFAULT_EMAIL value: admin@yas.com - name: PGADMIN_DEFAULT_PASSWORD value: "admin" volumeMounts: - mountPath: "/var/lib/pgadmin" name: pgadmin volumes: - name: postgredb persistentVolumeClaim: claimName: postgres-pv-claim - name: pgadmin persistentVolumeClaim: claimName: pgadmin-pv-claim --- apiVersion: v1 kind: Service metadata: name: jaeger labels: app: jaeger spec: type: NodePort ports: - name: web port: 80 targetPort: 16686 - name: otlpcollectorgprc port: 4317 nodePort: 30017 - name: otlpcollectorhttp port: 4318 nodePort: 30018 selector: app: jaeger --- apiVersion: apps/v1 kind: Deployment metadata: name: jaeger spec: minReadySeconds: 30 selector: matchLabels: app: jaeger replicas: 1 template: metadata: labels: app: jaeger spec: containers: - name: jaeger image: jaegertracing/all-in-one:1.36 env: - name: COLLECTOR_ZIPKIN_HOST_PORT value: "9411" - name: COLLECTOR_OTLP_ENABLED value: "true" ports: - containerPort: 6831 - containerPort: 6832 - containerPort: 5778 - containerPort: 16686 - containerPort: 4317 - containerPort: 4318 - containerPort: 14250 - containerPort: 14268 - containerPort: 14269 - containerPort: 9411 --- apiVersion: v1 kind: PersistentVolume metadata: name: postgres-pv-volume labels: type: local spec: storageClassName: local-storage volumeMode: Filesystem capacity: storage: 1Gi accessModes: - ReadWriteOnce local: path: "/run/desktop/mnt/host/c/k8s-yas-data/postgres" nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - docker-desktop --- apiVersion: v1 kind: PersistentVolume metadata: name: pgadmin-pv-volume labels: type: local spec: storageClassName: local-storage volumeMode: Filesystem capacity: storage: 1Gi accessModes: - ReadWriteOnce local: path: "/run/desktop/mnt/host/c/k8s-yas-data/pgadmin" nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - docker-desktop --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: postgres-pv-claim spec: storageClassName: local-storage accessModes: - ReadWriteOnce resources: requests: storage: 1Gi --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pgadmin-pv-claim spec: storageClassName: local-storage accessModes: - ReadWriteOnce resources: requests: storage: 1Gi --- apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: local-storage provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer