K8S & INFOGÉRANCE

Kubernetes est un orchestrateur de conteneurs open source créé par Google en 2014 , il est devenu un outil indispensable pour les applications Cloud ready, conçues pour être hébergées dans le cloud ou hybride !

Ses avantages sont les suivants :

  • Le design Cloud-Native : Kubernetes encourage l’implémentation des architectures de type microservices et distribuées, ce qui augmente l’agilité, la résilience à la panne, et la scalabilité de l’application
  • La portabilité : Kubernetes fonctionne de la même manière, en utilisant la même image et les mêmes configurations, quelque soit le cloud provider (AWSAzureGCP, etc) ou Vmware
  • L’automatisation du déploiement: Kubernetes permet de modéliser une application sous conteneurs et d’en automatiser le déploiement
  • open source : Kubernetes est un projet libre disponible bénéficiant d’une large communauté

INFOGÉRANCE ET SERVICES MANAGÉS KUBERNETES

Dans une approche d’agilité , de fiabilité et de sécurité, je propose une infogérance de plateforme Kubernetes peut import l’hébergeur même chez vous.

Je propose également une prestation d’infogérance pour offrir aux utilisateurs une souplesse totale dans leur infrastructure Kubernetes avec des services managés de manière totalement transparente.

Vous êtes propriétaire de votre plateforme! Toutes les travaux sont clairement et simplement documentés pour faciliter le transfert.

Je propose une interface Rancher2 pour tous les clusters à manager.

Services proposés :

  • Création du cluster Kubernetes chez vous ou complètement infogérer
  • Maintient en conditions opérationnelles
  • Maintenance préventive de sécurité
  • Sauvegardes de vos applications
  • Supervision du cluster Kubernetes et des applications
  • Suivi et accompagnement personnalisé sur la migration des applications avec les technologies Docker et Kubernetes

Contractez moi pour vous accompagnez:

Contactez moi

IAM

La gestion des identités et des accès (IAM, Identity and Access Management) est une infrastructure de processus métier qui permet de gérer les identités électroniques ou numériques.

Cette infrastructure comprend les règles organisationnelles s’appliquant à la gestion des identités numériques, ainsi que les technologies nécessaires pour la prise en charge de cette gestion.

Grâce aux technologies IAM, les responsables informatiques peuvent contrôler l’accès des utilisateurs aux informations stratégiques de leurs organisations. Les produits IAM assurent un contrôle des accès fondé sur les rôles, qui permet aux administrateurs de réglementer l’accès aux systèmes et réseaux en fonction du rôle de chaque utilisateur dans l’entreprise.

Dans ce contexte, l’accès désigne la capacité d’un utilisateur à effectuer une tâche déterminée, telle que la consultation, la création ou la modification d’un fichier. Les rôles sont définis selon la compétence, l’autorité et la responsabilité au sein de l’entreprise.

Les systèmes utilisés pour la gestion des identités et des accès comprennent l’authentification unique (SSO, Single Sign-On), l’authentification multifacteur et la gestion des accès. Ces technologies offrent également la possibilité de stocker en toute sécurité les données d’identité et de profil, ainsi que des fonctions de gouvernance des données permettant de s’assurer que seules les données nécessaires et pertinentes sont partagées.

Ces produits peuvent être déployés sur site, fournis par un prestataire extérieur via un modèle d’abonnement en cloud ou déployés dans un cloud hybride.

Fonctionnalités requises pour la gestion des identités et des accès


Les systèmes de gestion des identités et des accès doivent comprendre tous les contrôles et outils nécessaires pour saisir et enregistrer les informations de connexion des utilisateurs, administrer la base de données d’entreprise des identités des utilisateurs et gérer l’affectation et la suppression des privilèges d’accès. Il s’agit donc de fournir un service d’annuaire centralisé permettant à la fois de superviser et de suivre tous les aspects de la base des utilisateurs de l’entreprise.

Par ailleurs, les technologies d’IAM doivent simplifier le processus de provisioning et de configuration des comptes des utilisateurs : il s’agit notamment de réduire les délais d’exécution de ces processus grâce à un workflow contrôlé qui limite les risques d’erreur et d’utilisation abusive et d’autoriser un traitement automatisé des comptes. Les administrateurs doivent également pouvoir consulter et modifier instantanément les droits d’accès.

