Come creare un servizio in Kubernetes
Su questa pagina
- Prerequisiti
- Cosa faremo
- Crea un servizio
- Conclusione
Un servizio è un livello di astrazione sui pod. Definisce un set logico di pod. Fornisce un unico indirizzo IP e nome DNS con cui è possibile accedere ai pod. Viene utilizzato per esporre i baccelli.
Esistono 3 diversi tipi di servizi in Kubernetes:
- ClusterIP:
Espone il servizio all'interno del cluster Kubernetes. Questo servizio è raggiungibile solo dall'interno del cluster. Non è possibile accedervi dall'esterno del cluster. - NodePort:
Esporrà il servizio su una porta statica sul nodo distribuito. È possibile accedere a questo servizio dall'esterno del cluster utilizzando NodeIP:Nodeport. - Bilanciatore del carico:
espone il servizio all'esterno utilizzando un bilanciatore del carico del provider cloud, questo crea un IP pubblico sul provider cloud - ExternalName:
associa il servizio ai contenuti del campo externalName restituendo un record CNAME
Fai clic qui per saperne di più sul servizio Kubernetes.
In questo articolo vedremo i passaggi per creare un Serice di tipo NodePort.
Prerequisiti
- Cluster Kubernetes con almeno 1 nodo di lavoro.
Se vuoi imparare a creare un cluster Kubernetes, fai clic qui. Questa guida ti aiuterà a creare un cluster Kubernetes con 1 master e 2 nodi su istanze AWS Ubuntu EC2.
Cosa faremo
- Crea un servizio
Crea un servizio
Innanzitutto, creeremo un deployment utilizzando la seguente definizione a cui il servizio reindirizzerà tutte le richieste che gli arrivano.
Crea un nuovo file e aggiungi il seguente contenuto, questo creerà una distribuzione per Nginx.
vim my-deployment.yml
apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: strategy: type: Recreate selector: matchLabels: app: nginx replicas: 3 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80
Per creare una distribuzione, esegui il seguente comando.
kubectl create -f my-deployment.yml
Questo creerà una distribuzione per Nginx con 3 repliche.
È possibile ottenere i dettagli di distribuzione, replicaset e pod utilizzando i seguenti comandi.
kubectl get deployment | grep nginx
kubectl get replicaset | grep nginx
kubectl get pod | grep nginx
Nello screenshot sopra, puoi vedere che sono state create 3 repliche di Nginx.
Ora, crea una definizione del servizio utilizzando il seguente contenuto.
vim my-service.yml
apiVersion: v1 kind: Service metadata: name: nginx namespace: default labels: app: nginx spec: externalTrafficPolicy: Local ports: - name: http port: 80 protocol: TCP targetPort: 80 selector:
app: nginx type: NodePort
La definizione del servizio precedente creerà un servizio di tipo NodePort utilizzando lo spazio dei nomi predefinito e reindirizzerà le richieste al pod corrispondente all'etichetta nginx, ovvero i pod che abbiamo creato utilizzando la precedente fase di creazione della distribuzione.
Eseguire il seguente comando per creare un servizio.
kubectl create -f my-service.yml
Ottenere i dettagli del servizio e verificare la NodePort su cui sarà disponibile il servizio.
kubectl get service | grep nginx
kubectl describe service nginx
Nello screenshot sopra, si può vedere che il servizio è disponibile sulla porta 30747. Questo può essere diverso per te poiché la porta viene assegnata in modo casuale dall'intervallo disponibile.
Ora è possibile accedere all'applicazione nginx tramite questo servizio su NodeIp:NodePort
Ecco: 106.210.138.189:30747
Conclusione
In questo articolo, abbiamo creato una distribuzione per Nginx con 3 repliche e creato un servizio di tipo NodePort. Abbiamo visto come è possibile accedere all'applicazione Nginx creata utilizzando il deployment su NodeIP:Port.