Configurazione dei nomi di dominio con indirizzi IP statici


Questo tutorial mostra come utilizzare Google Kubernetes Engine (GKE) per esporre la tua applicazione web a internet su un indirizzo IP esterno statico e configurare un nome di dominio che punti alla tua applicazione.

Questo tutorial presuppone che tu possieda un nome di dominio registrato, come example.com.

Obiettivi

Questo tutorial illustra i seguenti passaggi:

  • Prenota un indirizzo IP esterno statico per l'applicazione
  • Configura le risorse di servizio o in entrata in modo che utilizzino l'indirizzo IP statico
  • Aggiorna i record DNS del tuo nome di dominio in modo che puntino alla tua applicazione

Costi

In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud possono essere idonei a una prova senza costi aggiuntivi.

Una volta completate le attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la pagina Pulizia.

Prima di iniziare

Segui questi passaggi per abilitare l'API Kubernetes Engine:
  1. Visita la pagina Kubernetes Engine nella console Google Cloud.
  2. Crea o seleziona un progetto.
  3. Attendi che l'API e i servizi correlati siano abilitati. Questa operazione può richiedere diversi minuti.
  4. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

Installa i seguenti strumenti a riga di comando utilizzati in questo tutorial:

  • gcloud viene utilizzato per creare ed eliminare cluster Kubernetes Engine. gcloud è incluso nell'interfaccia a riga di comando gcloud.
  • kubectl viene utilizzato per gestire Kubernetes, il sistema di orchestrazione dei cluster utilizzato da Kubernetes Engine. Puoi installare kubectl utilizzando gcloud:
    gcloud components install kubectl

Clona il codice di esempio da GitHub:

git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
cd kubernetes-engine-samples/quickstarts/hello-app/manifests

Configura i valori predefiniti per lo strumento a riga di comando gcloud

Per risparmiare tempo nella digitazione delle opzioni dell'ID progetto e della zona di Compute Engine nello strumento a riga di comando gcloud, puoi configurare i valori predefiniti:
gcloud config set project project-id
gcloud config set compute/zone compute-zone

Crea un cluster

Crea un cluster:

gcloud container clusters create-auto domain-test

Esegui il deployment dell'applicazione web

Il seguente manifest descrive un deployment che esegue un'immagine container di applicazione web di esempio:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: helloweb
  labels:
    app: hello
spec:
  selector:
    matchLabels:
      app: hello
      tier: web
  template:
    metadata:
      labels:
        app: hello
        tier: web
    spec:
      containers:
      - name: hello-app
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
        ports:
        - containerPort: 8080
        resources:
          requests:
            cpu: 200m

Crea il deployment:

kubectl apply -f helloweb-deployment.yaml

Esponi l'applicazione

Puoi esporre la tua applicazione su GKE utilizzando uno dei seguenti metodi:

Per saperne di più sui vantaggi e sugli svantaggi di ogni metodo, consulta Configurazione di un bilanciatore del carico delle applicazioni esterno con Ingress.

Utilizza un servizio

Per assicurarti che l'applicazione abbia un indirizzo IP esterno statico, devi prenotare un indirizzo IP statico.

Se scegli di esporre l'applicazione utilizzando un servizio, devi creare un indirizzo IP a livello di regione. Gli indirizzi IP globali funzionano solo con il tipo di risorsa in entrata, come spiegato nella prossima sezione.

Per utilizzare un servizio, crea un indirizzo IP statico denominato helloweb-ip nella regione us-central1:

gcloud

gcloud compute addresses create helloweb-ip --region us-central1

Trova l'indirizzo IP statico che hai creato:

gcloud compute addresses describe helloweb-ip --region us-central1

L'output è simile al seguente:

...
address: 203.0.113.32
...

Config Connector

Nota: questo passaggio richiede Config Connector. Segui le istruzioni di installazione per installare Config Connector sul tuo cluster.

apiVersion: compute.cnrm.cloud.google.com/v1beta1
kind: ComputeAddress
metadata:
  name: helloweb-ip
spec:
  location: us-central1

Salva il manifest come compute-address-regional.yaml.

Applica il manifest al tuo cluster:

  kubectl apply -f compute-address-regional.yaml

Trova l'indirizzo IP statico che hai creato:

  kubectl get computeaddress helloweb-ip -o jsonpath='{.spec.address}'

Il seguente manifest descrive un servizio di tipo LoadBalancer, che crea un bilanciatore del carico di rete passthrough esterno per esporre i pod con un indirizzo IP esterno.

Sostituisci YOUR.IP.ADDRESS.HERE con l'indirizzo IP statico:

apiVersion: v1
kind: Service
metadata:
  name: helloweb
  labels:
    app: hello
spec:
  selector:
    app: hello
    tier: web
  ports:
  - port: 80
    targetPort: 8080
  type: LoadBalancer
  loadBalancerIP: "YOUR.IP.ADDRESS.HERE"

Crea il servizio:

kubectl apply -f helloweb-service-static-ip.yaml

Visualizza l'indirizzo IP riservato associato al bilanciatore del carico:

kubectl get service

L'output è simile al seguente:

NAME               CLUSTER-IP      EXTERNAL-IP      PORT(S)          AGE
helloweb           10.31.254.176   203.0.113.32     80:30690/TCP     54s

