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