Les systèmes de gestion des identités et des accès doivent aussi offrir un juste équilibre entre la rapidité et l’automatisation de leurs processus et le contrôle accordé aux administrateurs pour gérer et modifier les droits d’accès. Par conséquent, pour gérer les demandes d’accès, l’annuaire centralisé exige un système de droits d’accès qui associe automatiquement les intitulés de poste, les identifiants des entités et les lieux de travail des employés aux niveaux de privilège pertinents.

Il est possible d’inclure plusieurs niveaux d’analyse sous la forme de workflows permettant de valider chaque demande. Ainsi, la configuration de processus de contrôle appropriés et l’examen des droits existants sont simplifiés, de façon à éviter la prolifération des privilèges, c’est-à-dire l’accumulation progressive de droits d’accès supérieurs aux besoins des utilisateurs dans le cadre de leur travail.

Enfin, les systèmes IAM doivent apporter une certaine flexibilité dans la création de groupes disposant de privilèges spécifiques pour des rôles spécifiques, afin d’attribuer de façon uniforme des droits d’accès en rapport avec les fonctions des employés. Il s’agit également de fournir des processus de demande et d’approbation pour la modification des privilèges, car des employés ayant les mêmes responsabilités et travaillant au même endroit peuvent avoir besoin d’accès légèrement différents et donc personnalisés.

Avantages de la gestion des identités et des accès

Les technologies IAM peuvent servir à mettre en place, saisir, enregistrer et gérer de façon automatisée les identités des utilisateurs et les autorisations associées, garantissant ainsi que les privilèges d’accès sont octroyés selon une seule et même interprétation des règles et que tous les utilisateurs et services sont correctement authentifiés, autorisés et vérifiés.

En gérant convenablement les identités, les entreprises exercent un meilleur contrôle sur les accès utilisateur et peuvent ainsi réduire les risques d’atteintes aux données en interne comme en externe.

L’automatisation des systèmes IAM renforce l’efficacité des entreprises qui vont consacrer moins d’efforts, de temps et d’argent à la gestion des accès à leurs réseaux, qu’elle soit manuelle ou via des contrôles d’accès individuels non reliés à des systèmes de gestion centralisés.

Le recours à une plateforme commune pour la gestion des identités et des accès permet d’appliquer les mêmes règles de sécurité sur les différents appareils et systèmes d’exploitation utilisés par l’entreprise. Du point de vue de la sécurité, l’utilisation d’une infrastructure IAM peut faciliter l’application de règles d’authentification, de validation et d’autorisation des utilisateurs, ainsi que résoudre les problèmes de prolifération des privilèges.

Mettre en oeuvre des outils de gestion des identités et des accès en respectant les bonnes pratiques associées peut apporter un avantage concurrentiel.

Par exemple, les technologies IAM permettent à l’entreprise d’accorder à des utilisateurs extérieurs (clients, partenaires, sous-traitants et fournisseurs) un accès à son réseau par le biais d’applications mobiles, sur site et à la demande, sans pour autant compromettre la sécurité. La collaboration, la productivité et l’efficacité s’en trouvent renforcées, et les coûts d’exploitation réduits.

En revanche, des processus de gestion des identités et des accès mal maîtrisés peuvent conduire au non-respect des réglementations, car en cas d’audit, les dirigeants de l’entreprise auront du mal à prouver que les données de la société ne sont pas exposées à un risque d’utilisation frauduleuse.

Les systèmes IAM aident les entreprises à mieux se conformer à la législation en leur permettant de montrer que leurs données ne sont pas utilisées à mauvais escient. En outre, grâce à ces outils, les entreprises peuvent démontrer qu’elles sont capables de mettre à disposition sur demande les données nécessaires à un audit.

Avantages de l’IAM pour l’entreprise

Il peut s’avérer difficile d’obtenir un budget pour les projets IAM, car ils ne se traduisent pas directement par des gains en termes de rentabilité ou de fonctionnement. Cependant, une gestion inefficace des identités et des accès entraîne des risques non négligeables, tant sur le plan de la conformité que de la sécurité globale de l’entreprise. En effet, cette gestion défaillante augmente la probabilité de subir des dommages importants si des menaces externes et internes se concrétisent.

