Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Expose services with ALB Ingress

Dernière mise à jour :Aug 11, 2026

Par défaut, les services d'un cluster ACK sont isolés du réseau externe. Un ALB Ingress expose ces services en utilisant un Application Load Balancer (ALB) comme point d'entrée pour le trafic externe. ALB offre un routage basé sur le nom de domaine, ainsi que des fonctionnalités de sécurité et de haute disponibilité.

Fonctionnement

  1. Association des ressources

    Un objet AlbConfig définit la configuration spécifique d'une instance ALB, telle que son édition de fonctionnalités et ses écouteurs. Chaque objet AlbConfig correspond à une seule instance ALB. Les mappages de chemins et les services associés définis dans un Ingress sont automatiquement traduits en règles de routage et en groupes de serveurs pour l'instance ALB.

  2. Synchronisation dynamique

    Le contrôleur ALB Ingress surveille en continu le API server pour détecter les modifications apportées aux ressources Ingress et AlbConfig, et met à jour dynamiquement l'instance ALB associée.

  3. Transfert du trafic

    Contrairement au contrôleur Nginx Ingress, le contrôleur ALB Ingress est un composant géré qui agit en tant que plan de contrôle pour l'instance ALB. Il ne gère pas directement le trafic du plan de données. L'instance ALB traite le trafic utilisateur et le transfère vers les pods backend du service.

image

Limitations relatives aux types de service

Lorsque vous utilisez le plugin réseau Flannel, les services backend d'un ALB Ingress sont limités aux types NodePort et LoadBalancer.

Installer le contrôleur ALB Ingress

Lors de la création du cluster

  1. Connectez-vous à la console ACK et cliquez sur Create Kubernetes Cluster.

  2. À l'étape Component Configuration, accédez à la section Ingress et sélectionnez ALB Ingress.

  3. Cet exemple utilise l'option New. Suivez les instructions à l'écran pour créer le cluster.

    ALB Instance

    Description

    New

    Crée automatiquement une instance ALB, un AlbConfig et un IngressClass.

    • Instance ALB : Crée automatiquement une instance ALB standard, en mode paiement à l'utilisation, publique ou privée dans le VPC du cluster, et configure un écouteur HTTP:80.

    • AlbConfig et IngressClass : Crée automatiquement les ressources AlbConfig et IngressClass correspondantes dans le cluster et les associe à l'instance ALB.

    Select Existing VPC

    Cette option est disponible uniquement lorsque le cluster est configuré pour utiliser un Virtual Private Cloud (VPC) existant.

    Utilise une instance ALB existante et crée automatiquement un AlbConfig et un IngressClass. L'instance ALB spécifiée doit être une édition Standard ou WAF-enhanced, se trouver dans le même VPC que le cluster et ne pas être associée à un autre cluster.

    None

    Installe uniquement le composant ALB Ingress Controller. Vous devez créer manuellement un AlbConfig et un IngressClass ultérieurement. Cette approche convient aux scénarios nécessitant une personnalisation de la configuration de l'instance ALB.

Pour un cluster existant

  1. Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Components and Add-ons .

  3. Utilisez la zone de recherche ou cliquez sur l'onglet Networking pour trouver le composant. Sur la carte du composant ALB Ingress Controller, cliquez sur Install dans le coin inférieur droit.

  4. Cet exemple utilise l'option New. Cliquez sur OK.

    ALB Instance

    Description

    New

    Crée automatiquement une instance ALB, un AlbConfig et un IngressClass.

    • Instance ALB : Crée automatiquement une instance ALB standard, en mode paiement à l'utilisation, publique ou privée dans le VPC du cluster, et configure un écouteur HTTP:80.

    • AlbConfig et IngressClass : Crée automatiquement les ressources AlbConfig et IngressClass correspondantes dans le cluster et les associe à l'instance ALB.

    Existing

    Utilise une instance ALB existante et crée automatiquement un AlbConfig et un IngressClass. L'instance ALB spécifiée doit être une édition Standard ou WAF-enhanced, se trouver dans le même VPC que le cluster et ne pas être associée à un autre cluster.

    None

    Installe uniquement le composant ALB Ingress Controller. Vous devez créer manuellement un AlbConfig et un IngressClass ultérieurement. Cette approche convient aux scénarios nécessitant une personnalisation de la configuration de l'instance ALB.

Créer une application exemple

L'application exemple déploie un Deployment nommé coffee et un Service correspondant nommé coffee-svc.

