Ricerca nel sito web

Come creare un servizio in Kubernetes


Su questa pagina

  1. Prerequisiti
  2. Cosa faremo
  3. Crea un servizio
  4. 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:

  1. ClusterIP:
    Espone il servizio all'interno del cluster Kubernetes. Questo servizio è raggiungibile solo dall'interno del cluster. Non è possibile accedervi dall'esterno del cluster.
  2. NodePort:
    Esporrà il servizio su una porta statica sul nodo distribuito. È possibile accedere a questo servizio dall'esterno del cluster utilizzando NodeIP:Nodeport.
  3. Bilanciatore del carico:
     espone il servizio all'esterno utilizzando un bilanciatore del carico del provider cloud, questo crea un IP pubblico sul provider cloud
  4. 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

  1. 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

  1. 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.