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
|
|
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
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 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
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 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
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 le statut 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 le statut du Pod est
Running.kubectl get pod -l app=coffeeSortie 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
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/1ou/coffee/buy/1correspondent, mais les requêtes pour/cofou/coffeebuy/1ne correspondent pas.Exact
Fait correspondre le chemin de la requête exactement. Seules les requêtes pour
/coffeecorrespondent.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 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. -
Testez l'accès au domaine et à l'endpoint. Un code d'état HTTP de
200indique 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
-
Créez un fichier nommé
coffee-ingress.yamlavec le contenu suivant. Ensuite, exécutez la commandekubectl apply -f coffee-ingress.yamlpour 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: PrefixRè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/1ou/coffee/buy/1correspondent, mais les requêtes pour/cofou/coffeebuy/1ne correspondent pas.Exact
Fait correspondre le chemin de la requête exactement. Seules les requêtes pour
/coffeecorrespondent.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}'Sortie attendue :
alb-******************.cn-wulanchabu.alb.aliyuncsslb.com -
Testez l'accès au domaine et à l'endpoint. Un code d'état HTTP de
200indique 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
AlbConfigcré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
tlsd'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
-
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 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 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écuterkubectl 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.Testez la connectivité réseau : depuis un pod ou depuis un nœud, utilisez
curlpour 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: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 bon Secret est référencé. Exécutez la commandekubectl get secret <secret-name> -n <namespace> -o yamlpour vérifier le type de Secret et l'intégrité des données.
Comment configurer la résolution de domaine pour l'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 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 ?
Acheter un certificat officiel, puis demander un certificat. Assurez-vous que le certificat souhaité est dans l'état Issued.
-
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 . -
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 : 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).
-
Mettez à jour l'AlbConfig pour ajouter un écouteur
HTTPS:443à 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 recherche.
Dans la liste des objets de ressource AlbConfig, localisez 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'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
-
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 ci-dessous 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 d'ALB Ingress