Configuration d'Ingress
Créez une ressource Ingress pour configurer vos composants Ingress, définissez des règles pour les demandes de routage et spécifiez le chemin d'accès à vos services d'application. Une ressource Ingress distincte est requise pour chaque espace de nom qui contient une application ou un service que vous souhaitez exposer.
Avant de commencer
Suivez ces étapes de préparation avant de commencer.
-
Assurez-vous que vous disposez des autorisations nécessaires pour configurer Ingress. Les rôles IAMIBM Cloud suivants sont requis:
- 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é est requis pour exposer des applications sur des équilibreurs de charge d'application privés.
-
Si vous exposez des applications sur des équilibreurs de charge d'application privés, vous devez activer chaque équilibreur de charge d'application privé dans l'interface de ligne de commande. Pour obtenir l'ID ALB, exécutez
ibmcloud ks ingress alb ls --cluster CLUSTER
.Clusters classiques Pour plus d'informations et pour connaître les options de commande, voirRéférence de l'interface de ligne de commande.
ibmcloud ks ingress alb enable classic --alb <alb_id> --cluster <cluster_name>
Clusters de VPC Pour plus d'informations et pour connaître les options de commande, voirRéférence de l'interface de ligne de commande.
ibmcloud ks ingress alb enable vpc-gen2 --alb <alb_id> --cluster <cluster_name>
-
Assurez-vous que votre cluster inclut au moins deux noeuds worker par zone pour garantir la haute disponibilité et appliquer des mises à jour périodiques. Si vous ne disposez que d'un seul nœud worker dans une zone, l'ALB ne peut pas recevoir de mises à jour automatiques. Pour plus d'informations, voir Exigences relatives aux noeuds worker pour les équilibreurs de charge d'application.
-
Si vous utilisez un cluster classique, activez une fonction VRF(Virtual Router Function) pour votre compte d'infrastructure 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 VRF, activez Réseau local virtuel. 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. -
Si vous utilisez un cluster VPC, assurez-vous que les demandes de trafic qui sont acheminées par Ingress vers des ports de noeud sur vos noeuds worker sont autorisées dans les groupes de sécurité VPC.
-
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 de configuration d'Ingress.
Etape 1: Création d'un service ClusterIP
Un service ClusterIP
est requis pour rendre votre application accessible depuis le cluster afin que les demandes externes puissent être transmises au pod d'application. Pour être inclus dans l'équilibrage de charge Ingress, les
noms des services ClusterIP
qui exposent vos applications doivent être uniques dans tous les espaces de noms de votre cluster.
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>
Etape 2: Configuration de la terminaison TLS avec des certificats TLS et des secrets Kubernetes
Votre certificat TLS doit être stocké en tant que secret Kubernetes dans chaque espace de nom où se trouvent vos applications.
-
Pour utiliser le sous-domaine Ingress fourni par IBM, voir Configuration de secrets TLS pour le sous-domaine Ingress fourni par IBM.
-
Pour utiliser un domaine personnalisé, voir Configuration de secrets TLS pour des sous-domaines personnalisés.
Etape 3 : Créez la ressource Ingress
Créez la ressource Ingress pour définir les règles de routage que le contrôleur Ingress utilise pour acheminer le trafic vers votre service applicatif.
-
Créez la ressource Ingress dans un fichier YAML.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress-resource spec: ingressClassName: nginx-example 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
annotations
-
kubernetes.io/ingress.class
: spécifiez la classe Ingress à appliquer. Les classes Ingress fournies par IBMsont"public-iks-k8s-nginx"
pour les équilibreurs de charge d'application publics et"private-iks-k8s-nginx"
pour les équilibreurs de charge d'application privés.- Spécifiez cette classe personnalisée dans une ressource
IngressClass
et dans une mappe de configurationibm-ingress-deploy-config
. Pour personnaliser le routage pour Ingress, vous pouvez ajouter des annotations Kubernetes NGINX (nginx.ingress.kubernetes.io/<annotation>
). Les annotations personnalisées IBM Cloud Kubernetes Service (ingress.bluemix.net/<annotation>
) ne sont pas prises en charge. - Note : Pour les configurations dans lesquelles un autre composant gère vos ALB Ingress, par exemple si Ingress est déployé dans le cadre d'un Helm chart, ne spécifiez pas cette annotation. Au lieu de cela, recherchez la classe Ingress
correspondant à votre configuration et indiquez-la dans un champ
spec.ingressClassName: <class_name>
.
ingressClassName
- Nom de la classe Ingress. Les classes Ingress fournies par IBMsont
public-iks-k8s-nginx
pour les équilibreurs de charge d'application publics etprivate-iks-k8s-nginx
pour les équilibreurs de charge d'application 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 votre certificat TLS est stocké. 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é pour 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
,Exact
ouPrefix
. Pour plus d'informations et d'exemples sur chaque type de chemin, consultez la documentation communautaire Kubernetes. service.name
- Remplacez
app1_service
etapp2_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 nom. 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 nom. 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>
Etape 4: Vérification de votre configuration Ingress
-
Listez vos ALB et copiez l'adresse IP (classique) ou le nom d'hôte (VPC) d'un ALB qui exécute l'image Kubernetes Ingress. 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 (classique) ou le nom d'hôte (VPC) de l'ALB, le chemin d'accès à l'application et votre domaine pour vérifier que vous pouvez envoyer du trafic à 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
myapp
en 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>
.
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 avec Ingress sur des équilibreurs de charge d'application privés requièrent un domaine personnalisé.
Création de domaines personnalisés pour les équilibreurs de charge d'application publics
Procédez comme suit pour créer un domaine personnalisé pour les équilibreurs de charge d'application publics.
-
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
. Notez que les domaines sont limités à 130 caractères ou moins dans Kubernetes version 1.20 ou ultérieure. -
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_name>
et recherchez la zone Sous-domaine Ingress.La spécification du sous-domaine fourni par IBMen tant que CNAME est requise pour les diagnostics d'intégrité automatiques afin de supprimer les adresses IP défaillantes de la réponse DNS et de s'assurer que votre domaine personnalisé est mis à jour lorsque vous ajoutez ou supprimez des équilibreurs de charge d'application.
Création de domaines personnalisés pour les équilibreurs de charge d'application privés
Procédez comme suit pour créer un domaine personnalisé pour les équilibreurs de charge d'application privés. Notez que les domaines personnalisés sont requis pour utiliser Ingress avec des équilibreurs de charge d'application privés.
Si vous disposez d'un cluster classique avec uniquement un VLAN privé, vous devez d'abord configurer votre propre service DNS disponible sur 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 ou moins.
-
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>
.