Usa un Ingress

Se scegli di esporre la tua applicazione utilizzando un tipo Ingress, devi prenotare un indirizzo IP statico globale. Utilizza l'annotazione kubernetes.io/ingress.global-static-ip-name per specificare un indirizzo IP globale.

Per esporre l'applicazione a client e servizi in una regione, utilizza un indirizzo IP interno statico a livello di regione durante il deployment di una risorsa Ingress interno per GKE insieme alle annotazioni richieste.

Per scoprire come utilizzare Ingress per esporre le tue applicazioni a internet, consulta Configurazione di un bilanciatore del carico delle applicazioni esterno con Ingress.

Per creare un indirizzo IP statico globale denominato helloweb-ip:

gcloud

gcloud compute addresses create helloweb-ip --global

Trova l'indirizzo IP statico che hai creato:

gcloud compute addresses describe helloweb-ip --global

L'output è simile al seguente:

...
address: 203.0.113.32
...

Config Connector

Nota: questo passaggio richiede Config Connector. Segui le istruzioni di installazione per installare Config Connector sul tuo cluster.

apiVersion: compute.cnrm.cloud.google.com/v1beta1
kind: ComputeAddress
metadata:
  name: helloweb-ip
spec:
  location: global

Salva il manifest come compute-address-global.yaml.

Applica il manifest al tuo cluster:

  kubectl apply -f compute-address-global.yaml

Il seguente manifest descrive una risorsa Ingress che espone un'applicazione web su un IP statico con due risorse:

  • Un Service con type:NodePort
  • Un Ingress configurato con il nome del servizio e l'annotazione IP statico
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: helloweb
  annotations:
    kubernetes.io/ingress.global-static-ip-name: helloweb-ip
  labels:
    app: hello
spec:
  defaultBackend:
    service:
      name: helloweb-backend
      port:
        number: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: helloweb-backend
  labels:
    app: hello
spec:
  type: NodePort
  selector:
    app: hello
    tier: web
  ports:
  - port: 8080
    targetPort: 8080

L'annotazione kubernetes.io/ingress.global-static-ip-name specifica il nome della risorsa dell'indirizzo IP globale da associare al bilanciatore del carico.

Applica il manifest al tuo cluster:

kubectl apply -f helloweb-ingress-static-ip.yaml

Visualizza l'indirizzo IP associato al bilanciatore del carico:

kubectl get ingress

L'output è simile al seguente

NAME       HOSTS     ADDRESS          PORTS     AGE
helloweb   *         203.0.113.32     80        4m

Visualizza il tuo indirizzo IP statico prenotato

Per verificare che il bilanciatore del carico sia configurato correttamente, puoi utilizzare un browser web per visitare l'indirizzo IP o utilizzare curl:

curl http://203.0.113.32/

L'output è simile al seguente:

Hello, world!
Hostname: helloweb-3766687455-8lvqv

Configurare i record dei nomi di dominio

Per fare in modo che i browser eseguano query sul tuo nome di dominio, come example.com, o sul nome di sottodominio, come blog.example.com, puntano all'indirizzo IP statico che hai prenotato, devi aggiornare i record DNS (Domain Name Server) del tuo nome di dominio.

Devi creare un record DNS di tipo A (indirizzo) per il nome del tuo dominio o sottodominio e configurare il relativo valore con l'indirizzo IP riservato.

I record DNS del tuo dominio sono gestiti dal tuo server dei nomi. Il tuo server dei nomi potrebbe essere il "registrar" dove hai registrato il dominio, un servizio DNS come Cloud DNS o un altro provider di terze parti.

  • Se il tuo server dei nomi è Cloud DNS: segui la guida rapida di Cloud DNS per configurare un record DNS A per il tuo nome di dominio con l'indirizzo IP riservato della tua applicazione.

  • Se il tuo server dei nomi è un altro provider: consulta la documentazione dei provider DNS sull'impostazione dei record DNS A per configurare il tuo nome di dominio. Se scegli di utilizzare Cloud DNS, consulta Migrazione a Cloud DNS.

Visita il tuo nome di dominio

Per verificare che i record A DNS del tuo nome di dominio vengano risolti nell'indirizzo IP che hai prenotato, visita il tuo nome di dominio.

Per creare una query DNS per il record A del tuo nome di dominio, esegui il comando host:

host example.com

L'output è simile al seguente:

example.com has address 203.0.113.32

Ora puoi indirizzare il browser web al tuo nome di dominio e visitare il sito web.

Esegui la pulizia

Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

  1. Elimina il servizio e Ingress:

    kubectl delete ingress,service -l app=hello
    
  2. Rilascia l'IP statico prenotato. Dopo l'eliminazione del bilanciatore del carico, l'indirizzo IP non utilizzato ma prenotato viene fatturato in base al prezzo degli indirizzi IP inutilizzati.

    • Se hai utilizzato un Servizio:

      gcloud compute addresses delete helloweb-ip --region us-central1
      
    • Se hai utilizzato una risorsa Ingress:

      gcloud compute addresses delete helloweb-ip --global
      
  3. Elimina l'applicazione di esempio:

    kubectl delete -f helloweb-deployment.yaml
    
  4. Elimina il cluster:

    gcloud container clusters delete domain-test
    

Passaggi successivi