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
|
|
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
Connectez-vous à la console ACK et cliquez sur Create Kubernetes Cluster.
À l'étape Component Configuration, accédez à la section Ingress et sélectionnez ALB Ingress.
-
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
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Components and Add-ons .
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.
-
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
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur .
-
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.
Dans la boîte de dialogue de confirmation, cliquez sur View et vérifiez que l'état du Pod est
Running.
kubectl
-
Créez un fichier nommé
coffee-deployment-service.yamlcontenant le contenu suivant. -
Créez le Deployment et le Service pour l'application exemple.
kubectl apply -f coffee-deployment-service.yaml -
Vérifiez que l'état du Pod est
Running.kubectl get pod -l app=coffeeRé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
Dans le volet de navigation de gauche, choisissez . Sélectionnez le namespace
defaultet cliquez sur Create Ingress.-
Spécifiez les paramètres Ingress suivants et cliquez sur OK.
Name :
coffee-ingressDomain 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.
|
-
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. -
Testez l'accès au domaine et à l'endpoint. Un code d'état HTTP
200indique 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
-
Créez un fichier nommé
coffee-ingress.yamlavec le contenu suivant. Ensuite, exécutez la commandekubectl apply -f coffee-ingress.yamlpour 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.
| -
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 -
Testez l'accès au domaine et à l'endpoint. Un code d'état HTTP
200indique 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
AlbConfigcré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
tlsd'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
-
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 quelistener is not exist in albapparaî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 ... Vérifiez les endpoints backend : Exécutez la commande
kubectl get endpoints <service-name> -n <namespace>pour confirmer que le champENDPOINTSrépertorie au moins une adresse IP et un port de pod sain. S'il est vide, vérifiez que leselectordu Service correspond auxlabelsdes pods et que les pods sont dans l'étatRunning.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écuterkubectl 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.Testez la connectivité réseau : Depuis un pod ou depuis un nœud, utilisez
curlpour 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:443correspondant n'a pas été créé.Configuration incorrecte du certificat : Le type de Secret n'est pas
kubernetes.io/tlsouIngressTLS, ou le contenu detls.crtettls.keydans le champdataest 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
Vérifiez le port de l'écouteur : Exécutez la commande
kubectl describe albconfig <alb-name> -n <namespace>pour vérifier que les configurationsspec.listeners.port: 443etspec.listeners.protocol: HTTPSsont présentes.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.Vérifiez la configuration du Secret : Dans la configuration de l'Ingress, examinez le champ
secretNamedespec.tlspour confirmer que le Secret correct est référencé. Exécutez la commandekubectl get secret <secret-name> -n <namespace> -o yamlpour confirmer le type de Secret et l'intégrité des données.
Comment configurer la résolution de domaine pour un Ingress ?
-
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 queingress-demo.com) et la valeur d'enregistrement correspondant à l'adresse de l'endpoint Ingress . -
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 ?
Acheter un certificat officiel, et demander un certificat. Assurez-vous que le certificat que vous souhaitez utiliser est dans l'état Issued.
-
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 . -
Créez un Secret pour stocker le fichier de certificat.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur .
-
Sur la page Secrets, sélectionnez le namespace
defaultpuis cliquez sur Create à gauche. Ajoutez les configurations suivantes et cliquez sur OK.Name :
ingress-tlsType : 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).
-
Mettez à jour l'AlbConfig pour ajouter un écouteur
HTTPS:443pour l'instance ALB.Dans le volet de navigation de gauche, choisissez . Sous l'onglet Resource Objects, recherchez AlbConfig, puis cliquez sur le résultat de la recherche.
Dans la liste des objets de ressource AlbConfig, repérez la ressource cible
albet cliquez sur Edit YAML dans la colonne Actions.-
Ajoutez les champs
spec.listeners.port: 443etspec.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
-
Mettez à jour l'Ingress pour ajouter une configuration TLS et l'associer à l'écouteur
HTTPS:443.Dans le volet de navigation de gauche, choisissez . Dans la colonne Actions de l'Ingress cible, cliquez sur Update.
-
Ajoutez les configurations suivantes et cliquez sur OK.
TLS Settings : Activé
Domain Name :
ingress-demo.comSecrets :
ingress-tlsAnnotations :
alb.ingress.kubernetes.io/listen-ports: [{"HTTP": 80}, {"HTTPS": 443}]
-
Dans un navigateur, accédez à
https://ingress-demo.com/coffeepour 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
-
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 .
-
Remplacez
zoneMappings.vSwitchIddans 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écutezkubectl apply -f albconfig.yamlpour 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 champspec.parameters.namedoit ê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