kubernetes-ops - l'expertise cloud aws, openstack, gcp, azure · kubernetes managÉs "as...

69
KUBERNETES-OPS 1

Upload: others

Post on 22-May-2020

22 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBERNETES-OPS

1

Page 2: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

CONCERNANT CES SUPPORTS DE COURS

2 . 1

Page 3: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

SUPPORTS DE COURS RÉALISÉS PAR ALTER WAY CLOUDCONSULTING

ex Osones -

Copyright © 2014 - 2019 alter way CloudConsultingLicence : Sources : HTML/PDF :

Licence Creative Commons BY-SA 4.0

https://cloud-consulting.alterway.fr

Creative Commons BY-SA 4.0https://github.com/Alterway/formations/

https://osones.com/formations/

2 . 2

Page 4: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBERNETES : PROJET, GOUVERNANCE ETCOMMUNAUTÉ

3 . 1

Page 5: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBERNETESCOE développé par Google, devenu open source en2014Adapté à tout type d'environnementDevenu populaire en très peu de tempsPremier projet de la CNCF

3 . 2

Page 6: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

CNCFThe Foundation’s mission is to create and drive the adoption of

a new computing paradigm that is optimized for moderndistributed systems environments capable of scaling to tens of

thousands of self healing multi-tenant nodes.

3 . 3

Page 7: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

CNCF : PRÉREQUISDistribuer sous forme de conteneursGestion dynamique de laconfigurationOrienté micro services

3 . 4

Page 8: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

CNCF : LES RÔLESIntendance des projetsFaire grossir et évoluer l'écosystèmeRendre la technologie accessiblePromouvoir la technologie

3 . 5

Page 9: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

OCICréé sous la Linux FondationBut : Créer un standard Open Source concernant la manièrede "runner" et le format des conteneurs et imagesNon lié à des produitsNon lié à des COErunC a été donné par Docker à l'OCI comme implémentionsde base

3 . 6

Page 10: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBERNETES : PROJETDocs : Slack : Discuss : Stack Overflow :

Serverfault

https://kubernetes.io/docs/http://slack.k8s.io/

https://discuss.kubernetes.io

https://stackoverflow.com/questions/tagged/kubernetes

https://stackoverflow.com/questions/tagged/kubernetes

3 . 7

Page 11: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBERNETES : PROJETHébergé sur Github :

:Issues : Pull Requests

Releases :

Projets en incubation : (Deprécié)

https://github.com/kubernetes/kuberneteshttps://github.com/kubernetes/kubernetes/issues

https://github.com/kubernetes/kubernetes/pulls

https://github.com/kubernetes/kubernetes/releases

https://github.com/kubernetes-incubator/https://github.com/kubernetes-sigs/

3 . 8

Page 12: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBERNETES : CYCLE DE DÉVELOPPEMENTChaque release a son propre planning, pour exemple :

Chaque cycle de développement dure 12 semaines et peutêtre étendu si nécessaireFeatures freezeCode FreezeAlpha ReleaseBeta ReleasesRelease Candidates

https://github.com/kubernetes/sig-release/tree/master/releases/release-1.12#timeline

3 . 9

Page 13: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBERNETES : COMMUNAUTÉContributor and community guide :

Décomposée en [Special Interest Groups] :

Les SIG sont des projets, centres d'intérêts ou Working Group différents :NetworkDocsAWSetc

Chaque SIG peut avoir des guidelines différentes.

https://github.com/kubernetes/community/blob/master/README.md#kubernetes-community

https://github.com/kubernetes/community/blob/master/sig-list.md

3 . 10

Page 14: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBERNETES : KUBECONLa CNCF organise trois KubeCon par an :

Amérique du Nord (San Diego, Seattle,etc)Europe (Berlin, Barcelone, Amsterdametc)Chine

3 . 11

Page 15: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBERNETES : ARCHITECTURE

4 . 1

