Configurer des noms de domaine avec des adresses IP statiques

Ce tutoriel explique comment exposer votre application Web à Internet sur une adresse IP externe statique, puis configurer les enregistrements DNS de votre nom de domaine pour qu'ils pointent vers votre application.

Ce tutoriel suppose que vous êtes propriétaire d'un nom de domaine enregistré, tel que example.com. Si ce n'est pas le cas, vous pouvez enregistrer un nom de domaine via Google Domains ou un autre bureau d'enregistrement de noms de domaine de votre choix.

Objectifs

Ce tutoriel couvre les étapes suivantes :

  • Réserver une adresse IP externe statique pour votre application
  • Configurer, au choix, une ressource Service ou une ressource Entrée pour utiliser cette adresse IP statique
  • Mettre à jour les enregistrements DNS de votre nom de domaine pour qu'ils pointent vers votre application

Avant de commencer

Pour activer l'API Kubernetes Engine, procédez comme suit :
  1. Accédez à la page Kubernetes Engine dans Google Cloud Console.
  2. Créez ou sélectionnez un projet.
  3. Patientez le temps de l'activation de l'API et des services associés. Cette opération peut prendre plusieurs minutes.
  4. Vérifiez que la facturation est activée pour votre projet Google Cloud. Découvrez comment vérifier que la facturation est activée pour votre projet.

Installez les outils de ligne de commande suivants utilisés dans ce tutoriel :

  • gcloud permet de créer et de supprimer des clusters Kubernetes Engine. gcloud est inclus dans le SDK Google Cloud.
  • kubectl permet de gérer Kubernetes, le système d'orchestration de clusters utilisé par Kubernetes Engine. Vous pouvez installer kubectl avec gcloud :
    gcloud components install kubectl

Définir des valeurs par défaut pour l'outil de ligne de commande gcloud

Pour gagner du temps lors de la saisie de votre ID de projet et des options de la zone Compute Engine dans l'outil de ligne de commande gcloud, vous pouvez définir les valeurs par défaut suivantes :
gcloud config set project project-id
gcloud config set compute/zone compute-zone

Créer un cluster GKE

Créez un cluster de conteneurs nommé domain-test pour déployer votre application Web :

gcloud container clusters create domain-test

Étape 1 : Déployer votre application Web

Pour déployer l'exemple d'application Web, enregistrez le manifeste suivant sous le nom helloweb-deployment.yaml :

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: gcr.io/google-samples/hello-app:1.0
        ports:
        - containerPort: 8080

Exécutez ensuite la commande suivante pour créer le déploiement :

kubectl apply -f helloweb-deployment.yaml

Étape 2 : Exposer votre application

Vous pouvez exposer votre application sur GKE via l'une des méthodes suivantes :

Pour connaître les avantages et les inconvénients de chaque méthode, consultez le tutoriel Équilibrage de charge HTTP.

Étape 2(a) : Utiliser un objet Service

Pour vous assurer que votre application dispose d'une adresse IP publique statique, vous devez réserver une adresse IP statique.

Si vous choisissez d'exposer votre application à l'aide d'un objet Service, vous devez créer une adresse IP régionale. Les adresses IP globales ne fonctionnent qu'avec le type de ressource Entrée, comme expliqué dans la section suivante.

Pour utiliser un service, créez une adresse IP statique nommée helloweb-ip dans la région us-central1 :

gcloud

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

Pour trouver l'adresse IP statique que vous avez créée, exécutez la commande suivante :

gcloud compute addresses describe helloweb-ip --region us-central1
Résultat :
address: 203.0.113.32
...

Config Connector

Remarque : Cette étape nécessite Config Connector. Suivez les instructions d'installation pour l'installer sur votre cluster.

apiVersion: compute.cnrm.cloud.google.com/v1beta1
kind: ComputeAddress
metadata:
  name: helloweb-ip
spec:
  location: us-central1
Pour déployer ce manifeste, téléchargez le fichier sur votre ordinateur sous le nom "compute-address-regional.yaml", puis exécutez la commande suivante :
kubectl apply -f compute-address-regional.yaml

Utilisez le manifeste suivant pour créer un fichier manifeste nommé helloweb-service.yaml décrivant un Service. Remplacez YOUR.IP.ADDRESS.HERE par l'adresse IP statique :

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"

Ensuite, créez l'objet Service :

kubectl apply -f helloweb-service.yaml

Pour afficher l'adresse IP réservée associée à l'équilibreur de charge, procédez comme suit :

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

Étape 2(b) : Utiliser un objet Entrée

Si vous choisissez d'exposer votre application à l'aide d'un objet Entrée, qui crée un équilibreur de charge HTTP(S), vous devez réserver une adresse IP statique globale. Les adresses IP régionales ne fonctionnent pas avec les objets Entrée.

Pour en savoir plus sur l'utilisation d'objets Entrée pour exposer vos applications à Internet, consultez le tutoriel Configurer l'équilibrage de charge HTTP avec l'objet Entrée.

Pour créer une adresse IP statique globale nommée helloweb-ip, procédez comme suit :

gcloud

gcloud compute addresses create helloweb-ip --global

Pour trouver l'adresse IP statique que vous avez créée, procédez comme suit :

