Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Expose services with ALB Ingress

Dernière mise à jour :Oct 10, 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 domaine, la sécurité et une haute disponibilité.

Fonctionnement

  1. Association des ressources

    Un objet AlbConfig définit les configurations spécifiques d'une instance ALB, telles que son édition de fonctionnalités et ses écouteurs. Chaque objet AlbConfig correspond à une instance ALB unique. Les mappages de chemin 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 serveur API 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 comme plan de contrôle pour l'instance ALB. Il ne traite 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

Lors de l'utilisation du 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 une IngressClass.

    • Instance ALB : Crée automatiquement une instance ALB standard, en 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 n'est disponible que si le cluster est configuré pour utiliser un Virtual Private Cloud (VPC) existant.

    Utilise une instance ALB existante et crée automatiquement un AlbConfig et une IngressClass. L'instance ALB spécifiée doit être de l'é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 devrez créer manuellement un AlbConfig et une IngressClass ultérieurement. Cette option convient aux scénarios où vous devez personnaliser 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 une IngressClass.

    • Instance ALB : Crée automatiquement une instance ALB standard, en 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 une IngressClass. L'instance ALB spécifiée doit être de l'é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 devrez créer manuellement un AlbConfig et une IngressClass ultérieurement. Cette option convient aux scénarios où vous devez personnaliser 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 le statut 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 le statut du Pod est Running.

     kubectl get pod -l app=coffee

    Sortie attendue :

    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 chemin pour l'ALB Ingress afin de router les requêtes pour ingress-demo.com/coffee vers le Service coffee-svc au sein du cluster.

Pour utiliser un ALB Ingress dans un cluster dédié ACK , 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 les requêtes pour /cof ou /coffeebuy/1 ne correspondent pas.

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

    La prise en compte d'un ALB Ingress prend environ 10 secondes. 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, trouvez l'adresse de l'endpoint ALB, qui suit un format similaire à alb-<instance_id>.cn-wulanchabu.alb.aliyuncsslb.com.

  4. Testez l'accès au domaine et à l'endpoint. Un code d'état HTTP de 200 indique que l'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 l'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 les requêtes pour /cof ou /coffeebuy/1 ne correspondent pas.

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

    Sortie attendue :

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

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

Facturation

  • ALB Ingress Controller : il s'agit d'un composant ACK managé, fourni gratuitement.

  • Instance ALB : chaque objet de ressource AlbConfig crée une instance ALB correspondante. Les instances ALB sont facturées selon le modèle 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. Cette approche découple le domaine de l'endpoint de l'instance, garantissant ainsi 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 façon déclarative dans le champ tls d'une ressource Ingress afin de sécuriser le trafic de service via HTTPS.

Quotas et limites

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

  • Pour connaître les limites de quota d'ALB Ingress, consultez la rubrique Calcul des quotas ALB.

  • Pour obtenir la liste des régions et zones de disponibilité prises en charge par ALB Ingress, reportez-vous à la section 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)

    Lorsqu'un écouteur HTTP ou HTTPS reçoit une demande de connexion client, ALB renvoie au client un code d'état HTTP 502 Bad Gateway, car il ne parvient pas à transférer la requête vers un Pod ou à recevoir une réponse de celui-ci.

  • Erreur 404 (Not Found)

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

  • Erreur 400 (Bad Request)

    Plusieurs raisons peuvent expliquer cette erreur, comme l'envoi d'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 le statut de l'Ingress : exécutez la commande kubectl describe ingress <ingress-name> -n <namespace> et examinez la section Events pour repérer les 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 le statut et les journaux des pods : exécutez kubectl get pod -l <app=your-app> -n <namespace> pour afficher le statut des pods. Ensuite, utilisez le nom du pod pour exécuter kubectl logs <pod-name> -n <namespace> et examinez les journaux de l'application afin d'identifier 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 à l'adresse IP d'un pod, afin de vérifier que le service est accessible au sein du cluster.

Pourquoi l'accès HTTPS est-il impossible 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 bon Secret est référencé. Exécutez la commande kubectl get secret <secret-name> -n <namespace> -o yaml pour vérifier le type de Secret et l'intégrité des données.

Comment configurer la résolution de domaine pour l'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 domaine fonctionne correctement.

    Une fois l'accès établi, une page de test NGINX s'affiche, présentant des informations telles que l'adresse du serveur, le nom du serveur, 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.

    À des fins de vérification, remplacez l'exemple par votre nom de domaine enregistré. Si la résolution 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, puis demander un certificat. Assurez-vous que le certificat souhaité est dans l'état Issued.

  2. Télécharger le certificat SSL.

    Cet exemple illustre le téléchargement du 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 : Ingress 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 à 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 recherche.

    2. Dans la liste des objets de ressource AlbConfig, localisez 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'adresse du serveur, le nom du serveur 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.

    À des fins de 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 AlbConfig et 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 ci-dessous 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 d'ALB Ingress

Personnalisation des règles de transfert ALB Ingress

Réalisation d'un déploiement canari avec ALB Ingress