Console

  1. Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Workloads > Deployments.

  2. Cliquez sur Create from YAML. Sélectionnez Custom dans la liste déroulante Sample Template. Ensuite, copiez le contenu suivant dans l'éditeur de modèle et cliquez sur Create.

    YAML de l'application exemple

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: coffee
      namespace: default
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: coffee
      template:
        metadata:
          labels:
            app: coffee
        spec:
          containers:
          - name: coffee
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: coffee-svc
      namespace: default
    spec:
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: coffee
      type: ClusterIP  # When you use the flannel network plugin, the backend Service of an ALB Ingress supports only the NodePort and LoadBalancer types.
  3. Dans la boîte de dialogue de confirmation, cliquez sur View et vérifiez que l'état du Pod est Running.

kubectl

  1. Se connecter à un cluster avec kubectl.

  2. Créez un fichier nommé coffee-deployment-service.yaml contenant le contenu suivant.

    YAML de l'application exemple

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: coffee
      namespace: default
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: coffee
      template:
        metadata:
          labels:
            app: coffee
        spec:
          containers:
          - name: coffee
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: coffee-svc
      namespace: default
    spec:
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: coffee
      type: ClusterIP  # When you use the flannel network plugin, the backend Service of an ALB Ingress supports only the NodePort and LoadBalancer types.
  3. Créez le Deployment et le Service pour l'application exemple.

    kubectl apply -f coffee-deployment-service.yaml
  4. Vérifiez que l'état du Pod est Running.

     kubectl get pod -l app=coffee

    Résultat attendu :

    NAME                      READY   STATUS    RESTARTS   AGE
    coffee-84bd6*****-*****   1/1     Running   0          4m22s
    coffee-84bd6*****-*****   1/1     Running   0          4m22s

Créer un ALB Ingress

Configurez le nom de domaine et les mappages de chemins pour le ALB Ingress afin de router les requêtes destinées à ingress-demo.com/coffee vers le Service coffee-svc au sein du cluster.

Pour utiliser un ALB Ingress dans un ACK dedicated cluster , vous devez accorder des autorisations d'accès au contrôleur ALB Ingress .

Console

  1. Dans le volet de navigation de gauche, choisissez Network > Ingresses. Sélectionnez le namespace default et cliquez sur Create Ingress.

  2. Spécifiez les paramètres Ingress suivants et cliquez sur OK.

    • Name : coffee-ingress

    • Domain Name : ingress-demo.com

    • Mappings : Path : /coffee, Match Rule : Prefix, Service : coffee-svc, Port : 80.

      |
      **Règle de correspondance (pathType)**
      |
      **Description**
      | | --- | --- | |
      Prefix
      |
      Fait correspondre le chemin de la requête en fonction de son préfixe. Par exemple, les requêtes pour `/coffee/1` ou `/coffee/buy/1` correspondent, mais pas celles pour `/cof` ou `/coffeebuy/1`.
      | |
      Exact
      |
      Fait correspondre le chemin de la requête exactement. Seules les requêtes pour `/coffee` correspondent.
      | |
      ImplementationSpecific
      |
      Le comportement de correspondance dépend de l'implémentation du contrôleur Ingress. Pour le contrôleur ALB Ingress, ce type équivaut à une correspondance Exact.
      |















  3. Obtenez l'adresse de l'Endpoint.

    Un ALB Ingress prend environ 10 secondes pour entrer en vigueur. Vous pouvez cliquer sur le bouton d'actualisation pour obtenir les informations sur l'endpoint. Si l'endpoint n'est pas mis à jour après un long délai, cliquez sur le nom de l'Ingress et accédez à l'onglet Events pour résoudre les problèmes .

    Dans la colonne Endpoint de la liste des Ingress, repérez l'adresse de l'endpoint ALB, dont le format est similaire à alb-<instance_id>.cn-wulanchabu.alb.aliyuncsslb.com.

  4. Testez l'accès au domaine et à l'endpoint. Un code d'état HTTP 200 indique que le ALB Ingress fonctionne correctement.

    curl -H "Host:ingress-demo.com" http://<endpoint_address>/coffee -s -o /dev/null -w "%{http_code}\n"

