Configuration d'Ingress
Créez une ressource Ingress pour configurer vos composants Ingress, définir des règles de routage des requêtes et spécifier le chemin d'accès à vos services d'application. Une ressource Ingress distincte est requise pour chaque espace de noms contenant une application ou un service que vous souhaitez exposer.
Avant de commencer
Suivez ces étapes de préparation avant de commencer.
-
Assurez-vous de disposer des autorisations nécessaires pour configurer Ingress. Les IBM Cloud Rôles IAM s suivantes sont requises :
- Rôle d'accès à la plateforme Administrateur pour le cluster
- Rôle d'accès au service Responsable dans tous les espaces de nom
-
Déterminez si vous souhaitez utiliser le sous-domaine Ingress fourni par IBM. Si vous ne souhaitez pas utiliser le sous-domaine fourni, vous devez créer et enregistrer votre propre domaine personnalisé.
Un domaine personnalisé, ou la configuration manuelle des domaines fournis par IBM, est nécessaire pour rendre les applications accessibles via des ALB privés.
-
Assurez-vous que l'ALB que vous comptez utiliser correspond bien à la version attendue. Exécutez la commande «
ibmcloud ks ingress alb versions» pour afficher la liste des versions actuellement prises en charge, puis comparez-la au résultat de la commande «ibmcloud ks ingress alb ls --cluster CLUSTER». Si vous suivez cette documentation, vous êtes censé exécuter un Ingress basé sur Traefik; pour obtenir des instructions spécifiques à Ingress- NGINX, veuillez vous reporter à la documentation correspondante. -
Si vous publiez des applications via des ALB privés, vous devez activer chaque ALB privé via l'interface de ligne de commande (CLI). Pour obtenir l'ID de l'ALB, exécutez
ibmcloud ks ingress alb ls --cluster CLUSTER.
Clusters classiques Pour plus d'informations et pour connaître les options de commande, consultez leguide de référence de l'interface en ligne de commande(CLI).
sh {: pre} ibmcloud ks ingress alb enable classic --alb ALB_ID --cluster CLUSTER_NAME
Clusters VPC Pour plus d'informations et pour connaître les options de commande, consultez leguide de référence de l'interface en ligne de commande(CLI).
sh {: pre} ibmcloud ks ingress alb enable vpc-gen2 --alb ALB_ID --cluster CLUSTER_NAME
-
Assurez-vous que votre cluster comprend au moins deux nœuds de travail par zone afin de garantir une haute disponibilité et de pouvoir appliquer les mises à jour périodiques. Si une zone ne comporte qu'un seul nœud de travail, l'ALB ne peut pas recevoir de mises à jour automatiques. Pour plus d'informations, consultez la section « Configuration requise pour les nœuds de travail des ALB ».
-
Si vous utilisez un cluster classique, activez une fonction de routeur virtuel(VRF) pour votre compte d' IBM Cloud.
- Pour activer la fonction VRF, voir Activation de VRF.
- Pour vérifier si la fonction VRF est déjà activée, utilisez la commande
ibmcloud account show. - Si vous ne pouvez pas ou ne souhaitez pas activer le VRF, activez le VLAN spanning. Lorsqu'une fonction VRF ou Spanning VLAN est activée, l'équilibreur de charge d'application (ALB) peut router des paquets vers différents sous-réseaux dans le compte.
-
Pour les clusters VPC, assurez-vous que vos groupes de sécurité VPC autorisent les ports des nœuds à recevoir les requêtes de trafic acheminées par Ingress. Pour plus d'informations, consultez la section « Comprendre la mise en réseau VPC des clusters « Secure by Default » ».
-
Sachez que si vous créez et supprimez un cluster ayant un nom identique ou similaire au moins 5 fois sur une période de 7 jours, à des fins d'automatisation ou de test, vous atteindrez peut-être la limite de certificats dupliqués de Let's Encrypt. Pour que le sous-domaine Ingress et le certificat soient correctement enregistrés, les 24 premiers caractères du nom des clusters doivent être différents.
-
Si vous limitez le trafic réseau aux noeuds worker de périphérie, vérifiez qu'au moins deux noeuds worker de périphérie sont activés dans chaque zone pour assurer le déploiement uniforme des équilibreurs de charge d'application.
En cas d'échec d'une zone, vous pourrez constater des défaillances intermittentes au niveau des demandes adressées à l'équilibreur de charge d'application Ingress dans cette zone.
Etapes de configuration
Suivez les étapes suivantes pour configurer Ingress.
Étape 1 : Créer un service « ClusterIP »
Pour chaque déploiement d'application que vous souhaitez exposer, créez un service Kubernetes ClusterIP. Votre application doit être exposée par un service Kubernetes pour être incluse dans l'équilibrage de charge Ingress.
kubectl expose deploy <app_deployment_name> --name my-app-svc --port <app_port> -n <namespace>
Étape 2 : Configurer la terminaison d' TLS avec les certificats TLS et les secrets Kubernetes
Votre certificat « TLS » doit être enregistré en tant que secret « Kubernetes » dans chaque espace de noms où se trouvent vos applications.
-
Pour utiliser le sous-domaine Ingress fourni par IBM, consultez la section « Configuration des secrets TLS pour le sous-domaine Ingress fourni par IBM ».
-
Pour utiliser un domaine personnalisé, consultez la section « Configuration des secrets d' TLS pour les sous-domaines personnalisés ».
Etape 3 : Créez la ressource Ingress
Créez la ressource Ingress afin de définir les règles de routage que le contrôleur Ingress utilise pour acheminer le trafic vers votre service d'application.
-
Créez la ressource Ingress dans un fichier YAML.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress-resource spec: ingressClassName: public-iks-traefik tls: - hosts: - <domain_name> secretName: <tls_secret_name> rules: - host: HOSTNAME http: paths: - path: <app_path_1> pathType: Prefix backend: service: name: <app_service_1> port: number: 80 - path: <app_path_2> pathType: Prefix backend: service: name: <app_service_2> port: number: 80
Champs de ressources
ingressClassName- Le nom de la classe Ingress. Les classes Ingress fournies par l' IBM sont
public-iks-traefikpour les ALB publics etprivate-iks-traefikpour les ALB privés. tls.hosts- Pour utiliser TLS, remplacez
<domain>par le sous-domaine Ingress fourni par IBM ou votre domaine personnalisé. tls.secretName- Remplacez «
<tls_secret_name>» par le nom du secret « Kubernetes » dans lequel est stocké votre certificat « TLS ». host- Remplacez
<domain>par le sous-domaine Ingress fournir par IBM ou votre domaine personnalisé. path- Remplacez
<app_path>par une barre oblique ou le chemin que votre application écoute. Le chemin est ajouté au domaine Ingress spécifié afin de créer un itinéraire unique vers votre application. Lorsque vous indiquez cette route dans un navigateur Web, le trafic réseau est acheminé vers l'équilibreur de charge d'application. L'équilibreur de charge d'application recherche le service associé et lui envoie le trafic réseau. Le service transfère ensuite le trafic aux pods sur lesquels s'exécute l'application. pathType- Méthode de correspondance de chemin d'URL. Les valeurs prises en charge sont
ImplementationSpecific,ExactouPrefix. Pour plus d'informations et des exemples sur chaque type de chemin d'accès, consultez la documentation de la communauté sur l' Kubernetes. service.name- Remplacez
app1_serviceetapp2_service, et ainsi de suite, par le nom des services que vous avez créés pour exposer vos applications. Assurez-vous que les applications que vous spécifiez se trouvent dans le même espace de noms. service.name- Remplacez
<app1_service>et<app2_service>, et ainsi de suite, par le nom des services que vous avez créés pour exposer vos applications. Assurez-vous que les applications que vous spécifiez se trouvent dans le même espace de noms. service.port.number- Port sur lequel votre service est à l'écoute. Utilisez le même port que celui que vous avez défini lors de la création du service Kubernetes pour votre application.
- Appliquez la ressource Ingress à votre cluster. Veillez à ce que la ressource se déploie dans le même espace de noms que les services d'application que vous avez spécifiés dans la ressource.
kubectl apply -f community-ingress-resource.yaml -n <namespace>
Étape 4 : Vérifiez la configuration d'Ingress
-
Répertoriez vos ALB et copiez l'adresse IP (classique) ou le nom d'hôte (VPC) d'un ALB exécutant l'image Ingress Kubernetes. Dans la sortie, choisissez un ALB ayant une génération dans le format
<community_version>_<ibm_build>_iks.ibmcloud ks ingress alb ls -c CLUSTER -
Utilisez l'adresse IP de l'ALB (classique) ou son nom d'hôte (VPC), le chemin d'accès à l'application et votre domaine pour vérifier que vous pouvez bien acheminer le trafic vers votre application via cet ALB.
curl http://<ALB_IP>/<app_path> -H "Host: <ingress_subdomain>"Par exemple, pour envoyer une requête à une application appelée
myappen utilisant un sous-domaine Ingress par défaut, exécutez la commande suivante.curl http://169.X.X.X/myapp -H "Host: mycluster-a1b2cdef345678g9hi012j3kl4567890-0000.us-south.containers.appdomain.cloud"
Vous rencontrez des difficultés pour connecter votre application via Ingress ? Essayez de procéder au traitement des incidents liés à Ingress. Vous pouvez vérifier l'intégrité et
l'état de vos composants Ingress en exécutant ibmcloud ks ingress status-report get -c CLUSTER_NAME_OR_ID.
CRD Traefik
En plus des ressources Ingress disponibles sur Kubernetes. Les contrôleurs d'accès basés sur Traefik permettent d'utiliser les ressources définies par les définitions de ressources personnalisées (CRD) de Traefik. Le CRD requis est automatiquement déployé sur le cluster lorsqu'un ALB basé sur Traefik est activé. La version du CRD déployée correspond toujours à la version la plus récente des ALB Traefik déployés. Pour plus d'informations sur les ressources personnalisées, consultez la documentation de Traefik.
Parfois, selon la configuration, les CR Traefik peuvent vous demander de préciser les noms des points d'entrée. Sur IBM Cloud Kubernetes Service, les noms par défaut des points d'entrée sont web pour le trafic en clair HTTP (associé
par défaut au port 80 ) et websecure pour le trafic chiffré TLS HTTPS (associé par défaut au port 443 ). Vous pouvez configurer des ports ou créer des points d'entrée supplémentaires si votre application le nécessite.
Prise en charge des annotations Ingress- NGINX s dans Traefik
Traefik intègre une couche de compatibilité qui traite les annotations spécifiques à Ingress- NGINX. Cette fonctionnalité est désactivée par défaut sur IBM Cloud Kubernetes Service. Si vous activez cette option, le traitement des annotations
spécifiques à Traefik sera désactivé; seules les annotations spécifiques à Ingress ( NGINX ) seront traitées par l'ALB. L'option « ingressProvider » (Activer/désactiver la mise en surbrillance des mots) dans le ibm-ingress-deploy-config ConfigMap permet d’activer ou de désactiver cette fonctionnalité.
Pour plus d'informations sur la prise en charge des annotations, consultez la documentation de Traefik.
Domaines personnalisés avec Ingress
Si vous ne souhaitez pas utiliser le sous-domaine Ingress fourni par IBM, vous pouvez utiliser votre propre domaine personnalisé, que vous spécifiez dans votre ressource Ingress. Notez que les applications exposées via Ingress sur des ALB privés nécessitent un domaine personnalisé ou la configuration manuelle des domaines fournis par IBM.
Création de domaines personnalisés pour les ALB publiques
Suivez les étapes suivantes pour créer un domaine personnalisé pour les ALB publiques.
-
Créez un domaine personnalisé Pour enregistrer votre domaine personnalisé, travaillez en collaboration avec votre fournisseur DNS (Domain Name Service) ou IBM Cloud DNS. Si les applications que vous souhaitez exposer via Ingress se trouvent dans différents espaces de noms sur un cluster, enregistrez le domaine personnalisé en tant que domaine générique, par exemple
*.custom_domain.net. Veuillez noter que la longueur des noms de domaine est limitée à 130 caractères maximum dans la version 1.20 ou ultérieure d' Kubernetes. -
Définissez un alias pour votre domaine personnalisé en spécifiant le sous-domaine fourni par IBM sous forme d'enregistrement de nom canonique (CNAME). Pour rechercher le domaine Ingress fourni par IBM, exécutez
ibmcloud ks cluster get --cluster CLUSTER_NAMEet recherchez la zone Sous-domaine Ingress.Il est nécessaire de définir le sous-domaine fourni par IBM en tant que CNAME pour que les contrôles d'intégrité automatiques puissent exclure les adresses IP défaillantes de la réponse DNS, et pour garantir la mise à jour de votre domaine personnalisé lorsque vous ajoutez ou supprimez des ALB.
Création de domaines personnalisés pour les ALB privés
Suivez les étapes suivantes pour créer un domaine personnalisé pour les ALB privées. Notez que l'utilisation d'Ingress avec des ALB privés nécessite des domaines personnalisés.
Si vous disposez d'un cluster classique comportant uniquement un VLAN privé, vous devez d'abord configurer votre propre service DNS accessible depuis votre réseau privé.
-
Créez un domaine personnalisé via votre fournisseur de service DNS. Notez que les URL Ingress doivent comporter 130 caractères au maximum.
-
Mappez votre domaine personnalisé aux équilibreurs de charge d'application privés en ajoutant leurs adresses IP en tant qu'enregistrements A (clusters classiques) ou leur nom d'hôte VPC en tant qu'enregistrement CNAME (clusters VPC). Pour rechercher les adresses IP des ALB (classiques) ou le nom d'hôte (VPC), exécutez
ibmcloud ks ingress alb ls -c CLUSTER_NAME_OR_ID.