Clusters Kubernetes multirégions résilients et sécurisés avec IBM Cloud Internet Services
Ce tutoriel peut entraîner des coûts. Utilisez l'Estimateur de coûts pour générer une estimation du coût en fonction de votre utilisation projetée.
Les utilisateurs sont moins susceptibles de connaître des temps d'indisponibilité lorsqu'une application est conçue dans un esprit de résilience. Lorsque vous implémentez une solution avec Kubernetes Service, vous bénéficiez de fonctionnalités intégrées, telles que l'équilibrage de charge et l'isolement, d'une résilience accrue après de potentielles défaillances des hôtes, des réseaux ou des applications. En créant plusieurs grappes, si une panne survient dans une grappe, les utilisateurs peuvent toujours accéder à une application qui est également déployée dans une autre grappe. Avec de nombreux clusters situés à différents endroits, les utilisateurs peuvent également accéder au cluster le plus proche et réduire la latence du réseau. Pour plus de résilience, vous avez la possibilité de sélectionner des clusters multizones, ce qui signifie que vos nœuds sont déployés dans plusieurs zones au sein d'un même site.
Ce tutoriel montre comment Cloud Internet Services (CIS), une plateforme uniforme pour configurer et gérer le système de noms de domaine (DNS), l'équilibrage de charge global (GLB), le pare-feu d'application Web (WAF) et la protection contre les dénis de service distribués ( DDoS ) pour les applications Internet, peut être intégré avec les clusters Kubernetes pour soutenir ce scénario et fournir une solution sécurisée et résiliente à travers de nombreux sites.
Objectifs
- Déployer une application sur plusieurs clusters Kubernetes à différents endroits.
- Distribuer le trafic sur plusieurs clusters avec un équilibreur de charge global.
- Router les utilisateurs vers le cluster le plus proche.
- Protéger votre application des menaces de sécurité.
- Augmenter les performances des applications avec la mise en cache.
- Le développeur crée une image Docker pour l'application.
- L'image est poussée vers un site Container Registry.
- L'application est déployée dans des clusters Kubernetes à Dallas et à Londres.
- Les utilisateurs finaux accèdent à l'application.
- IBM Cloud Internet Services est configuré pour intercepter les demandes adressées à l'application et pour répartir la charge entre les clusters. En outre, DDoS Protection et Web Application Firewall sont activés pour protéger l'application des menaces courantes. Les actifs, tels que les images et les fichiers CSS, sont éventuellement mis en cache.
Avant de commencer
Pour ce tutoriel, vous devez disposer des éléments suivants :
- IBM Cloud CLI,
- du plug-in IBM Cloud Kubernetes Service (
kubernetes-service),
- du plug-in IBM Cloud Kubernetes Service (
- de
kubectlpour interagir avec des clusters Kubernetes,
Vous trouverez les instructions pour télécharger et installer ces outils pour votre environnement d'exploitation dans le guide " Getting started with solution tutorials ".
De plus, veillez à :
- posséder un domaine personnalisé afin de pouvoir configurer le DNS de ce domaine de telle sorte qu'il désigne les serveurs de noms IBM Cloud Internet Services,
- et comprendre les bases de Kubernetes.
Déploiement d'une application sur un emplacement
Ce tutoriel permet de déployer une application Kubernetes sur des clusters répartis sur plusieurs sites. Vous commencez par un emplacement, Dallas, puis répétez ces étapes pour Londres.
Création d'un cluster Kubernetes
Un cluster minimal avec une (1) zone, un (1) nœud de travail est suffisant pour ce tutoriel.
Lors de la création du cluster Kubernetes suivant:
-
Définissez Nom du cluster sur my-us-cluster.
-
Choisissez les emplacements Amérique du Nord et Dallas
-
Ouvrez les clusters Kubernetes et cliquez sur Créer un cluster.
-
Créez un cluster sur l'infrastructure de votre choix.
-
Les étapes suivantes s'appliquent si vous sélectionnez VPC pour Kubernetes sur l'infrastructure VPC. Vous devez créer un VPC et un ou plusieurs sous-réseaux avant de créer le cluster Kubernetes. Pour plus de détails, consultez la documentation Creating VPC clusters.
- Cliquez sur Créer un VPC.
- Dans la section Emplacement, sélectionnez une Zone géographique et une Région, par exemple
North AmericaetDallas. - Saisissez le nom de votre VPC, sélectionnez un groupe de ressources et ajoutez éventuellement des balises pour organiser vos ressources.
- Désélectionnez Autoriser SSH et Autoriser la commande ping à partir du Groupe de sécurité par défaut.
- Décochez la case Créer un sous-réseau dans chaque zone.
- Cliquez sur Créer.
- Sous Zones de noeud worker et sous-réseaux, désélectionnez les deux zones pour lesquelles le sous-réseau n'a pas été créé.
- Réglez le paramètre Nœuds de travail par zone sur
1et cliquez sur Changer de saveur pour explorer et changer la saveur des nœuds de travail de votre choix. - Sous Ingress, activez la gestion des secrets Ingress et sélectionnez votre instance Secrets Manager existante.
- Entrez un nom de cluster et sélectionnez le même groupe de ressources que celui que vous avez utilisé pour le VPC.
- La journalisation ou la surveillance ne sont pas requises dans ce tutoriel, désactivez ces options et cliquez sur Créer.
- En attendant que le cluster devienne actif, connectez une passerelle publique au VPC. Accédez aux clouds privés virtuels.
- Cliquez sur le nom du VPC utilisé par le cluster et faites défiler jusqu'à la section des sous-réseaux.
- Cliquez sur le nom du sous-réseau créé précédemment et dans la section Public Gateway, cliquez sur Déconnecté pour changer l'état en Connecté.
-
Les étapes suivantes sont disponibles si vous sélectionnez Classic pour l'infrastructure Kubernetes on Classic. Pour plus d'informations, reportez-vous à la documentation Création d'un cluster classique standard.
- Dans la section Emplacement, sélectionnez une zone Géographie, Disponibilitémultizone et Métro, par exemple
North AmericaetDallas. - Sous Zones de noeud worker et VLAN, désélectionnez toutes les zones sauf une.
- Réglez le paramètre Nœuds de travail par zone sur
1et cliquez sur Changer de saveur pour explorer et changer la saveur des nœuds de travail de votre choix. - Sous Noeud final de service maître, sélectionnez Noeuds finaux privés et publics.
- Sous Ingress, activez la gestion des secrets Ingress et sélectionnez votre instance Secrets Manager existante.
- Entrez un nom de cluster et sélectionnez le groupe de ressources sous lequel créer ces ressources.
- La journalisation ou la surveillance ne sont pas requises dans ce tutoriel, désactivez ces options et cliquez sur Créer.
- Dans la section Emplacement, sélectionnez une zone Géographie, Disponibilitémultizone et Métro, par exemple
-
Pendant la préparation du cluster, vous allez préparer l'application.
Déploiement de l'application dans le cluster Kubernetes
Le cluster devrait être prêt. Vous pouvez vérifier son statut dans la console Kubernetes Service.
-
Accédez à votre cluster comme décrit dans l'onglet Accès de votre cluster. Par exemple :
MYCLUSTER=my-us-cluster ibmcloud ks cluster config --cluster $MYCLUSTER -
Créez le déploiement à l'aide d'une image préconstruite de l'application. Le code source de l'application se trouve dans ce référentielGitHub.
kubectl create deploy hello-world-deployment --image=icr.io/solution-tutorials/tutorial-scalable-webapp-kubernetesExemple de sortie :
deployment "hello-world-deployment" created. -
Rendez l'application accessible au sein du cluster en créant un service :
kubectl expose deployment/hello-world-deployment --type=ClusterIP --port=80 --name=hello-world-service --target-port=3000Le message renvoyé est similaire à
service "hello-world-service" exposed. Pour voir les services :kubectl get services -
Exécutez l'application dans le cluster avec deux répliques :
kubectl scale deployment hello-world-deployment --replicas=2 -
Vous pouvez vérifier le statut du déploiement à l'aide de la commande suivante :
kubectl get pods
Obtention du sous-domaine Ingress affecté au cluster
Lorsqu'un cluster Kubernetes est créé, il se voit attribuer un sous-domaine Ingress (par exemple, my-us-cluster.us-south.containers.appdomain.cloud ) et une adresse IP publique de l'équilibreur de charge d'application.
- Extrayez le sous-domaine Ingress du cluster :
Recherchez la valeur duibmcloud ks cluster get --cluster $MYCLUSTERIngress Subdomain. - Notez ces informations pour une étape ultérieure.
Ce tutoriel utilise le sous-domaine Ingress pour configurer l'équilibreur de charge global. Vous pouvez également remplacer le sous-domaine Ingress par l'équilibreur de charge d'application public (ALB) du cluster. Un site <IngressSubdomain> ressemble à quelque chose comme my-us-cluster-e7f2ca73139645ddf61a8702003a483a-0000.us-south.containers.appdomain.cloud
Configuration d'Ingress pour votre sous-domaine DNS
Il sera nécessaire d'avoir votre propre nom de domaine DNS et un sous-domaine d'équilibreur de charge global sera créé dans la tâche suivante : <glb_name>.<your_domain_name>. Quelque chose comme hello-world-service.example.com
<glb_name> = hello-world-service et <your_domain_name> = example.com
- Créez le fichier glb-ingress.yaml et remplacez les marques de réservation par leurs valeurs respectives :
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: <glb-name> annotations: spec.ingressClassName: "public-iks-k8s-nginx" spec: rules: - host: <glb-name>.<your_domain_name> http: paths: - path: / pathType: Prefix backend: service: name: hello-world-service port: number: 80 - Ajoutez l'instance Ingress :
Quelques minutes peuvent être nécessaires avant qu'Ingress soit devienne disponible, comme indiqué par une valeur dans la colonne ADDRESS de la commande :kubectl apply -f glb-ingress.yamlkubectl get ingress - Maintenant, testez en configurant l'en-tête http curl Host avec votre nom de sous-domaine DNS pour remplacer la valeur par défaut de
<IngressSubdomain>:La commande curl ressemblerait à ceci :curl --header 'Host: <glb_name>.<your_domain_name>' <IngressSubdomain>/hostnamecurl --header 'Host: hello-world-service.ibmom.com' my-us-cluster-e7f2ca73139645ddf61a8702003a483a-0000.us-south.containers.appdomain.cloud/hostname
Déploiement d'une application sur un autre emplacement
Répétez les étapes précédentes pour l'emplacement de Londres avec les remplacements suivants:
- Dans Création d'un cluster Kubernetes, remplacez :
- le nom de cluster my-us-cluster par my-uk-cluster ;
- l'emplacement Amérique du Nord et Dallas avec Europe et Londres.
- Dans Déploiement de l'application dans le cluster Kubernetes, remplacez :
- MYCLUSTER= my-us-cluster par my-uk-cluster.
- Configurez Ingress pour le sous-domaine DNS
Configuration de l'équilibrage de charge sur plusieurs emplacements
Votre application s'exécute maintenant dans deux clusters, mais il manque un composant pour que les utilisateurs puissent accéder à l'un ou à l'autre des clusters de manière transparente à partir d'un seul point d'entrée.
Dans cette section, vous allez configurer IBM Cloud Internet Services ( CIS ) pour répartir la charge entre les deux clusters. CIS est un service à guichet unique qui fournit un équilibreur de charge global (GLB), une mise en cache, un pare-feu d'application Web (WAF) et une règle de page pour sécuriser vos applications tout en garantissant la fiabilité et la performance de vos applications en nuage.
Pour configurer un équilibreur de charge global, vous devez :
- faire pointer un domaine personnalisé vers des serveurs de noms CIS,
- extraire le sous-domaine Ingress des clusters Kubernetes,
- configurer des diagnostics d'intégrité pour valider la disponibilité de votre application,
- et définir des pools d'origine pointant vers les clusters.
Enregistrement d'un domaine personnalisé avec IBM Cloud Internet Services
La première étape consiste à créer une instance de CIS et de faire pointer votre domaine personnalisé vers des serveurs de noms CIS.
-
Si vous ne possédez pas de domaine, vous pouvez en acheter un auprès d'un bureau d'enregistrement.
-
Accédez à IBM Cloud Internet Services dans le catalogue IBM Cloud.
-
Sélectionnez un plan, définissez le nom du service et le groupe de ressources, puis cliquez sur Créer pour créer une instance du service.
-
Lorsque l'instance de service est mise à disposition, cliquez sur Ajouter un domaine.
-
Entrez votre nom de domaine et cliquez sur Suivant.
-
La configuration de vos enregistrements DNS est une étape facultative et peut être ignorée pour ce tutoriel. Cliquez sur Suivant.
-
Lorsque les serveurs de noms sont attribués, configurez votre registraire ou votre fournisseur de nom de domaine pour utiliser les serveurs de noms répertoriés.
-
Á ce stade, vous pouvez cliquer sur Annuler pour revenir à la page principale, une fois que vous avez configuré votre unité d'enregistrement ou le fournisseur DNS, cela peut nécessiter jusqu'à 24 heures pour que les modifications prennent effet.
Lorsque le statut du domaine sur la Page de présentation passe de En attente à Actif, vous pouvez utiliser la
dig <your_domain_name> nscommande pour vérifier que les nouveaux serveurs de noms sont entrés en vigueur.
Configuration du diagnostic d'intégrité pour l'équilibreur de charge global
Les diagnostics d'intégrité surveillent les réponses aux demandes HTTP/HTTPS depuis des pools d'origine sur un intervalle défini. Ils servent à déterminer si les pools fonctionnent toujours correctement.
-
Dans le tableau de bord IBM Cloud Internet Services, utilisez le menu de navigation pour sélectionner Fiabilité > Global Load Balancers.
-
Ouvrez l'onglet Diagnostics d'intégrité et cliquez sur Créer.
- Définissez Nom sur hello-world-service.
- Définissez Type de moniteur sur HTTP.
- Définissez Port sur 80.
- Définissez Chemin sur /.
- Dans le fichier Configurer les en-têtes de requête (facultatif) , ajoutez le nom de l'en-tête:
Hostet la valeur :<glb_name>.<your_domain_name> - Cliquez sur Créer.
Lors de la génération de vos propres applications, vous pouvez définir un noeud final de santé dédié, tel que /heathz, dans lequel vous pouvez signaler l'état de l'application.
Définition des pools d'origine
Un pool est un groupe de serveurs d'origines vers lequel est acheminé le trafic lorsqu'il est associé à un GLB. Avec des clusters au Royaume-Uni et aux États-Unis, vous pouvez définir des pools basés sur l'emplacement et configurer CIS pour rediriger les utilisateurs vers les clusters les plus proches, en fonction de l'emplacement géographique des demandes des utilisateurs.
Un pool pour le cluster à Dallas
- Sélectionnez l'onglet Pools d'origine et cliquez sur Créer.
- Définir le nom sur
US. - Définissez Nom d'origine sur
us-cluster. - Définissez Origin Address sur le service kubernetes
<IngressSubdomain>imprimé paribmcloud ks cluster get --cluster $MYCLUSTERpour le cluster US. - Définissez le bilan de santé sur celui créé dans la section précédente.
- Réglez la région du bilan de santé sur
Western North America. - Cliquez sur Sauvegarder.
Un pool pour le cluster à Londres
- Sélectionnez l'onglet Pools d'origine et cliquez sur Créer.
- Définir le nom sur
UK. - Définissez Nom d'origine sur
uk-cluster. - Définissez Origin Address sur le service kubernetes
<IngressSubdomain>imprimé paribmcloud ks cluster get --cluster $MYCLUSTERpour le cluster UK. - Définissez le bilan de santé sur celui créé dans la section précédente.
- Réglez la région du bilan de santé sur
Western Europe. - Cliquez sur Sauvegarder.
Création de l'équilibreur de charge global
Une fois les pools d'origine définis, vous pouvez effectuer la configuration de l'équilibreur de charge.
-
Sélectionnez l'onglet Equilibreurs de charge et cliquez sur Créer.
-
Entrez un nom,
<glb_name>, sous Nom pour l'équilibreur de charge global. Ce nom fera également partie de votre URL d'application universelle (http://<glb_name>.<your_domain_name>), quel que soit l'emplacement. -
Sous Itinéraires géographiques, cliquez sur Ajouter un itinéraire.
- Sélectionnez Défaut dans le menu déroulant Région.
- Sélectionnez la piscine US.
- Cliquez sur Ajouter.
Répétez le processus pour créer les éléments suivants :
Liste des routes géographiques à créer Région Pool d'origines Valeur par défaut US Europe occidentale Royaume-Uni Europe de l'Est Royaume-Uni Asie du Nord-Est Royaume-Uni Asie du Sud-Est Royaume-Uni Ouest de l'Amérique du Nord US Est de l'Amérique du Nord US Avec cette configuration, les utilisateurs d'Europe et d'Asie sont redirigés vers le cluster situé à Londres, les utilisateurs des Etats-Unis vers le cluster de Dallas. Lorsqu'une demande ne correspond à aucun des itinéraires définis, elle est redirigée vers le(s) pool(s) de la région par défaut.
-
Cliquez sur Créer.
À ce stade, vous avez configuré avec succès un équilibreur de charge global avec des grappes Kubernetes réparties sur plusieurs sites. Vous pouvez accéder à l'URL GLB http://<glb_name>.<your_domain_name>/hostname pour
afficher votre application. En fonction de votre emplacement, vous êtes redirigé vers le cluster le plus proche ou vers un cluster du pool par défaut si CIS n'a pas été en mesure de mapper votre adresse IP avec un emplacement spécifique.
Sécurisation de l'application
Activation du Pare-feu d'application Web
Le pare-feu d'application Web (Web Application Firewall - WAF) protège votre application Web contre les attaques de la couche 7 du modèle OSI. Habituellement, il est combiné à des jeux de règles groupés. Ces jeux de règles visent à protéger contre les vulnérabilités de l'application en exfiltrant le trafic malveillant.
- Dans le tableau de bord IBM Cloud Internet Services, accédez à Sécurité, puis à l'onglet WAF.
- Assurez-vous que le pare-feu d'application Web (WAF) est Activé.
- Cliquez sur Jeu de règles OWASP. Sur cette page, vous pouvez passer en revue le jeu de règles OWASP Core Rule Set (CRS) et activer ou désactiver individuellement les règles. Lorsqu'une règle est activée,
si une requête entrante déclenche la règle, le score de menace globale sera augmenté. Le paramètre Sensibilité détermine si une Action est déclenchée pour la demande.
- Conservez les jeux de règles OWASP par défaut tels quels.
- Définissez Sensibilité sur
Low. - Définissez Action sur
Simulatepour enregistrer tous les événements.
- Cliquez sur Jeu de règles CIS. Cette page présente des règles supplémentaires basées sur des piles technologiques courantes pour l'hébergement de sites Web.
Pour une connexion sécurisée avec HTTPS, vous pouvez obtenir un certificat auprès de Let's Encrypt ou par l'intermédiaire de IBM Cloud Secrets Manager.
Augmentation des performances et protection contre les attaques par déni de service
Une attaque par déni de service distribué (DDoS) est une tentative malveillante de perturber le trafic normal d'un serveur, d'un service ou d'un réseau en écrasant la cible ou son infrastructure environnante avec un flot de trafic Internet. CIS est équipé pour protéger votre domaine de DDoS.
-
Dans le tableau de bord CIS, sélectionnez Fiabilité > Equilibreur de charge global.
-
Localisez le GLB que vous avez créé dans le tableau Equilibreurs de charge.
-
Activez les fonctionnalités de sécurité et de performance dans la colonne Proxy :
CIS Proxy Toggle ON
Votre GLB est maintenant protégé. Avantage immédiat : les adresses IP d'origine de vos clusters ne sont pas visibles pour les clients. Si CIS détecte une menace dans une demande à venir, l'utilisateur peut voir un écran comme celui-ci avant d'être redirigé vers votre application :
En outre, vous pouvez désormais contrôler quel contenu est mis en cache par CIS et combien de temps il reste en cache. Accédez à Performances > Mise en cache pour définir le niveau de mise en cache global et l'expiration du navigateur. Vous pouvez personnaliser les règles de sécurité globale et de mise en cache avec les Règles de page. Les Règles de page permettent une configuration fine à l'aide de chemins de domaine spécifiques. Par exemple, avec les Règles de page, vous pouvez décider de mettre en cache tout le contenu se trouvant dans /assets pendant 3 jours :
Suppression de ressources
Suppression des ressources de cluster Kubernetes
- Retirez l'Ingress, vous pouvez le faire en exécutant la commande suivante:
kubectl delete -f glb-ingress.yaml - Supprimez le service, vous pouvez le faire en exécutant la commande suivante:
kubectl delete service hello-world-service - Supprimez le déploiement en exécutant la commande suivante:
kubectl delete deployment hello-world-deployment - Supprimez les clusters si vous les avez créés spécifiquement pour ce tutoriel.
Suppression des ressources CIS
- Supprimez l'équilibreur de charge global.
- Supprimez les pools d'origine.
- Supprimez les diagnostics d'intégrité.
- Mettez à jour le DNS pour votre domaine personnalisé.
- Supprimez l'instance CIS si vous l'avez créée spécifiquement pour ce tutoriel.