---
apiVersion: v1
kind: Namespace
metadata:
  name: istio-project-1
  labels:
    istio-injection: enabled #zorgt voor auto sidecar injection
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: server-a
  namespace: istio-project-1
spec:
  replicas: 1
  selector:
    matchLabels:
      server: "http"
      app: "project-1" #app label bepaald groepering pods in kiali dashboard dus makkelijker te gebruiken
      expose: "true"
  template:
    metadata:
      labels:
        server: "http"
        app: "project-1"
        expose: "true"
    spec:
      containers:
        - name: front-end
          image: beppev/server-a:latest
          ports:
            - containerPort: 5000
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: server-b
  namespace: istio-project-1
spec:
  replicas: 1
  selector:
    matchLabels:
      server: "http"
      app: "project-1"
      version: v1
      backend: "true"
  template:
    metadata:
      labels:
        server: "http"
        app: "project-1"
        version: v1
        backend: "true"
    spec:
      containers:
        - name: front-end
          image: beppev/server-b:latest
          ports:
            - containerPort: 6000
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: server-c
  namespace: istio-project-1
spec:
  replicas: 1
  selector:
    matchLabels:
      server: "http"
      app: "project-1"
      version: v2
      backend: "true" 
  template:
    metadata:
      labels:
        server: "http"
        app: "project-1"
        version: v2
        backend: "true"
    spec:
      containers:
        - name: front-end
          image: beppev/server-c:latest
          ports:
            - containerPort: 6000
---
apiVersion: v1
kind: Service
metadata:
  name: server-check
  namespace: istio-project-1
  labels:
    app: "project-1"
spec:
  selector:
    backend: "true"
  ports:
    - name: http
      protocol: TCP
      port: 6000
---
kind: Service
apiVersion: v1
metadata:
  name: expose-server-a
  namespace: istio-project-1
  labels:
    app: "project-1"
spec:
    selector:
        expose: "true"
    ports:
        - name: http
          protocol: TCP
          targetPort: 5000
          port: 80
    type: LoadBalancer
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: server-check-destination
  namespace: istio-project-1
  labels:
    app: "project-1"
spec:
  host: server-check
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
---
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: server-check-gateway
  namespace: istio-project-1
  labels:
    app: "project-1"
spec:
  selector:
    expose: "true"
  servers:
    - port:
        number: 6000
        name: http
        protocol: HTTP
      hosts:
        - "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: server-check-service
  namespace: istio-project-1
  labels:
    app: "project-1"
spec:
  hosts:
    - "*"
  gateways:
    - server-check-gateway
  tcp:
  - match:
    - port: 6000
    route:
    - destination:
        host: server-check
        port:
          number: 6000
        subset: v1
      weight: 50
    - destination:
        host: server-check
        port:
          number: 6000
        subset: v2
      weight: 50
