Configurazione dei nomi di dominio con indirizzi IP statici

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Questo tutorial illustra come utilizzare Google Kubernetes Engine (GKE) per esporre la tua applicazione web su Internet su un indirizzo IP esterno statico e configurare un nome di dominio in modo che punti all'applicazione.

Questo tutorial presuppone che tu sia il proprietario di un nome di dominio registrato, ad esempio example.com. Puoi registrare un nome di dominio tramite Google Domains o un altro registrar di domini a tua scelta, se non ne hai uno.

Obiettivi

Questo tutorial illustra i seguenti passaggi:

  • Prenotare un indirizzo IP esterno statico per la tua applicazione
  • Configura le risorse Service o Ingress per utilizzare l'IP statico
  • Aggiorna i record DNS del tuo nome di dominio in modo che rimandino all'applicazione

Costi

Questo tutorial utilizza 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 beneficiare di una prova gratuita.

Al termine di questo tutorial, puoi evitare una fatturazione continua eliminando le risorse che hai creato. Per scoprire di più, vedi Pulizia.

Prima di iniziare

Per abilitare l'API Kubernetes Engine:
  1. Visita la pagina Kubernetes Engine nella console Google Cloud.
  2. Crea o seleziona un progetto.
  3. Attendi l'attivazione dell'API e dei servizi correlati. Potrebbero essere necessari diversi minuti.
  4. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

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

  • gcloud viene utilizzato per creare ed eliminare i cluster di 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/hello-app/manifests

Imposta valori predefiniti per lo strumento a riga di comando gcloud

Per risparmiare tempo digitando le opzioni ID progetto e Zona Compute Engine nello strumento a riga di comando gcloud, puoi impostare i valori predefiniti:
gcloud config set project project-id
gcloud config set compute/zone compute-zone

Crea un cluster

Crea un cluster di container denominato domain-test per eseguire il deployment dell'applicazione web:

gcloud container clusters create domain-test

Deployment dell'applicazione web

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


# Copyright 2021 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

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

Esegui il comando seguente per creare il deployment:

kubectl apply -f helloweb-deployment.yaml

Esposizione dell'applicazione

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

Per saperne di più sui vantaggi e svantaggi di ogni metodo, consulta la pagina relativa alla configurazione del bilanciamento del carico HTTP(S) con Ingress.

Utilizza un servizio

Per assicurarti che la tua applicazione abbia un indirizzo IP pubblico statico, devi prenotarlo.

Se scegli di esporre la tua applicazione utilizzando un servizio, devi creare un indirizzo IP a livello di regione. Gli indirizzi IP globali funzionano solo con il tipo di risorsa Ingress, come spiegato nella sezione successiva.

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

Per trovare l'indirizzo IP statico che hai creato, esegui questo comando:

gcloud compute addresses describe helloweb-ip --region us-central1
Output:
address: 203.0.113.32
...

Config Connector

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

apiVersion: compute.cnrm.cloud.google.com/v1beta1
kind: ComputeAddress
metadata:
  name: helloweb-ip
spec:
  location: us-central1
Per eseguire il deployment di questo manifest, scaricalo sul tuo computer come compute-address-regional.yaml ed esegui:
kubectl apply -f compute-address-regional.yaml
Per trovare l'indirizzo IP statico, esegui il comando seguente:
kubectl get computeaddress helloweb-ip -o jsonpath='{.spec.address}'

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

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


# Copyright 2021 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

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"
---

Quindi, crea il servizio:

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

Per vedere l'indirizzo IP riservato associato al bilanciatore del carico:

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

Utilizzare una risorsa Ingress

Se scegli di esporre la tua applicazione utilizzando un Ingress, che crea un bilanciatore del carico HTTP(S), devi prenotare un indirizzo IP statico globale. Gli indirizzi IP a livello di area geografica non funzionano con la risorsa Ingress.

Per scoprire di più su come utilizzare Ingress per esporre le tue applicazioni su Internet, fai riferimento al tutorial sulla configurazione del bilanciamento del carico HTTP(S) con Ingress.

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

gcloud

gcloud compute addresses create helloweb-ip --global

Per trovare l'indirizzo IP statico che hai creato:

gcloud compute addresses describe helloweb-ip --global
Output:
address: 203.0.113.32
...

Config Connector

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

apiVersion: compute.cnrm.cloud.google.com/v1beta1
kind: ComputeAddress
metadata:
  name: helloweb-ip
spec:
  location: global
Per eseguire il deployment di questo manifest, scaricalo sul tuo computer come compute-address-global.yaml ed eseguilo:
kubectl apply -f compute-address-global.yaml

Il manifest seguente 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 statica

# Copyright 2021 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

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 di indirizzo IP globale da associare al bilanciatore del carico HTTP(S).

Applica la risorsa al cluster:

kubectl apply -f helloweb-ingress-static-ip.yaml
Output:
ingress "helloweb" created
service "helloweb-backend" created

Per vedere l'indirizzo IP di riserva associato al bilanciatore del carico:

kubectl get ingress
Output:
NAME       HOSTS     ADDRESS          PORTS     AGE
helloweb   *         203.0.113.32     80        4m

Visita al 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/
Output:
Hello, world!
Hostname: helloweb-3766687455-8lvqv

Configurazione dei record dei nomi di dominio

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

Devi creare un record DNS di tipo A (indirizzo) per il nome di 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 tuo 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 del tuo servizio 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 al tuo nome di dominio

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

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

host example.com
Output:
example.com has address 203.0.113.32

A questo punto, puoi indirizzare il browser web al tuo nome di dominio e visitare il tuo 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 le risorse di bilanciamento del carico:

    kubectl delete ingress,service -l app=hello

  2. Rilascia l'IP statico prenotato. Dopo aver eliminato il bilanciatore del carico, l'indirizzo IP inutilizzato ma prenotato non è più senza costi e viene addebitato per il prezzo dell'indirizzo IP inutilizzato. Esegui i comandi seguenti per rilasciare la risorsa IP statica:

    • 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. Attendi che il bilanciatore del carico venga eliminato controllando l'output del comando seguente. L'output non deve mostrare una regola di forwarding che contiene "helloweb" nel nome:

    gcloud compute forwarding-rules list

  5. Elimina il cluster di container:

    gcloud container clusters delete domain-test

Passaggi successivi