Configurer des noms de domaine avec des adresses IP statiques

Ce tutoriel explique comment utiliser Google Kubernetes Engine (GKE) pour exposer votre application Web à Internet sur une adresse IP externe statique, et configurer un nom de domaine pour qu'il pointe vers votre application.

Dans ce tutoriel, nous partons du principe que vous êtes propriétaire d'un nom de domaine enregistré, tel que example.com.

Déployer votre application Web

Le fichier manifeste suivant décrit un déploiement qui exécute un exemple d'image de conteneur d'application Web :

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

Créez le déploiement :

kubectl apply -f helloweb-deployment.yaml

Exposer votre application

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

Pour en savoir plus sur les avantages et les inconvénients de chaque méthode, consultez Configurer un équilibreur de charge d'application externe avec Ingress.

Utiliser un service

Pour vous assurer que votre application dispose d'une adresse IP externe 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

Recherchez l'adresse IP statique que vous avez créée :

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

Le résultat ressemble à ce qui suit :

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

Enregistrez le fichier manifeste sous le nom compute-address-regional.yaml.

Appliquez le fichier manifeste à votre cluster :

  kubectl apply -f compute-address-regional.yaml

Recherchez l'adresse IP statique que vous avez créée :

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

Le fichier manifeste suivant décrit un service de type LoadBalancer, qui crée un équilibreur de charge réseau passthrough externe pour exposer les pods avec une adresse IP externe.

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"

Créez le service en exécutant la commande suivante :

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

Affichez l'adresse IP réservée associée à l'équilibreur de charge :

kubectl get service

Le résultat ressemble à ce qui suit :

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

Utiliser une entrée

Si vous choisissez d'exposer votre application à l'aide d'un objet Ingress, vous devez réserver une adresse IP statique globale. Utilisez l'annotation kubernetes.io/ingress.global-static-ip-name pour spécifier une adresse IP globale.

Pour exposer votre application aux clients et aux services d'une région, utilisez une adresse IP interne statique régionale lors du déploiement d'une ressource d'entrée interne pour GKE, ainsi que les annotations requises.

Pour savoir comment utiliser Ingress pour exposer vos applications sur Internet, consultez Configurer un équilibreur de charge d'application externe avec Ingress.

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

gcloud

gcloud compute addresses create helloweb-ip --global

Recherchez l'adresse IP statique que vous avez créée :

gcloud compute addresses describe helloweb-ip --global

Le résultat ressemble à ce qui suit :

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

Enregistrez le fichier manifeste sous le nom compute-address-global.yaml.

Appliquez le fichier manifeste à votre cluster :

  kubectl apply -f compute-address-global.yaml

Le fichier manifeste suivant décrit une entrée qui expose une application Web sur une adresse IP statique avec deux ressources :

  • Une ressource Service avec type:NodePort
  • Une ressource Ingress configurée avec le nom du service et une annotation d'adresse IP statique
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'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 à votre cluster :

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

Affichez l'adresse IP associée à l'équilibreur de charge :

kubectl get ingress

Le résultat ressemble à ce qui suit :

NAME       HOSTS     ADDRESS          PORTS     AGE
helloweb   *         203.0.113.32     80        4m

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

Le résultat ressemble à ce qui suit :

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

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. Votre serveur de noms peut être le "bureau d'enregistrement" où vous avez enregistré votre domaine, un service DNS tel que Cloud DNS ou un autre fournisseur tiers.

  • Si votre serveur de noms est 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 fournisseur 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.

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

Le résultat ressemble à ce qui suit :

example.com has address 203.0.113.32

Vous pouvez désormais faire pointer votre navigateur Web vers votre nom de domaine et visiter votre site Web.