Des processus d’administration ont toujours été nécessaires pour garantir une circulation fluide des données métier tout en gérant les accès. Or, avec l’évolution de l’environnement informatique des entreprises, les difficultés se sont multipliées, en raison notamment de nouvelles tendances déstabilisatrices comme l’emploi d’appareils personnels (BYOD), le cloud computing, les applications mobiles et la mobilité croissante des employés. Les appareils et services à gérer sont plus nombreux que jamais, s’accompagnant d’exigences diverses en matière de privilèges d’accès.

Continuous Integration, Delivery

CI

CI est la partie où le workflow doit valider chaque commit des développeurs automatiquement.

Les test unitaires et fonctionnels automatique sont valider par la machine d’intégration par exemple le CI de GitLab ou CircleCi. Une fois que les tests sont passés une build/artefact est produite et sera déployer dans l’environement de TEST.

Pour arriver à une build/artefact

  • Le code est construit à chaque commit
  • Le code est automatiquement soumis à des tests unitaires à chaque commit
  • Tout le monde a accès au rapport de construction et de test
  • Les tests sont exécutés sur une version réduite de l’environnement de production
  • Les artefacts livrables sont stockés dans un dépôt d’artefacts contrôlé par version
  • Les artefacts livrables sont automatiquement déployés dans un environnement de test après une construction réussie

Si une des étapes échoue alors le développeur responsable du commit reçoit une notification pour corriger le plus rapidement possible.

La mise en place d’une CI et l’ensemble des processus à intégrer

Les différents type de tests

  • Les tests Unitaires sont la pour test les méthodes ou les fonctions de manière
  • Les tests d’intégration sont la pour s’assurer que plusieurs composants se comportent correctement ensemble, ils sont pour les régressions fonctionnelles
  • les tests d’acceptation similaire que l’intégration mais axés sur l’activité
  • les tests interface utilisateur sont la pour s’assurer que du point de vue utilisateur les actions de l’interface fonctionnent
plus les tests sont basés sur la couche UI plus ils prennent du temps à être implémenter et maintenir, ils sont donc coûteux.

Pour adopter l’intégration continue, vous devrez exécuter vos tests sur chaque branche poussé.

Pour cela quelques questions simple:

  • où le code est-il hébergé? Restriction…
  • de quel système d’exploitation et de quelles ressources avons-nous besoin pour l’application? Dépendances…
  • de combien de ressources avons-nous besoin pour vos tests?
  • l’application est elle monolithique ou micro-service?
  • utiliser vous des conteneurs? Docker…

La couverture de Test & complexité

Il est bon de viser une couverture supérieure à 80% mais attention à ne pas confondre un pourcentage élevé de couverture avec une bonne suite de tests. Un outil de couverture de code nous aide à trouver le code non testé. La qualité de vos tests fera la différence à la fin de la journée.
Un outil comme SonarQube est là pour aider à prendre des décisions lorsque le code est complexe et non testé.

Duplication et code mort

Le code dupliqué sera le futur code mort ou le futur bug doublement corrigé ! Il est très important de vérifier votre code et de réduire les duplications maximum 5% de code dupliqué sur un gros projet ou un projet legacy est acceptable mais il faut essayer d’être en dessous de 2% pour tout projet commencer avec des métriques de code qualité.

Refactoring

Si vous êtes sur le point d’apporter des changements significatifs à votre application qui n’a pas de couverture de test suffisante, vous devriez commencer par écrire des tests d’acceptation autour des fonctionnalités qui pourraient être impactées. Cela vous fournira un filet de sécurité pour vous assurer que le comportement original n’a pas été affecté après le refactoring ou l’ajout de nouvelles fonctionnalités.

L’environment

Toute l’équipe informatique Dev/DevOps/Admin doit avoir à l’esprit de garder le même environnement partout. Le numéro de révision de tous les composants utilisés par l’application doit être le même dans Dev/Build/Test/Intégration/Prod. c’est là que les conteneurs (Docker) et les orchestrateur (Kubernetes) sont utiles.

L’état d’esprit

Si un développeur casse le workflow du CI, la réparation devient la priorité principale.

Pour écrire de bons tests, vous devrez vous assurer que les développeurs sont impliqués et on un accès à un outils d’analyse de code.

Que vous disposiez d’une base de code existante ou que vous débutiez, il est certain que des bogues surviendront dans le cadre de vos versions. Veillez à ajouter des tests lorsque vous les résolvez afin d’éviter qu’ils ne se reproduisent.

CD