Page 16: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBERNETES : COMPOSANTSKubernetes est écrit en Go, compilé statiquement.Un ensemble de binaires sans dépendanceFaciles à conteneuriser et à packagerPeut se déployer uniquement avec des conteneurs sansdépendance d'OS

4 . 2

Page 17: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBERNETES : COMPOSANTS DU CONTROL PLANEetcd: Base de donnéeskube-apiserver : API server qui permet la configurationd'objets Kubernetes (Pod, Service, Deployment, etc.)kube-proxy : Permet le forwarding TCP/UDP et le loadbalancing entre les services et les backends (Pods)kube-scheduler : Implémente les fonctionnalités deschedulingkube-controller-manager : Responsable de l'état du cluster,boucle infinie qui régule l'état du cluster afin d'atteindre unétat désiré

4 . 3

Page 18: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBERNETES : ETCDBase de données de type Clé/Valeur (Key Value Store)Stocke l'état d'un cluster KubernetesPoint sensible (stateful) d'un cluster KubernetesProjet intégré à la CNCF

4 . 4

Page 19: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBERNETES : KUBE-APISERVERLes configurations d'objets (Pods, Service, RC, etc.) se font vial'API serverUn point d'accès à l'état du cluster aux autres composantsvia une API RESTTous les composants sont reliés à l'API server

4 . 5