kubectl

  1. Créez un fichier nommé coffee-ingress.yaml avec le contenu suivant. Ensuite, exécutez la commande kubectl apply -f coffee-ingress.yaml pour créer le ALB Ingress.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: coffee-ingress
      namespace: default
    spec:
      ingressClassName: alb
      rules:
      - host: ingress-demo.com
        http:
          paths:
          - path: /coffee
            backend:
              service: 
                name: coffee-svc
                port:
                  number: 80
            pathType: Prefix
    |
    **Règle de correspondance (pathType)**
    |
    **Description**
    | | --- | --- | |
    Prefix
    |
    Fait correspondre le chemin de la requête en fonction de son préfixe. Par exemple, les requêtes pour `/coffee/1` ou `/coffee/buy/1` correspondent, mais pas celles pour `/cof` ou `/coffeebuy/1`.
    | |
    Exact
    |
    Fait correspondre le chemin de la requête exactement. Seules les requêtes pour `/coffee` correspondent.
    | |
    ImplementationSpecific
    |
    Le comportement de correspondance dépend de l'implémentation du contrôleur Ingress. Pour le contrôleur ALB Ingress, ce type équivaut à une correspondance Exact.
    |















  2. Affichez l'Ingress et obtenez l'adresse de l'endpoint à partir du champ ADDRESS.

    kubectl get ingress coffee-ingress -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'

    Résultat attendu :

    alb-******************.cn-wulanchabu.alb.aliyuncsslb.com
  3. Testez l'accès au domaine et à l'endpoint. Un code d'état HTTP 200 indique que le ALB Ingress fonctionne correctement.

    curl -H "Host:ingress-demo.com" http://<endpoint_address>/coffee -s -o /dev/null -w "%{http_code}\n"

Facturation

  • Contrôleur ALB Ingress : Il s'agit d'un composant ACK géré et il est gratuit.

  • Instance ALB : Chaque objet de ressource AlbConfig crée une instance ALB correspondante. Les instances ALB utilisent la facturation en paiement à l'utilisation.

Déploiement en production

  • Configurer le DNS : Créez un enregistrement CNAME pour mapper le domaine de votre service vers l'endpoint public de l'instance ALB. Cela découple le domaine de l'endpoint de l'instance, garantissant un point d'entrée de service hautement disponible et flexible.

  • Activer HTTPS : Utilisez le Certificate Management Service pour gérer vos certificats de manière centralisée, et référencez-les de manière déclarative dans le champ tls d'une ressource Ingress pour sécuriser le trafic de service avec HTTPS.

Quotas et limites

  • Les noms de ressources AlbConfig, Ingress, Service et namespace ne peuvent pas commencer par aliyun.

  • Pour plus d'informations sur les limites de quota du ALB Ingress, consultez la rubrique Calcul des quotas ALB.

  • Pour connaître les régions et les zones de disponibilité prises en charge par le ALB Ingress, consultez la rubrique Régions et zones prises en charge par ALB.

FAQ

Pourquoi un Ingress renvoie-t-il des codes d'erreur HTTP ?

Causes

  • Erreur 503 (Service Temporarily Unavailable)

    • Aucune règle de routage correspondante : Le chemin de la requête ne correspond à aucune règle de routage configurée dans l'Ingress.

    • Aucun pod backend sain : Le Service associé ne dispose d'aucun pod prêt, ce qui entraîne un objet endpoints vide.

  • Erreur 502 (Bad Gateway)

    Après qu'un écouteur HTTP ou HTTPS a reçu une demande de connexion client, l'ALB envoie un code d'état HTTP 502 Bad Gateway au client car il échoue à transférer la requête vers un Pod ou à recevoir une réponse du Pod.

  • Erreur 404 (Not Found)

    Cela se produit généralement lorsqu'une requête correspond à une règle de routage Ingress, mais que son URL ne correspond pas au chemin du service de l'application dans le pod backend.

  • Erreur 400 (Bad Request)

    Cela peut se produire pour plusieurs raisons, par exemple si vous envoyez une requête HTTP vers un écouteur HTTPS.

Pour plus d'informations sur les codes d'erreur HTTP, consultez la rubrique Codes d'état ALB .