Le déploiement de l’application est géré par le code. Le code décrit exactement ce dont l’application a besoin pour démarrer et s’exécuter. L’artefact et l’environnement seront les mêmes entre les systèmes Test/Intégration/Production car l’image est générée une seule fois par le CI.

Continuous Delivery

Après l’automatisation de la création et des tests unitaires et d’intégration dans le cadre de l’intégration continue, la continuous delivery automatise la publication du code validé dans un registry/repository. Aussi, pour garantir l’efficacité du processus de continuous delivery, il faut d’abord introduire le processus continuous delivery dans le pipeline de développement. La continuous delivery permet de disposer d’une base de code toujours prête à être déployée dans un environnement de production.

Dans le cadre de la continuous delivery, chaque étape (de la fusion des modifications de code jusqu’à la distribution des versions prêtes pour la production) implique l’automatisation des processus de test et de publication du code. À la fin de ce processus, l’équipe d’exploitation est en mesure de déployer facilement et rapidement une application dans un environnement de production.

Continuous Deployment

L’étape finale d’un pipeline CI/CD mature est le continuous deployment. En complément du processus de continuous delivery, qui automatise la publication d’une version prête pour la production dans un référentiel de code, le continuous deployment automatise le lancement d’une application dans un environnement de production. En l’absence de passerelle manuelle entre la production et l’étape précédente du pipeline, le déploiement continu dépend surtout de la conception de l’automatisation des processus de test.

Dans la pratique, dans le cadre du continuous deployment, une modification apportée par un développeur à une application pourrait être publiée quelques minutes seulement après la rédaction du code en question (en supposant qu’elle passe les tests automatisés). Il est ainsi beaucoup plus facile de recevoir et d’intégrer en continu les commentaires des utilisateurs. Ensemble, ces trois pratiques CI/CD réduisent les risques liés au déploiement des applications, puisqu’il est plus simple de publier des modifications par petites touches qu’en un seul bloc. Cette approche nécessite néanmoins un investissement de départ considérable, car les tests automatisés devront être rédigés de manière à s’adapter à un large éventail d’étapes de test et de lancement dans le pipeline CI/CD.

PHP Framework

La question que ce pose beaucoup de personne lorsque vous avez choisi comme langage pHp.

Il existe plusieurs Framework je vais vous présenter ceux que j’utilise mais les autres sont tout aussi valable en fonction de votre besoin. Symfony et Laravel sont très complet d’autre sont plus simple à mètre en place et pour des petites équipes.

Comparaison des deux Framework.

Les moteurs HTML Twig vs Blade

  • Lavravel propose d’écrire des fichiers .blade.php qui sont des fichiers PHP avec quelques méthodes supplémentaires pour vous simplifier la vie tel que @foreach ou @extends. Le code à l’intérieur des balises Bande doit avant tout être du code PHP
  • Symfony utilise le moteur de template Twig qui lui propose une syntaxe complètement différente du PHP. par exemple l’objet item.name au lient de $item.name qu’il est possible d’étendre grâce à l’utilisation d’extensions. (Vous ne pouvez pas faire appel à n’importe qu’elle class PHP depuis le template)

Twig est une moteur plus puissant mais est aussi contraignant en important l’utilisation d’extension pour rajouter des fonctionna litées. Cette aporche rand aussi les templates plus simplement éditable par les développeur front-end (la syntaxe est plus simple et ressemble à du JavaScript).

Balde est plus facile à prendre en main car permet d’écrire du PHP, avec le risque parfois de voir des appels aux models directement dans les vues.

ORM Doctrine vs Eloquent

  • Laravel utilise par défaut Eloquent qui est un ORM basé sur Active Record où le Model est à la fois responsable de représenter une entité, mais aussi de gérer la persistance des informations
  • Symfony utilise par défaut Doctrine qui est ORM basé sur le principe du Data Mapper où on sépare la notion d’entité (objet représentant les données), de Repository (objet servant à manipuler les entités) et de Manager (objet responsable de la persistance)

Eloquent a une syntaxe plus coutre et logique qui semple plus naturelle mais cette apparente simplicité peut rapidement mener à des « fat models » car toute la logique va être stocké au même endroit.

Doctrine permet naturellement une meilleur séparation mais s’avérera relativement verbeux pour des cas simples.