gcloud compute addresses describe helloweb-ip --global
Résultat :
address: 203.0.113.32
...

Config Connector

Remarque : Cette étape nécessite Config Connector. Suivez les instructions d'installation pour l'installer sur votre cluster.

apiVersion: compute.cnrm.cloud.google.com/v1beta1
kind: ComputeAddress
metadata:
  name: helloweb-ip
spec:
  location: global
Pour déployer ce manifeste, téléchargez le fichier sur votre ordinateur sous le nom "compute-address-global.yaml", puis exécutez la commande suivante :
kubectl apply -f compute-address-global.yaml

Pour exposer une application Web sur une adresse IP statique utilisant un objet Entrée, vous devez déployer deux ressources :

  1. Une ressource Service avec type:NodePort
  2. Une ressource Ingress configurée avec le nom du service et une annotation d'adresse IP statique

Utilisez le manifeste suivant pour créer un fichier manifeste nommé helloweb-ingress.yaml décrivant ces deux ressources :

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: helloweb
  annotations:
    kubernetes.io/ingress.global-static-ip-name: helloweb-ip
  labels:
    app: hello
spec:
  backend:
    serviceName: helloweb-backend
    servicePort: 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'annotation kubernetes.io/ingress.global-static-ip-name spécifie le nom de la ressource d'adresse IP globale à associer à l'équilibreur de charge HTTP(S).

Appliquez le fichier manifeste helloweb-ingress.yaml au cluster :

kubectl apply -f helloweb-ingress.yaml
Résultat :
ingress "helloweb" created
service "helloweb-backend" created

Pour afficher l'adresse IP de réserve associée à l'équilibreur de charge :

kubectl get ingress
Résultat :
NAME       HOSTS     ADDRESS          PORTS     AGE
helloweb   *         203.0.113.32     80        4m

Étape 3 : Accéder à votre adresse IP statique réservée

Pour vérifier que l'équilibreur de charge est correctement configuré, vous pouvez utiliser un navigateur Web pour accéder à l'adresse IP ou exécuter la commande curl :

curl http://203.0.113.32/
Résultat :
Hello, world!
Hostname: helloweb-3766687455-8lvqv

Étape 4 : Configurer vos enregistrements de nom de domaine

Afin que les navigateurs qui envoient des requêtes au nom de votre domaine (comme example.com) ou de votre sous-domaine (tel que blog.example.com) pointent vers l'adresse IP statique que vous avez réservée, vous devez mettre à jour les enregistrements DNS (Domain Name System) de votre nom de domaine.

Vous devez créer un enregistrement DNS du type A (adresse) pour votre nom de domaine ou de sous-domaine, et configurer sa valeur d'après l'adresse IP réservée.

Les enregistrements DNS de votre domaine sont gérés par votre serveur de noms. Celui-ci peut se trouver là où vous avez enregistré votre domaine (autrement dit, dans votre "bureau d'enregistrement"), mais il peut aussi s'agir d'un service DNS tel que Google Cloud DNS ou un autre fournisseur tiers.

  • Si votre serveur de noms est Google Cloud DNS : consultez le guide de démarrage rapide de Cloud DNS pour configurer l'enregistrement DNS A de votre nom de domaine avec l'adresse IP réservée de votre application.

  • Si votre serveur de noms est un autre fournisseur : recherchez les instructions de configuration des enregistrements DNS A dans la documentation de votre service DNS afin de configurer votre nom de domaine. Si vous préférez utiliser Google Cloud DNS à la place, consultez la page Migrer vers Cloud DNS.

Étape 5 : Accéder à votre nom de domaine

Pour vérifier que les enregistrements DNS A de votre nom de domaine correspondent à l'adresse IP que vous avez réservée, accédez à votre nom de domaine.

Pour effectuer une requête DNS pour l'enregistrement A de votre domaine, exécutez la commande host :

host example.com
Résultat :
example.com has address 203.0.113.32

À ce stade, vous pouvez faire pointer votre navigateur Web vers votre nom de domaine et visiter votre site Web !

Effectuer un nettoyage

Afin d'éviter la facturation sur votre compte Google Cloud Platform des ressources utilisées lors de ce tutoriel, procédez comme suit :

  1. Supprimez les ressources d'équilibrage de charge :

    kubectl delete ingress,service -l app=hello

  2. Libérez l'adresse IP statique réservée. Une fois l'équilibreur de charges supprimé, l'adresse IP réservée et non utilisée n'est plus gratuite et des frais vous seront facturés selon la tarification par adresse IP non utilisée. Exécutez les commandes suivantes pour libérer la ressource IP statique :

    • Si vous avez suivi l'étape 2(a) :

      gcloud compute addresses delete helloweb-ip --region us-central1
    • Si vous avez suivi l'étape 2(b) :

      gcloud compute addresses delete helloweb-ip --global
  3. Supprimez l'exemple d'application :

    kubectl delete -f helloweb-deployment.yaml

  4. Attendez que l'équilibreur de charge soit supprimé en examinant le résultat de la commande suivante (ce résultat ne doit présenter aucune règle de transfert dont le nom contient "helloweb") :

    gcloud compute forwarding-rules list

  5. Supprimez le cluster de conteneurs :

    gcloud container clusters delete domain-test

Étapes suivantes