Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Standards & Craftsmanship Cilium: one firewall to secure them all Pierre-Yves Aillet @pyaillet Eric Briand @eric_briand
Slide 2
Slide 2 text
#ContainerDayFR 2 Eric Briand Dev’ touche à tout à Zenika Nantes Organisateur du CNCF Meetup Nantes @eric_briand @ebriand Pierre-Yves Aillet Consultant formateur à Zenika Nantes @pyaillet @pyaillet
Slide 3
Slide 3 text
#ContainerDayFR 3
Slide 4
Slide 4 text
#ContainerDayFR 4
Slide 5
Slide 5 text
Architecture du SI #ContainerDayFR events internal api kafka kafka zookeeper internal-frontend api events-frontend
Slide 6
Slide 6 text
Démo #ContainerDayFR
Slide 7
Slide 7 text
Networking Kubernetes #ContainerDayFR eth0 eth0 eth0 eth0
Slide 8
Slide 8 text
Network addons #ContainerDayFR Overlay ● Weave ● Flannel ● Calico… Routage natif ● GKE ● kube-router
Slide 9
Slide 9 text
Network policy #ContainerDayFR kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: namespace: webapp name: only-backend spec: podSelector: matchLabels: role: db ingress: - from: - podSelector: matchLabels: role: backend Type de la ressource Méta-données Informations habituelles de toutes les ressources Kubernetes
Slide 10
Slide 10 text
Network policy #ContainerDayFR kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: namespace: webapp name: only-backend spec: podSelector: matchLabels: role: db ingress: - from: - podSelector: matchLabels: role: backend Les pods ayant le label “db” À partir du moment où le(s) Pod(s) correspond à une règle : - Le traffic est bloqué par défaut
Slide 11
Slide 11 text
Network policy #ContainerDayFR kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: namespace: webapp name: only-backend spec: podSelector: matchLabels: role: db ingress: - from: - podSelector: matchLabels: role: backend Sens du traffic Source du traffic Seul le traffic explicitement autorisé est passant
Slide 12
Slide 12 text
Architecture de notre SI avec network policy #ContainerDayFR events internal api kafka kafka zookeeper internal-frontend api events-frontend
Slide 13
Slide 13 text
Démo #ContainerDayFR
Slide 14
Slide 14 text
Accès API #ContainerDayFR internal-frontend api events-frontend /heroes/* /identities/* /heroes/* /identities/*
Slide 15
Slide 15 text
Cilium #ContainerDayFR ● https://github.com/cilium/cilium ● Go + C pour la partie eBPF ● Version 1.5 ● Network addon Kubernetes ● Sécurisation à différents niveaux ● S’intègre avec Istio, Docker, Mesos
Slide 16
Slide 16 text
#ContainerDayFR Linux Kernel BPF Program BPF Virtual Machine syscall bpf(BPF_PROG_LOAD, ...); BPF Bytecode bcc eBPF
Slide 17
Slide 17 text
#ContainerDayFR
Slide 18
Slide 18 text
Cilium network policies #ContainerDayFR internal-frontend api events-frontend /heroes/* /identities/* /heroes/* /identities/*
Slide 19
Slide 19 text
Cilium network policies apiVersion: [...] spec: endpointSelector: matchLabels: app: heroes-api ingress: - fromEndpoints: - matchLabels: k8s:io.kubernetes.pod.namespace: internal toPorts: - ports: - port: "80" protocol: TCP rules: http: - method: "GET" path: "/heroes/?.*" ● Structure similaire aux networks policies natives ● Labels spécifiques Cilium/Kubernetes ● Règles spécifiques au protocole L7
Slide 20
Slide 20 text
Démo #ContainerDayFR
Slide 21
Slide 21 text
Architecture de notre SI v2 #ContainerDayFR events internal api kafka kafka zookeeper internal-frontend api events-frontend
Slide 22
Slide 22 text
Démo #ContainerDayFR
Slide 23
Slide 23 text
Ok, mais en vrai il se passe quoi ? #ContainerDayFR Endpoint TC @ Endpoint bpf_lxc TC @ Endpoint bpf_netdev Endpoint L7 Policy Userspace Proxy Envoy
Slide 24
Slide 24 text
C’était cool ? #ContainerDayFR ● Installation avec l’operator simple mais architecture complexe ● Le tooling pratique (ex : cilium policy trace) mais pas à tous les niveaux ! ● Utilisation et syntaxe simples
Slide 25
Slide 25 text
Multicluster #ContainerDayFR Source : https://cilium.io/blog/2019/03/12/clustermesh
Slide 26
Slide 26 text
Multicluster #ContainerDayFR
Slide 27
Slide 27 text
Performances #ContainerDayFR -- Source : https://itnext.io/4a9886efe9c4
Slide 28
Slide 28 text
Suppression kube-proxy #ContainerDayFR Rôle de kube-proxy: - ClusterIP - NodePort Aujourd’hui Cilium: ClusterIP - Demain: ClusterIP + NodePort et au revoir kube-proxy
Slide 29
Slide 29 text
Démo #ContainerDayFR
Slide 30
Slide 30 text
Extensibilité #ContainerDayFR -- Source : http://docs.cilium.io/en/v1.5/envoy/extensions/
Slide 31
Slide 31 text
Conclusion #ContainerDayFR ● Projet prometteur ○ Network policies++ ○ Remplacement de kube-proxy ● Usage intéressant de eBPF ○ Lien userspace/kernel par les maps ○ Affectation d’une identité k8s/docker/… aux src et dst des paquets
Slide 32
Slide 32 text
Code & Références #ContainerDayFR Sources : ● https://github.com/ebriand/conf-cilium Références : ● https://cilium.io/ ● http://www.brendangregg.com/ebpf.html ● https://jvns.ca/blog/2017/06/28/notes-on-bpf---ebpf/ ● https://www.youtube.com/watch?v=_Iq1xxNZOAo ● https://cilium.io/blog/2018/12/03/cni-performance ● https://itnext.io/benchmark-results-of-kubernetes-network-plugins-cni-ov er-10gbit-s-network-updated-april-2019-4a9886efe9c4
Slide 33
Slide 33 text
Merci ! Pierre-Yves Aillet @pyaillet Eric Briand @eric_briand #ContainerDayFR