Page 20: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBERNETES : KUBE-SCHEDULERPlanifie les ressources sur le clusterEn fonction de règles implicites (CPU, RAM, stockagedisponible, etc.)En fonction de règles explicites (règles d'affinité et anti-affinité, labels, etc.)

4 . 6

Page 21: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBERNETES : KUBE-PROXYResponsable de la publication de servicesUtilise iptablesRoute les paquets à destination des PODs et réalise le loadbalancing TCP/UDP

4 . 7

Page 22: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBERNETES : KUBE-CONTROLLER-MANAGERBoucle infinie qui contrôle l'état d'un clusterEffectue des opérations pour atteindre un état donnéDe base dans Kubernetes : replication controller, endpointscontroller, namespace controller et serviceaccountscontroller

4 . 8

Page 23: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBERNETES : AUTRES COMPOSANTSkubelet : Service "agent" fonctionnant sur tous les nœuds etassure le fonctionnement des autres serviceskubectl : Ligne de commande permettant de piloter uncluster Kubernetes

4 . 9

Page 24: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBERNETES : KUBELETService principal de KubernetesPermet à Kubernetes de s'auto configurer :

Surveille un dossier contenant les manifests (fichiers YAMLdes différents composant de Kubernetes).Applique les modifications si besoin (upgrade, rollback).

Surveille l'état des services du cluster via l'API server (kube-apiserver).

4 . 10

Page 25: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBERNETES: NETWORKKubernetes n'implémente pas de solution réseau par défaut,mais s'appuie sur des solutions tierces qui implémentent les

fonctionnalités suivantes:

Chaque pods reçoit sa propre adresse IPLes pods peuvent communiquer directement sans NAT

4 . 11

Page 26: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBERNETES : AUJOURD'HUIVersion 1.16.x : stable en productionSolution complète et une des plusutiliséesÉprouvée par Google

4 . 12

Page 27: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBERNETES : INSTALLATION

5 . 1

Page 28: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBERNETES : MINIKUBEOutil permettant de démarrer rapidement un cluster mono-node Kubernetes localementExecute Kubernetes dans une machine virtuelleNécessite des outils de virtualisation (VirtualBox, VMwareFusion, KVM, etc...)Supporte plusieurs systèmes d'exploitation : Linux, Mac OS,WindowsInstallation :https://github.com/kubernetes/minikube#Installation

5 . 2

Page 29: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBERNETES : MINIKUBECréation d'un cluster Kubernetes

$ minikube get-k8s-versionsThe following Kubernetes versions are available when using the localkube bootstrapper: - v1.16.1 - v1.15.5 - v1.14.3 - v1.9.4 - v1.9.0

5 . 3

Page 30: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBERNETES : MINIKUBE$minikube start --kubernetes-version="v1.16.1"Starting local Kubernetes v1.16.1 cluster...Starting VM...Getting VM IP address...[...]Connecting to cluster...Setting up kubeconfig...Starting cluster components...Kubectl is now configured to use the cluster.Loading cached images from config file.

5 . 4

Page 31: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBERNETES : MINIKUBEEffectuer un diagnostic basique ducluster

$ kubectl versionClient Version: v1.16.1Server Version: v1.16.1

5 . 5

Page 32: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBERNETES : MINIKUBE$ kubectl get componentstatusesNAME STATUS MESSAGE ERRORcontroller-manager Healthy okscheduler Healthy oketcd-0 Healthy {"health": "true"}

5 . 6

Page 33: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

INSTALLATION DE KUBERNETES

De nombreuses ressources présentes pour le déploiement deKubernetes dans un environnement de production

Un des outils est utilisé pour rapidement démarrerun cluster Kubernetes

kubeadm

5 . 7

Page 34: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

INSTALLATION DE KUBERNETES AVEC KUBEADMCertains pré-requis sont nécessaires avant d'installerKubernetes :

Désactiver le swapAssurer que les ports requis soient ouverts :

Installer une Container Runtime compatible CRI

https://kubernetes.io/docs/setup/independent/install-kubeadm/#check-required-ports

5 . 8

Page 35: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBEADMInstaller les composants Kubernetes (kubeadm, kubectl,kubelet) :

Exécuter kubeadm init sur le noeud masterExécuter kubeadm join sur les autres noeuds (avec le tokenfournir par la commande kubeadm init)Copier le fichier de configuration généré par kubeadm initInstaller le plugin Réseau

https://kubernetes.io/docs/setup/independent/install-kubeadm/

5 . 9

Page 36: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBEADMEn plus de l'installation de Kubernetes, Kubeadm peut :

Renouveler les certificats du Control PlaneGénérer des certificats utilisateurs signés par KubernetesEffectuer des upgrades de Kubernetes(kubeadm upgrade)

5 . 10

Page 37: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBERNETES MANAGÉS "AS A SERVICE"Il existe des solutions managées pour Kubernetes sur lescloud publics :

AWS Elastic Kubernetes Services:

Azure Kubernetes Service :

Docker Universal Control Plane :

Google Kubernetes Engine :

https://aws.amazon.com/eks/

https://azure.microsoft.com/en-us/services/kubernetes-service/

https://docs.docker.com/ee/ucp/

https://cloud.google.com/kubernetes-engine/5 . 11

Page 38: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

INSTALLATION DE KUBERNETESVia Ansible : kubespray

Via Terraform : Il existe d'autres projets open source basés sur le langage Go :

kube-aws :

kops :

https://github.com/kubernetes-sigs/kubespray

https://github.com/poseidon/typhoon

https://github.com/kubernetes-incubator/kube-aws

https://github.com/kubernetes/kops

5 . 12

Page 39: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

INTRODUCTION À SONOBUOYOutil de conformité de clusters KubernetesPermet de facilement générer des données de diagnosticspour les applications déployéeshttps://github.com/heptio/sonobuoy/

5 . 13

Page 40: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBECTL : ADVANCED USAGEIl est possible de mettre à jour un service sans incident grâcece qui est appelé le rolling-update.Avec les rolling updates, les ressources qu'expose un objetService se mettent à jour progressivement.Seuls les objets Deployment, DaemonSet etStatefulSet support les rolling updates.Les arguments maxSurge et maxUnavailabe définissentle rythme du rolling update.La commande kubectl rollout permet de suivre les rollingupdates effectués.

5 . 14

Page 41: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBECTL : ADVANCED USAGEapiVersion: apps/v1kind: Deploymentmetadata: name: nginxspec: selector: matchLabels: app: frontend replicas: 2 strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 0 type: RollingUpdate template: metadata: name: nginx labels: app: frontend

5 . 15

Page 42: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBECTL : ADVANCED USAGE$ kubectl create -f nginx.yaml --recorddeployment.apps/nginx created

5 . 16

Page 43: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBECTL : ADVANCED USAGEIl est possible d'augmenter le nombre de pods avec lacommande kubectl scale :

Il est possible de changer l'image d'un container utilisée parun Deployment :

kubectl scale --replicas=5 deployment nginx

kubectl set image deployment nginx nginx=nginx:1.15

5 . 17

Page 44: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBECTL : ADVANCED USAGEDry run. Afficher les objets de l'API correspondant sans lescréer :

Démarrer un container en utiliser une commande différenteet des arguments différents :

Démarrer un Cron Job qui calcule π et l'affiche toutes les 5minutes :

kubectl run nginx --image=nginx --dry-run

kubectl run nginx --image=nginx \--command -- <cmd> <arg1> ... <argN>

kubectl run pi --schedule="0/5 * * * ?" --image=perl --restart=OnFailure \-- perl -Mbignum=bpi -wle 'print bpi(2000)'

5 . 18

Page 45: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBECTL : ADVANCED USAGESe connecter à un container:

S'attacher à un container existant :

Accéder à un service via un port :

kubectl run -it busybox --image=busybox -- sh

kubectl attach my-pod -i

kubectl port-forward my-svc 6000

5 . 19

Page 46: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBECTL : LOGGINGUtiliser kubectl pour diagnostiquer les applications et lecluster kubernetes :

kubectl cluster-infokubectl get eventskubectl describe node <NODE_NAME>kubectl logs (-f) <POD_NAME>

5 . 20

Page 47: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBECTL : MAINTENANCEObtenir la liste des noeuds ainsi que les informationsdétaillées :

kubectl get nodeskubectl describe nodes

5 . 21

Page 48: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBECTL : MAINTENANCEMarquer le noeud comme unschedulable (+ drainer les pods)et schedulable :

kubectl cordon <NODE_NAME>kubectl drain <NDOE_NAME>kubectl uncordon <NODE_NAME>

5 . 22

Page 49: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

KUBERNETES : SECURITÉ ET CONTROLE D'ACCÈS

6 . 1

Page 50: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

AUTHENTICATION & AUTORISATIONRBAC (Role Based Access Control)ABAC (Attribute-based access control)WebHookCertificatesToken

6 . 2

Page 51: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

RBAC3 entités sont utilisées :

Utilisateurs représentés par les Users ou lesServiceAccountsResources représentées par les Deployments, Pods,Services, etc...les différentes opérations possibles :create, list, get, delete, watch, patch

6 . 3

Page 52: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

SERVICE ACCOUNTSObjet Kubernetes permettant d'identifier une application s'éxecutant dans unpodPar défaut, un ServiceAccount par namespaceLe ServiceAccount est formatté ainsi :system:serviceaccount:<namespace>:<service_account_name>

6 . 4

Page 53: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

SERVICE ACCOUNTSapiVersion: v1kind: ServiceAccountmetadata: name: default namespace: default

6 . 5

Page 54: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

ROLEL'objet Role est un ensemble de règles permettant de définirquelle opération (ou verbe) peut être effectuée et sur quelleressourceLe Role ne s'applique qu'à un seul namespace et lesressources liées à ce namespace

6 . 6

Page 55: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

ROLEkind: RoleapiVersion: rbac.authorization.k8s.io/v1metadata: namespace: default name: pod-readerrules:- apiGroups: [""] resources: ["pods"] verbs: ["get", "watch", "list"]

6 . 7

Page 56: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

ROLEBINDINGL'objet RoleBinding va allouer à un User,ServiceAccount ou un groupe les permissions dans l'objetRole associéUn objet RoleBinding doit référencer un Role dans lemême namespace.L'objet roleRef spécifié dans le RoleBinding est celui quicrée le liaison

6 . 8

Page 57: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

ROLEBINDINGkind: RoleBindingapiVersion: rbac.authorization.k8s.io/v1metadata: name: read-pods namespace: defaultsubjects:- kind: User name: jane apiGroup: rbac.authorization.k8s.ioroleRef: kind: Role name: pod-reader apiGroup: rbac.authorization.k8s.io

6 . 9

Page 58: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

CLUSTERROLEL'objet ClusterRole est similaire au Role à la différencequ'il n'est pas limité à un seul namespaceIl permet d'accéder à des ressources non limitées à unnamespace comme les nodes

6 . 10

Page 59: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

CLUSTERROLEkind: ClusterRoleapiVersion: rbac.authorization.k8s.io/v1metadata: name: secret-readerrules:- apiGroups: [""] resources: ["secrets"] verbs: ["get", "watch", "list"]

6 . 11

Page 60: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

CLUSTERROLEBINDING kind: ClusterRoleBindingapiVersion: rbac.authorization.k8s.io/v1metadata: name: salme-reads-all-podssubjects:- kind: User name: jsalmeron apiGroup: rbac.authorization.k8s.ioroleRef: kind: ClusterRole name: secret-reader apiGroup: rbac.authorization.k8s.io

6 . 12

Page 61: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

RBACkubectl auth can-i get pods /--namespace=default /[email protected]

6 . 13

Page 62: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

NETWORKPOLICIESLa ressource NetworkPolicy est une spécificationpermettant de définir comment un ensemble de podscommuniquent entre eux ou avec d'autres endpointsLe NetworkPolicy utilisent les labels pour sélectionner lespods sur lesquels s'appliquent les règles qui définissent letrafic alloué sur les pods sélectionnésLe NetworkPolicy est générique et fait partie de l'APIKubernetes. Il est nécessaire que le plugin réseau déployésupporte cette spécification

6 . 14

Page 63: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

NETWORKPOLICIESDENY tout le trafic sur une applicationLIMIT le trafic sur une applicationDENY le trafic all non alloué dans un namespaceDENY tout le trafic venant d'autres namespacesexemples de Network Policies :https://github.com/ahmetb/kubernetes-network-policy-recipes

6 . 15

Page 64: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

NETWORKPOLICIESExemple de NetworkPolicy permettant de blocker le traficentrant :

kind: NetworkPolicyapiVersion: networking.k8s.io/v1metadata: name: web-deny-allspec: podSelector: matchLabels: app: web ingress: []

6 . 16

Page 65: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

PODSECURITYPOLICIESPermet de contrôler les privilèges d'un podPermet de définir ce qui est autorisé pendant l'exécution dupodA utiliser dans un contexte multi-tenant et quand les pods neviennent pas d'un tiers de confiancePeut-être combiné avec le RBACAttention: Activer cette fonctionnalité peut endommagervotre environnementIl faut une PSP par défaut

6 . 17

Page 66: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

PODSECURITYPOLICIESapiVersion: policy/v1beta1kind: PodSecurityPolicymetadata: name: restrictedspec: privileged: false allowPrivilegeEscalation: false requiredDropCapabilities: - ALL hostNetwork: false hostIPC: false hostPID: false runAsUser: rule: 'MustRunAsNonRoot' readOnlyRootFilesystem: false

6 . 18

Page 67: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

ADMISSION CONTROLLERSInterceptes les requêtes sur l'API KubernetesPeut effectuer des modifications sinécessairesConception personnalisée possible

6 . 19

Page 68: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

ADMISSION CONTROLLERSDenyEscalatingExecImagePolicyWebhookNodeRestrictionPodSecurityPolicySecurityContextDenyServiceAccount

6 . 20

Page 69: KUBERNETES-OPS - L'expertise cloud AWS, OpenStack, GCP, Azure · KUBERNETES MANAGÉS "AS A SERVICE" Il existe des solutions managées pour Kubernetes sur les cloud publics : AWS Elastic

CONCLUSION

7 . 1