Solution

  1. Vérifiez l'état de l'Ingress : Exécutez la commande kubectl describe ingress <ingress-name> -n <namespace> et inspectez la section Events pour détecter des messages d'erreur. Si un événement tel que listener is not exist in alb apparaît, ajoutez la configuration d'écouteur requise à votre AlbConfig.

    ...
    Events:
      Type     Reason                  Age     From     Message
      ----     ------                  ----    ----     -------
      Warning  FailedBuildModel        ****    ingress  listener is not exist in alb, port: 443, protocol: HTTPS
      Warning  FailedBuildModel        ****    ingress  listener not found for (443/HTTPS), with ingresses 1
    ...
  2. Vérifiez les endpoints backend : Exécutez la commande kubectl get endpoints <service-name> -n <namespace> pour confirmer que le champ ENDPOINTS répertorie au moins une adresse IP et un port de pod sain. S'il est vide, vérifiez que le selector du Service correspond aux labels des pods et que les pods sont dans l'état Running.

  3. Vérifiez l'état et les journaux des pods : Exécutez kubectl get pod -l <app=your-app> -n <namespace> pour afficher l'état des pods. Ensuite, utilisez le nom du pod pour exécuter kubectl logs <pod-name> -n <namespace> et vérifiez les journaux de l'application pour détecter d'éventuels échecs de démarrage ou erreurs de traitement des requêtes.

  4. Testez la connectivité réseau : Depuis un pod ou depuis un nœud, utilisez curl pour accéder au ClusterIP du service backend ou à une IP de pod afin de vérifier que le service est accessible au sein du cluster.

Pourquoi l'accès HTTPS est-il inaccessible après la configuration TLS ?

Causes

  • L'instance ALB n'écoute pas sur le port 443 : Vous avez configuré TLS pour l'Ingress, mais l'écouteur HTTPS:443 correspondant n'a pas été créé.

  • Configuration incorrecte du certificat : Le type de Secret n'est pas kubernetes.io/tls ou IngressTLS, ou le contenu de tls.crt et tls.key dans le champ data est incorrect ou ne correspond pas.

  • Certificat obsolète : L'instance ALB utilise peut-être un ancien certificat. Cela se produit si vous mettez à jour un certificat dans Alibaba Cloud Certificate Management Service sans mettre à jour l'ID du certificat dans votre AlbConfig, ou si la découverte automatique et la réconciliation ne se déclenchent pas.

Solution

  1. Vérifiez le port de l'écouteur : Exécutez la commande kubectl describe albconfig <alb-name> -n <namespace> pour vérifier que les configurations spec.listeners.port: 443 et spec.listeners.protocol: HTTPS sont présentes.

  2. Vérifiez la configuration de l'Ingress : Assurez-vous que la configuration de l'Ingress inclut l'annotation alb.ingress.kubernetes.io/listen-ports: [{"HTTP": 80}, {"HTTPS": 443}]. Cette annotation associe l'Ingress aux écouteurs HTTP et HTTPS.

  3. Vérifiez la configuration du Secret : Dans la configuration de l'Ingress, examinez le champ secretName de spec.tls pour confirmer que le Secret correct est référencé. Exécutez la commande kubectl get secret <secret-name> -n <namespace> -o yaml pour confirmer le type de Secret et l'intégrité des données.

Comment configurer la résolution de domaine pour un Ingress ?

  1. Enregistrer un nom de domaine.

  2. Ajouter un enregistrement CNAME.

    Par exemple, ajoutez un enregistrement DNS avec le type d'enregistrement CNAME , l'enregistrement hôte @ (qui représente le domaine racine, tel que ingress-demo.com ) et la valeur d'enregistrement correspondant à l'adresse de l'endpoint Ingress .
  3. Dans un navigateur, accédez à http://ingress-demo.com/coffee pour vérifier que la résolution de nom de domaine fonctionne.

    Une fois l'accès réussi, une page de test NGINX est renvoyée, affichant des informations telles que l'Server address, le Server name, la Date et l'URI (avec la valeur /coffee) du pod backend. Cela indique que l'Ingress a correctement routé la requête vers le pod backend.

    Pour la vérification, remplacez l'exemple par votre nom de domaine enregistré. Si la résolution de nom de domaine échoue, consultez la rubrique Dépannage rapide des échecs de résolution de nom de domaine .

