Skip to main content

Risposte esame finale

Ottenere l'ip della macchina kubernetes

L'ip della macchina kubernetes può essere ottenuta tramite il comando minikube ip.

In questo caso, il risultato è 172.24.48.234.

Di conseguenza il dns di riferimento è 172.24.48.234.nip.io.

Analisi del file di deploy

Il file di deploy una volta modificato il dns dell'ingress è il seguente:

---

apiVersion: v1
kind: Namespace
metadata:
name: myingress-test

---

apiVersion: v1
kind: ConfigMap
metadata:
name: docroot
namespace: myingress-test
data:
index.html: |
This is my Ingress/nginx test
Good job!

---

apiVersion: v1
kind: Pod
metadata:
labels:
app: nginx
name: mywebserver
namespace: myingress-test
spec:
containers:
- name: nginx
image: nginx:latest
volumeMounts:
- name: docroot
mountPath: "/usr/share/nginx/html"
volumes:
- name: docroot
configMap:
name: docroot
items:
- key: "index.html"
path: "index.html"

---

apiVersion: v1
kind: Service
metadata:
name: mywebserver-svc
namespace: myingress-test
spec:
ports:
- name: 80-80
port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: ClusterIP

---

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: mywebserver-ingress
namespace: myingress-test
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- host: 172.24.48.234.nip.io
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: mywebserver-svc
port:
number: 80

La prima parte di istruzione serve a creare un Namespace (utilizzato per suddividere le risorse) di nome myingress-test.

La seconda parte di deploy serve a creare una ConfigMap, ovvero un oggetto in cui è possibile inserire delle proprietà di configurazione (o file) tramite associazione chiave-valore.

Nel nostro caso, indichiamo alla ConfigMap di tenere una proprietà emulando un file denominato index.html e con contenuto This is my Ingress/nginx test Good job!.

La terza parte di deploy consiste nella creazione di un Pod ovvero la rappresentazione della composizione della nostra applicazione che vogliamo eseguire. Il Pod può comporsi di uno o più container.

Nel nostro viene caso, il pod ha una label identificativa app:nginx e vengono creati due elementi nel pod:

  • Un container con immagine nginx:latest a cui viene montato il volume docroot con path /usr/share/nginx/html
  • Un volume docroot associato alla ConfigMap di nome docroot

La quarta parte di deploy consiste nella creazione di un Service ovvero un oggetto che tramite un selettore label, raggruppa più pod definendo un modo per contattarli sulla rete in maniera bilanciata, esponendo se necessario delle porte tcp/udp.

Nel nostro caso, viene creato un servizio con selettore app:nginx per esporre la porta 80:80 in modalità ClusterIP.

La quinta e ultima parte di deploy consiste nella creazione di un Ingress ovvero un oggetto che consente di esporre all'esterno del cluster kubernetes uno o più servizi secondo una serie di regole.

Nel nostro caso, viene creato un ingress di tipo HTTP che risponde a http://172.24.48.234.nip.io/ associandolo al servizio creato precedentemente sulla porta 80.

Deploy del file

Per fare il deploy è sufficiente eseguire il comando kubectl create -f esame.yaml.

L'output del comando è il seguente:

namespace/myingress-test created
configmap/docroot created
pod/mywebserver created
service/mywebserver-svc created
ingress.networking.k8s.io/mywebserver-ingress created

Verifica delle risorse create (Which resources have been created?)

Dato per assodato che il namespace myingress-test sia stato creato correttamente, possiamo verificare l'esistenza di ConfigMap, Pod, Service e Ingress tramite il seguente comando:

kubectl -n myingress-test get pod,svc,ingress,cm o kubectl -n myingress-test get all,ingress,cm.

N.B: da questo comando non è possibile visualizzare l'elenco dei volumi dei creati dai pod

L'output che otteniamo è il seguente:

NAME              READY   STATUS    RESTARTS   AGE
pod/mywebserver 1/1 Running 0 12m

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/mywebserver-svc ClusterIP 10.106.226.88 <none> 80/TCP 12m

NAME CLASS HOSTS ADDRESS PORTS AGE
ingress.networking.k8s.io/mywebserver-ingress nginx 172.24.48.234.nip.io 172.24.48.234 80 12m

NAME DATA AGE
configmap/docroot 1 12m
configmap/kube-root-ca.crt 1 12m

L'output ci da la conferma che tutte le risorse sono state create.

Output del servizio nginx ingress esposto (What is the output of the exposed service?)

Eseguendo il comando curl http://172.24.48.234.nip.io/ otteniamo come risposta:

StatusCode        : 200
StatusDescription : OK
Content : This is my Ingress/nginx test
Good job!

RawContent : HTTP/1.1 200 OK
Connection: keep-alive
Accept-Ranges: bytes
Content-Length: 40
Content-Type: text/html
Date: Sat, 25 Feb 2023 16:31:02 GMT
ETag: "63fa3088-28"
Last-Modified: Sat, 25 Feb 2023 16...
Forms :
Headers : {[Connection, keep-alive], [Accept-Ranges, bytes], [Content-Length, 40], [Content-Type, text/html]...}
Images : {}
InputFields : {}
Links : {}
ParsedHtml :
RawContentLength : 40