La gestion des formulaires FormBuilder vs FormRequest

  • Symfony permet de créer une class qui va gérer les formulaires, depuis leur création jusqu’au traitement des données. Le formulaire sera me capable d’hydrater une entitée à partir des données reçues
  • Laravel propose simplement un type de Request particulier permettant de vérifier et de traiter les données reçues lors d’un requête. il faudra alors manuellement traiter les données et les modifier me modèle en fonction

Ajouter de module Bundle vs ServiceProvider

  • Symfony est connu pour disposer d’un système de Bundle permettant l’ajout de fonctionnalitées supplémentaire simplement avec une bonne séparation du code
  • Laravel ne dispose pas d’un tel système mais il est possible de limiter avec utilisation les ServiceProviders qui disposent d’une méthode boot(). il est ainsi possible de créer une librairie dans un namespace séparer et d’inclure une logique dès l’importation du ServiceProvider

L’intégration de module par composer fonctionne dans les deux Framework.

Au final

Laravel se focalise sur la simplicité du code pour le développeur ce qui peut parfois amener à de mauvaises pratiques lorsque l’on veut prendre des raccourcis. Mais avec un peu de rigueur vous aurez un code propre et une bonne organisation de code. L’utilisation d’un Service Container permet de gérer l’injection de dépendance et ainsi s’assurer que le code reste facilement testable.

Symfony impose plus de rigueur et est plus complexe à appréhender. Il possède une courbe d’apprentissage un peu plus longue mais a l’avantage d’imposer plus de restriction. Une fois passé la phase d’apprentissage et la découvert des différents Bundle fournis par le Framework est aussi productif qu’avec Laravel.

Le choix est en fonction de vos affinité vis à vis de la méthode utilisée.

Les compétences d’un DevOps

L’ingénieur DevOps possède un rôle transversal qui exige une bonne maîtrise des étapes de développement informatique, ainsi qu’une bonne compréhension des enjeux du déploiement continu et de production. Le métier de DevOps requiert la maîtrise de compétences diverses. Tout d’abord, il faut maîtriser les compétences techniques que le métier exige. Le consultant DevOps doit ainsi :

  • savoir développer des scripts et faire de l’intégration
  • utiliser les outils de construction et de virtualisation : Docker, Kubernetes, etc
  • savoir mettre en place des chaînes d’intégration continue (CI/CD)
  • connaître l’environnement des systèmes d’exploitation : systèmes Linux, Windows
  • maîtriser les outils de tests automatisés ou de monitoring des déploiements
  • être pointilleux sur la sécurité des données et posséder d’excellentes connaissances dans les systèmes de serveur
  • travailler aussi bien sur les plateformes cloud (AWSAzureGCP, etc) et autres que sur des plateformes On-Premises

En complémentarité des compétences techniques, l’ingénieur DevOps doit avoir la capacité d’évaluer le fonctionnement des applications, de procéder à des ajustements techniques et de mesurer la performance des solutions développées.

Si la maîtrise technique est capitale, les qualités humaines du consultant ou ingénieur DevOps représentent un atout majeur dans ses relations avec les autres équipes et la hiérarchie. En plus de l’esprit de management, il doit savoir écouter les demandes du client et des équipes. Il est donc essentiel qu’il possède un bon sens relationnel pour mieux appréhender les besoins et pour échanger plus facilement :

  • il doit être capable de gérer et diriger les équipes avec lesquelles il collabore
  • il doit toujours posséder un certain recul par rapport au projet pour le mener à bien et respecter les objectifs fixés
  • il doit être capable de formuler les demandes dans le langage technique
  • il doit être capable de fédérer tous les participants afin de développer une solution personnalisée et cohérente

Chaque ingénieur DevOps ne maîtrise pas tous les langages de programmation, notamment les novices. Un bon ingénieur doit donc avoir la capacité de se former rapidement à des outils ou à des technologies de déploiement pour que l’entreprise réussisse sa transformation digitale.

D’ailleurs, l’entreprise qui doit recruter un ingénieur DevOps ou faire appel à un consultant DevOps va se concentrer notamment sur les pratiques DevOps. En d’autres termes, elle va porter une attention particulière aux processus de travail de l’intervenant. Ce dernier devra connaître différents fournisseurs de solution de cloud computing. Enfin, un bon ingénieur DevOps doit régulièrement faire une veille technologique pour rester à la pointe dans son domaine. Il doit être à l’affût des nouveaux langages et des nouveaux outils digitaux.