Comment configurer HTTPS pour un Ingress ?

  1. Acheter un certificat officiel, et demander un certificat. Assurez-vous que le certificat que vous souhaitez utiliser est dans l'état Issued.

  2. Télécharger le certificat SSL.

    Cet exemple montre comment télécharger le fichier de certificat au format PEM pour le domaine ingress-demo.com , avec le type de serveur défini sur Other .
  3. Créez un Secret pour stocker le fichier de certificat.

    1. Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Configurations > Secrets.

    2. Sur la page Secrets, sélectionnez le namespace default puis cliquez sur Create à gauche. Ajoutez les configurations suivantes et cliquez sur OK.

      • Name : ingress-tls

      • Type : TLS Certificate

      • Certificates : Le contenu complet du fichier de certificat téléchargé et décompressé (.pem).

      • Key : Le contenu complet du fichier de clé privée téléchargé et décompressé (.key).

  4. Mettez à jour l'AlbConfig pour ajouter un écouteur HTTPS:443 pour l'instance ALB.

    1. Dans le volet de navigation de gauche, choisissez Workloads > Custom Resources. Sous l'onglet Resource Objects, recherchez AlbConfig, puis cliquez sur le résultat de la recherche.

    2. Dans la liste des objets de ressource AlbConfig, repérez la ressource cible alb et cliquez sur Edit YAML dans la colonne Actions.

    3. Ajoutez les champs spec.listeners.port: 443 et spec.listeners.protocol: HTTPS, puis cliquez sur OK.

      spec:
          config:
            addressAllocatedMode: Fixed
            addressType: Internet
            zoneMappings:
              - vSwitchId: vsw-xxx
              - vSwitchId: vsw-xxx
          listeners:
            - port: 80
              protocol: HTTP
            - port: 443
              protocol: HTTPS
  5. Mettez à jour l'Ingress pour ajouter une configuration TLS et l'associer à l'écouteur HTTPS:443.

    1. Dans le volet de navigation de gauche, choisissez Network > Ingresses. Dans la colonne Actions de l'Ingress cible, cliquez sur Update.

    2. Ajoutez les configurations suivantes et cliquez sur OK.

      • TLS Settings : Activé

      • Domain Name : ingress-demo.com

      • Secrets : ingress-tls

      • Annotations : alb.ingress.kubernetes.io/listen-ports: [{"HTTP": 80}, {"HTTPS": 443}]

  6. Dans un navigateur, accédez à https://ingress-demo.com/coffee pour vérifier l'accès HTTPS.

    La page affiche le logo NGINX et les informations de réponse du serveur. L'Server address, le Server name et l'URI (avec la valeur /coffee) sont renvoyés comme prévu. Cela confirme que HTTPS est correctement configuré et que l'Ingress route les requêtes vers le pod backend coffee.

    Pour la vérification, remplacez l'exemple par votre nom de domaine enregistré.

Pour plus d'informations sur la configuration des certificats HTTPS, consultez la rubrique Configurer des certificats HTTPS pour une communication chiffrée.

Comment créer manuellement un AlbConfig et un IngressClass ?

Créer un AlbConfig

  1. Connectez-vous à la console VPC et notez les ID d'au moins deux vSwitch situés dans différentes zones de disponibilité au sein du VPC où le cluster est déployé.

    Les zones de disponibilité des vSwitch configurés doivent être prises en charge par ALB. Pour plus d'informations, consultez la rubrique Régions et zones ALB .
  2. Remplacez zoneMappings.vSwitchId dans le code suivant par les ID de vSwitch obtenus à l'étape précédente. Enregistrez le contenu dans un fichier nommé albconfig.yaml et exécutez kubectl apply -f albconfig.yaml pour créer l'AlbConfig.

    Pour des étapes plus détaillées, consultez la rubrique Créer un AlbConfig .
    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: alb # Do not create another AlbConfig resource with the same name.
    spec:
      config:
        name: alb-test
        addressType: Internet
        zoneMappings:
        - vSwitchId: vsw-****cg2a9g71hx8go**** # Replace with your actual vSwitch ID.
        - vSwitchId: vsw-****un9tql5t8nh15**** # Replace with your actual vSwitch ID.
      listeners:
        - port: 80
          protocol: HTTP

Créer un IngressClass

La ressource IngressClass associe un AlbConfig aux ressources Ingress. Lorsque vous spécifiez ingressClassName: alb dans un Ingress, celui-ci utilise l'AlbConfig défini dans l'IngressClass alb.

Enregistrez le contenu suivant dans un fichier nommé IngressClass.yaml, puis exécutez kubectl apply -f IngressClass.yaml pour créer l'IngressClass.

Le champ spec.parameters.name doit être défini sur le nom de l'AlbConfig. L'AlbConfig par défaut créé lors de l'installation du composant est nommé alb . Pour plus d'informations, consultez la rubrique Utiliser IngressClass pour associer un AlbConfig à un Ingress .
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: alb
spec:
  controller: ingress.k8s.alibabacloud/alb
  parameters:
    apiGroup: alibabacloud.com
    kind: AlbConfig
    name: alb # This must match the name of the AlbConfig resource.

Documentation connexe

Utilisation avancée de ALB Ingress

Personnalisation des règles de transfert ALB Ingress

Effectuer un déploiement canari avec ALB Ingress