Solution TP 4

/images/k8s.jpeg

TP4 : Backend

🇫🇷 Version Française

Deployment

Manifest du deployment :

 1kind: Deployment
 2apiVersion: apps/v1
 3metadata:
 4  name: back-training-app
 5spec:
 6  replicas: 2
 7  selector:
 8    matchLabels:
 9      app: back-training-app
10  template:
11    metadata:
12      labels:
13        app: back-training-app
14    spec:
15      containers:
16        - name: back-training-app
17          image: axelpereira/k8s-training-test-app-back:1.0
18          imagePullPolicy: IfNotPresent
19          env:
20            - name: MONGO_HOSTNAME
21              value: mongo.form-k8s.svc.cluster.local
22            - name: MONGO_PORT
23              value: '27017'
24            - name: MONGO_DB
25              value: training

Service

Manifest du service :

 1kind: Service
 2apiVersion: v1
 3metadata:
 4  name: back-training-app
 5spec:
 6  ports:
 7    - port: 80
 8      targetPort: 5000
 9  selector:
10    app: back-training-app

Ingress applciatif

Deux façons de faire :

Première façon : Deux routes dans le même ingress, possible mais pas facile à faire évoluer.

 1apiVersion: networking.k8s.io/v1
 2kind: Ingress
 3metadata:
 4  name: app-ingress
 5  annotations:
 6    nginx.ingress.kubernetes.io/rewrite-target: /$1
 7spec:
 8  rules:
 9    - http:
10        paths:
11          - path: /(.*)
12            pathType: ImplementationSpecific
13            backend:
14              service:
15                name: front-training-app
16                port:
17                  number: 80
18          - path: /api/(.*)
19            pathType: ImplementationSpecific
20            backend:
21              service:
22                name: back-training-app
23                port:
24                  number: 80

Deuxième façon : deux ingress, permet de découper et de customizé plus facilement les régles à définir (utile pour la suite), la bonne pratique est de respecter cette solution car le front n’a pour l’instant pas besoin d’un “rewrite-target”.

 1apiVersion: networking.k8s.io/v1
 2kind: Ingress
 3metadata:
 4  name: app-ingress-front
 5spec:
 6  rules:
 7    - http:
 8        paths:
 9          - path: /
10            pathType: Prefix
11            backend:
12              service:
13                name: front-training-app
14                port:
15                  number: 80
16
17---
18apiVersion: networking.k8s.io/v1
19kind: Ingress
20metadata:
21  name: app-ingress-back
22  annotations:
23    nginx.ingress.kubernetes.io/rewrite-target: /$1
24spec:
25  rules:
26    - http:
27        paths:
28          - path: /api/(.*)
29            pathType: ImplementationSpecific
30            backend:
31              service:
32                name: back-training-app
33                port:
34                  number: 80
🇬🇧 English version

Deployment

Deployment manifest :

 1kind: Deployment
 2apiVersion: apps/v1
 3metadata:
 4  name: back-training-app
 5spec:
 6  replicas: 2
 7  selector:
 8    matchLabels:
 9      app: back-training-app
10  template:
11    metadata:
12      labels:
13        app: back-training-app
14    spec:
15      containers:
16        - name: back-training-app
17          image: axelpereira/k8s-training-test-app-back:1.0
18          imagePullPolicy: IfNotPresent
19          env:
20            - name: MONGO_HOSTNAME
21              value: mongo.form-k8s.svc.cluster.local
22            - name: MONGO_PORT
23              value: '27017'
24            - name: MONGO_DB
25              value: training

Service

Service manifest :

 1kind: Service
 2apiVersion: v1
 3metadata:
 4  name: back-training-app
 5spec:
 6  ports:
 7    - port: 80
 8      targetPort: 5000
 9  selector:
10    app: back-training-app

Ingress applciatif

Two ways to do :

First way : Two paths in the same ingress, possible but difficult to maintain.

 1apiVersion: networking.k8s.io/v1
 2kind: Ingress
 3metadata:
 4  name: app-ingress
 5  annotations:
 6    nginx.ingress.kubernetes.io/rewrite-target: /$1
 7spec:
 8  rules:
 9    - http:
10        paths:
11          - path: /(.*)
12            pathType: ImplementationSpecific
13            backend:
14              service:
15                name: front-training-app
16                port:
17                  number: 80
18          - path: /api/(.*)
19            pathType: ImplementationSpecific
20            backend:
21              service:
22                name: back-training-app
23                port:
24                  number: 80

Second way: two ingress, makes it easier to cut and customize the rules to be defined (useful for the future), the good practice is to respect this solution because the front does not currently need a “rewrite -target”.

 1apiVersion: networking.k8s.io/v1
 2kind: Ingress
 3metadata:
 4  name: app-ingress-front
 5spec:
 6  rules:
 7    - http:
 8        paths:
 9          - path: /
10            pathType: Prefix
11            backend:
12              service:
13                name: front-training-app
14                port:
15                  number: 80
16
17---
18apiVersion: networking.k8s.io/v1
19kind: Ingress
20metadata:
21  name: app-ingress-back
22  annotations:
23    nginx.ingress.kubernetes.io/rewrite-target: /$1
24spec:
25  rules:
26    - http:
27        paths:
28          - path: /api/(.*)
29            pathType: ImplementationSpecific
30            backend:
31              service:
32                name: back-training-app
33                port:
34                  number: 80

Latest Posts