SlideShare uma empresa Scribd logo
Project Calico
Segurança para Containers e um pouco mais :)
Eu, rapidão :)
● CKA e LPIC3 (essa venceu…)
● Gerente de engenharia de
Nuvem no SERPRO - Projeto
Estaleiro
● Nesse mundo Linux desde
2004, no SERPRO desde
2009, mexendo com esses
trecos desde 2014
● Curioso, aficionado por aviação
● Corinthiano
Começando pelo começo
Conceitos
● Container - Menor unidade existente no Host - Um PROCESSO
● Labels - Identificador para cada objeto no Kubernetes
● PODs - Objeto que representa o conjunto de 1 a N agregados, que
compartilham REDE, CPU e Memória, storage, etc - Uma aplicação
rodando (e a menor unidade em um Cluster Kubernetes)
● Services - Objeto que representa a abstração lógica para um conjunto de
PODs idênticos - 1 IP fixo que identifica 1 a N PODs
● Deployment - Objeto que controla um conjunto de PODs, quantidade de
réplicas, volumes, etc
● Network Policy - Objeto que controla permissões de comunicação de
PODs
Docker x Redes
Fonte: https://www.kaitoy.xyz/images/docker_network.jpg
Namespaces
$ man 7 namespaces
“A namespace wraps a global system resource in an abstraction that makes it
appear to the processes within the namespace that they have their own
isolated instance of the global resource.
Changes to the global resource are visible to other processes that are
members of the namespace, but are invisible to other processes. One use of
namespaces is to implement containers.”
Kubernetes x Redes
Kubernetes x Mundo
CNI - Container Network Interface
● Originalmente criado para o RKT (runtime de Containers da CoreOS)
● O Kubelet chama um programa (o CNI!) para:
○ Criar um Network Namespace (e as placas de rede), caso não exista, alocado ao Namespace
(PID) do POD
○ Alocar um IP para o POD
○ Desfazer e destruir tudo isso quando o POD morre
● No Kubelet, é composto do diretório de binários (--cni-bin-dir) e configuração (--
cni-conf-dir)
{
"name": "nomequalquer",
"cniVersion": "0.1.0",
"type": "calico",
"ipam": {
"type": "calico-ipam"
}
}
CNI - Container Network Interface
● Quando criamos um POD o seguinte ocorre dentro do Kubelet:
# CNI_COMMAND=ADD CNI_CONTAINERID=1234567890 CNI_NETNS=/var/run/netns/1234567890 CNI_IFNAME=eth12
CNI_PATH=/opt/cni/bin ./calico <calico.conf
{
"ip4": {
"ip": "172.17.1.17/32"
},
"dns": {}
}
● Ou seja, o Kubernetes não conhece a stack de rede. Ao invés disso ele
delega a um programa (o CNI!) o controle dessa rede, inclusive IPAM
● Adicionalmente, ele pode usar esse programa para controle de regras de
firewall do ambiente
Resumo até aqui
Kube APIWorkload
Scheduler
Kubelet
● Baixa imagem
● Executa o CNI
● Sobe o POD (Pause +
Containers)
Project Calico
“Secure networking for the cloud
native era”
O que é o Calico?
● Software que provê conectividade e segurança de redes
● Simples - Modelo de redes simplificado, baseado em tecnologias de
roteamento já conhecidas e bem utilizadas e sem necessidade de
Overlays de rede
● Escalável - Possui uma arquitetura descentralizada onde cada node de
rede é responsável pelo seu workload (regras, roteamento) e utiliza
apenas um banco centralizado para armazenar informações
● Seguro - Calico provê capacidades de microsegmentação de forma
simplificada, com a declaração de regras baseadas em objetos, labels e
ações
● OpenSource - Código totalmente aberto, comunidade participante de
decisões no design do Kubernetes
Principais recursos
● Rede - Responsável por prover conectividade entre PODs
○ Suporte a IPv6
○ NAT de saída
○ BGP e suporte à IPs reais por PODs
○ IP-in-IP para roteamento entre Datacenters
● Segurança - Provê microsegmentação
○ Para o Kubernetes através do uso de Network Policies
○ Para hosts físicos, com o agente instalado
Topologia 1 - Acesso direto ao ETCD
ETCD
calicoctl
K8s
policy
controller
configurações
kube-api
Network policies (*)
Objetosde
regrasCalico
Calico
Node
Calico
Node
Calico
Node
Configurações e
regras de firewall (*)
(*) = O Calico Node e o
k8s-policy quem lêem as
configurações
CNI
Requisita IP, aloca rotas
Network Policies
Topologia 2 - Acesso via API do Kubernetes (beta)
ETCD
kube-api
Calico
Node
Configurações e regras de firewall
CNI
Requisita IP, aloca rotas
Objetos de conf
(CRD)
Componentes
● Node - Container que agrega vários componentes para funcionamento do
Calico
○ Felix - “Coração” da solução, responsável pela programação de interfaces, rotas e
ACLs/regras de firewall e NAT
○ BIRD e BIRD6 - Cliente BGP para troca de informações de Rotas entre cada um dos
nós (IPv4 e IPv6)
○ CONFD - Daemon que lê configurações do ETCD e reconfigura arquivos de acordo com
templates - Gera as configurações do BIRD
Componentes
● Kubernetes Policy Controller - Traduz objetos Network Policies em
Objetos de regras para o Calico
○ Existem também plugins para o Openstack, por exemplo
● Route Reflector - Em ambientes muito grandes ou que demandem
sincronização com roteadores externos, replica e agrega as rotas do
ambiente via BGP - Baseado no BIRD
DEMO TIME
Não precisa ser
complexo pra ser
completo :)
Referências
● https://www.projectcalico.org
● https://kubernetes.io
● https://github.com/containernetworking/cni/blob/master/SPEC.md
● https://blog.scottlowe.org/2013/09/04/introducing-linux-network-namespaces/
● http://www.dasblinkenlichten.com/understanding-cni-container-networking-interface/
● http://blog.mbrt.it/2017-10-01-demystifying-container-networking/
● https://thenewstack.io/hackers-guide-kubernetes-networking/
● https://www.cncf.io/wp-content/uploads/2017/11/Introduction-to-CNI-2.pdf
● https://github.com/kelseyhightower/kubernetes-the-hard-way
● https://gist.github.com/rikatz/68217ad14b481d18d73d96edb3052e37
● http://mvp.tigera.io/ - Entre, participe, ganhe uma camiseta do Calico :D
Obrigado!
Emails:
ricardo.katz@gmail.com
ricardo.katz@serpro.gov.br
katz@estaleiro.io
Twitter: @katzsp
Grupo Telegram:
t.me/kubernetesbr

Mais conteúdo relacionado

Mais procurados

TDC2018SP | Trilha Containers - Linux Conteineres na unha
TDC2018SP | Trilha Containers - Linux Conteineres na unhaTDC2018SP | Trilha Containers - Linux Conteineres na unha
TDC2018SP | Trilha Containers - Linux Conteineres na unha
tdc-globalcode
 
Projeto Terminais Leves Linux
Projeto Terminais Leves LinuxProjeto Terminais Leves Linux
Projeto Terminais Leves Linux
Marco Neves
 
Kubernetes no Governo Federal - Kubernetes Meetup #3
Kubernetes no Governo Federal - Kubernetes Meetup #3Kubernetes no Governo Federal - Kubernetes Meetup #3
Kubernetes no Governo Federal - Kubernetes Meetup #3
Ricardo Katz
 
Aula PIT 3 - Ambientes
Aula PIT 3 - AmbientesAula PIT 3 - Ambientes
Aula PIT 3 - Ambientes
Dirceu Belém
 
Producao Segura de Containers com Kubernetes e CoreOS - QCONSP 2017
Producao Segura de Containers com Kubernetes e CoreOS - QCONSP 2017Producao Segura de Containers com Kubernetes e CoreOS - QCONSP 2017
Producao Segura de Containers com Kubernetes e CoreOS - QCONSP 2017
Ricardo Katz
 
Blockchain além do Hello World
Blockchain além do Hello WorldBlockchain além do Hello World
Blockchain além do Hello World
Henrique Leite
 
TDC2010 - Trilha Python: Python no iG (Automação de Datacenters)
TDC2010 - Trilha Python: Python no iG (Automação de Datacenters)TDC2010 - Trilha Python: Python no iG (Automação de Datacenters)
TDC2010 - Trilha Python: Python no iG (Automação de Datacenters) iG - Internet Group do Brasil S/A
 
Workshop de desenvolvimento para blockchain Ethereum
Workshop de desenvolvimento para blockchain EthereumWorkshop de desenvolvimento para blockchain Ethereum
Workshop de desenvolvimento para blockchain Ethereum
OriginalMy.com
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
Renato Groff
 
Ferramentas para desenvolvimento no blockchain Ethereum
Ferramentas para desenvolvimento no blockchain EthereumFerramentas para desenvolvimento no blockchain Ethereum
Ferramentas para desenvolvimento no blockchain Ethereum
OriginalMy.com
 
Docker de containers a orquestração
Docker de containers a orquestraçãoDocker de containers a orquestração
Docker de containers a orquestração
Italo José
 
Criando um site com LAMP e Joomla em 30 minutos
Criando um site com LAMP e Joomla em 30 minutosCriando um site com LAMP e Joomla em 30 minutos
Criando um site com LAMP e Joomla em 30 minutos
Fernando Mercês
 
Kdc spoofing com kerberos mit
Kdc spoofing com kerberos mitKdc spoofing com kerberos mit
Kdc spoofing com kerberos mit
Marcelo Fleury
 
KDC Spoofing com Kerberos MIT
KDC Spoofing com Kerberos MITKDC Spoofing com Kerberos MIT
KDC Spoofing com Kerberos MIT
Diego Santos
 
Curso de Node JS Básico
Curso de Node JS BásicoCurso de Node JS Básico
Curso de Node JS Básico
Victor Hazin da Rocha
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
Renato Groff
 
Instalação do i-Educar com Linux Containers (LXC)
Instalação do i-Educar com Linux Containers (LXC)Instalação do i-Educar com Linux Containers (LXC)
Instalação do i-Educar com Linux Containers (LXC)
Portabilis
 
Aula 8 sistemas_embarcados_i2_c
Aula 8 sistemas_embarcados_i2_cAula 8 sistemas_embarcados_i2_c
Aula 8 sistemas_embarcados_i2_cdarosajoseluiz
 

Mais procurados (19)

TDC2018SP | Trilha Containers - Linux Conteineres na unha
TDC2018SP | Trilha Containers - Linux Conteineres na unhaTDC2018SP | Trilha Containers - Linux Conteineres na unha
TDC2018SP | Trilha Containers - Linux Conteineres na unha
 
Projeto Terminais Leves Linux
Projeto Terminais Leves LinuxProjeto Terminais Leves Linux
Projeto Terminais Leves Linux
 
Kubernetes no Governo Federal - Kubernetes Meetup #3
Kubernetes no Governo Federal - Kubernetes Meetup #3Kubernetes no Governo Federal - Kubernetes Meetup #3
Kubernetes no Governo Federal - Kubernetes Meetup #3
 
Aula PIT 3 - Ambientes
Aula PIT 3 - AmbientesAula PIT 3 - Ambientes
Aula PIT 3 - Ambientes
 
Producao Segura de Containers com Kubernetes e CoreOS - QCONSP 2017
Producao Segura de Containers com Kubernetes e CoreOS - QCONSP 2017Producao Segura de Containers com Kubernetes e CoreOS - QCONSP 2017
Producao Segura de Containers com Kubernetes e CoreOS - QCONSP 2017
 
Blockchain além do Hello World
Blockchain além do Hello WorldBlockchain além do Hello World
Blockchain além do Hello World
 
Pyro vs RMI
Pyro vs RMIPyro vs RMI
Pyro vs RMI
 
TDC2010 - Trilha Python: Python no iG (Automação de Datacenters)
TDC2010 - Trilha Python: Python no iG (Automação de Datacenters)TDC2010 - Trilha Python: Python no iG (Automação de Datacenters)
TDC2010 - Trilha Python: Python no iG (Automação de Datacenters)
 
Workshop de desenvolvimento para blockchain Ethereum
Workshop de desenvolvimento para blockchain EthereumWorkshop de desenvolvimento para blockchain Ethereum
Workshop de desenvolvimento para blockchain Ethereum
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
 
Ferramentas para desenvolvimento no blockchain Ethereum
Ferramentas para desenvolvimento no blockchain EthereumFerramentas para desenvolvimento no blockchain Ethereum
Ferramentas para desenvolvimento no blockchain Ethereum
 
Docker de containers a orquestração
Docker de containers a orquestraçãoDocker de containers a orquestração
Docker de containers a orquestração
 
Criando um site com LAMP e Joomla em 30 minutos
Criando um site com LAMP e Joomla em 30 minutosCriando um site com LAMP e Joomla em 30 minutos
Criando um site com LAMP e Joomla em 30 minutos
 
Kdc spoofing com kerberos mit
Kdc spoofing com kerberos mitKdc spoofing com kerberos mit
Kdc spoofing com kerberos mit
 
KDC Spoofing com Kerberos MIT
KDC Spoofing com Kerberos MITKDC Spoofing com Kerberos MIT
KDC Spoofing com Kerberos MIT
 
Curso de Node JS Básico
Curso de Node JS BásicoCurso de Node JS Básico
Curso de Node JS Básico
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
 
Instalação do i-Educar com Linux Containers (LXC)
Instalação do i-Educar com Linux Containers (LXC)Instalação do i-Educar com Linux Containers (LXC)
Instalação do i-Educar com Linux Containers (LXC)
 
Aula 8 sistemas_embarcados_i2_c
Aula 8 sistemas_embarcados_i2_cAula 8 sistemas_embarcados_i2_c
Aula 8 sistemas_embarcados_i2_c
 

Semelhante a Calico seguranca para containers e mais

Iniciando com kubernetes
Iniciando com kubernetesIniciando com kubernetes
Iniciando com kubernetes
Diogo Alves Miranda Barbosa
 
Beers & Bytes - O Futuro da virtualização
Beers & Bytes - O Futuro da virtualizaçãoBeers & Bytes - O Futuro da virtualização
Beers & Bytes - O Futuro da virtualização
Carlos Smaniotto
 
Troubleshooting docker
Troubleshooting dockerTroubleshooting docker
Troubleshooting docker
Rafael Gomes
 
Criando sua própria nuvem com Raspberry Pi
Criando sua própria nuvem com Raspberry PiCriando sua própria nuvem com Raspberry Pi
Criando sua própria nuvem com Raspberry Pi
Daniel Rodrigues de Sousa
 
O futuro do Openstack, NFV, SDN e Cloud Computing - FISL 2014
O futuro do Openstack, NFV, SDN e Cloud Computing - FISL 2014O futuro do Openstack, NFV, SDN e Cloud Computing - FISL 2014
O futuro do Openstack, NFV, SDN e Cloud Computing - FISL 2014
Marcelo Dieder
 
Minicurso Node-RED.pdf
Minicurso Node-RED.pdfMinicurso Node-RED.pdf
Minicurso Node-RED.pdf
LuizGuilherme949739
 
QCon 2019 - Kubernetes Deepdive
QCon 2019 -  Kubernetes DeepdiveQCon 2019 -  Kubernetes Deepdive
QCon 2019 - Kubernetes Deepdive
Ricardo Katz
 
Eripi2018 p4 tutorial
Eripi2018 p4 tutorialEripi2018 p4 tutorial
Eripi2018 p4 tutorial
Nathan Saraiva
 
5 - segurança - firewall
5  - segurança - firewall5  - segurança - firewall
5 - segurança - firewall
Andre Peres
 
DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)
DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)
DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)
Caio Candido
 
Curso de Verão - Aula 02 - Orquestração de Contêineres
Curso de Verão - Aula 02 - Orquestração de ContêineresCurso de Verão - Aula 02 - Orquestração de Contêineres
Curso de Verão - Aula 02 - Orquestração de Contêineres
GuilhermeJorgeAragod
 
Camada rede
Camada redeCamada rede
Camada rede
Jhosafá de Kastro
 
Docker em Produção com Kubernetes
Docker em Produção com Kubernetes Docker em Produção com Kubernetes
Docker em Produção com Kubernetes
Fernando Ruaro
 
Semana Acadêmica ICET - Feevale - 12/04/2014
Semana Acadêmica ICET - Feevale - 12/04/2014Semana Acadêmica ICET - Feevale - 12/04/2014
Semana Acadêmica ICET - Feevale - 12/04/2014
Getup Cloud
 
Rodando uma API Com Django Rest Framework no Google Cloud
Rodando uma API Com Django Rest Framework  no Google CloudRodando uma API Com Django Rest Framework  no Google Cloud
Rodando uma API Com Django Rest Framework no Google Cloud
Alvaro Viebrantz
 
Cases de Python no 7Masters 2012
Cases de Python no 7Masters 2012Cases de Python no 7Masters 2012
Cases de Python no 7Masters 2012
Rodrigo Senra
 
Python: Cabe no seu bolso, cabe no seu micro, cabe no seu cérebro!
Python: Cabe no seu bolso, cabe no seu micro, cabe no seu cérebro!Python: Cabe no seu bolso, cabe no seu micro, cabe no seu cérebro!
Python: Cabe no seu bolso, cabe no seu micro, cabe no seu cérebro!
iMasters
 
Protegendo Docker
Protegendo DockerProtegendo Docker
Protegendo Docker
guilhermeoki
 

Semelhante a Calico seguranca para containers e mais (20)

Iniciando com kubernetes
Iniciando com kubernetesIniciando com kubernetes
Iniciando com kubernetes
 
Beers & Bytes - O Futuro da virtualização
Beers & Bytes - O Futuro da virtualizaçãoBeers & Bytes - O Futuro da virtualização
Beers & Bytes - O Futuro da virtualização
 
Troubleshooting docker
Troubleshooting dockerTroubleshooting docker
Troubleshooting docker
 
Criando sua própria nuvem com Raspberry Pi
Criando sua própria nuvem com Raspberry PiCriando sua própria nuvem com Raspberry Pi
Criando sua própria nuvem com Raspberry Pi
 
O futuro do Openstack, NFV, SDN e Cloud Computing - FISL 2014
O futuro do Openstack, NFV, SDN e Cloud Computing - FISL 2014O futuro do Openstack, NFV, SDN e Cloud Computing - FISL 2014
O futuro do Openstack, NFV, SDN e Cloud Computing - FISL 2014
 
Mini-curso CUDA
Mini-curso CUDAMini-curso CUDA
Mini-curso CUDA
 
Minicurso Node-RED.pdf
Minicurso Node-RED.pdfMinicurso Node-RED.pdf
Minicurso Node-RED.pdf
 
QCon 2019 - Kubernetes Deepdive
QCon 2019 -  Kubernetes DeepdiveQCon 2019 -  Kubernetes Deepdive
QCon 2019 - Kubernetes Deepdive
 
Eripi2018 p4 tutorial
Eripi2018 p4 tutorialEripi2018 p4 tutorial
Eripi2018 p4 tutorial
 
Cisco ccna modulo 04
Cisco ccna modulo 04Cisco ccna modulo 04
Cisco ccna modulo 04
 
5 - segurança - firewall
5  - segurança - firewall5  - segurança - firewall
5 - segurança - firewall
 
DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)
DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)
DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)
 
Curso de Verão - Aula 02 - Orquestração de Contêineres
Curso de Verão - Aula 02 - Orquestração de ContêineresCurso de Verão - Aula 02 - Orquestração de Contêineres
Curso de Verão - Aula 02 - Orquestração de Contêineres
 
Camada rede
Camada redeCamada rede
Camada rede
 
Docker em Produção com Kubernetes
Docker em Produção com Kubernetes Docker em Produção com Kubernetes
Docker em Produção com Kubernetes
 
Semana Acadêmica ICET - Feevale - 12/04/2014
Semana Acadêmica ICET - Feevale - 12/04/2014Semana Acadêmica ICET - Feevale - 12/04/2014
Semana Acadêmica ICET - Feevale - 12/04/2014
 
Rodando uma API Com Django Rest Framework no Google Cloud
Rodando uma API Com Django Rest Framework  no Google CloudRodando uma API Com Django Rest Framework  no Google Cloud
Rodando uma API Com Django Rest Framework no Google Cloud
 
Cases de Python no 7Masters 2012
Cases de Python no 7Masters 2012Cases de Python no 7Masters 2012
Cases de Python no 7Masters 2012
 
Python: Cabe no seu bolso, cabe no seu micro, cabe no seu cérebro!
Python: Cabe no seu bolso, cabe no seu micro, cabe no seu cérebro!Python: Cabe no seu bolso, cabe no seu micro, cabe no seu cérebro!
Python: Cabe no seu bolso, cabe no seu micro, cabe no seu cérebro!
 
Protegendo Docker
Protegendo DockerProtegendo Docker
Protegendo Docker
 

Calico seguranca para containers e mais

  • 1. Project Calico Segurança para Containers e um pouco mais :)
  • 2. Eu, rapidão :) ● CKA e LPIC3 (essa venceu…) ● Gerente de engenharia de Nuvem no SERPRO - Projeto Estaleiro ● Nesse mundo Linux desde 2004, no SERPRO desde 2009, mexendo com esses trecos desde 2014 ● Curioso, aficionado por aviação ● Corinthiano
  • 4. Conceitos ● Container - Menor unidade existente no Host - Um PROCESSO ● Labels - Identificador para cada objeto no Kubernetes ● PODs - Objeto que representa o conjunto de 1 a N agregados, que compartilham REDE, CPU e Memória, storage, etc - Uma aplicação rodando (e a menor unidade em um Cluster Kubernetes) ● Services - Objeto que representa a abstração lógica para um conjunto de PODs idênticos - 1 IP fixo que identifica 1 a N PODs ● Deployment - Objeto que controla um conjunto de PODs, quantidade de réplicas, volumes, etc ● Network Policy - Objeto que controla permissões de comunicação de PODs
  • 5. Docker x Redes Fonte: https://www.kaitoy.xyz/images/docker_network.jpg
  • 6. Namespaces $ man 7 namespaces “A namespace wraps a global system resource in an abstraction that makes it appear to the processes within the namespace that they have their own isolated instance of the global resource. Changes to the global resource are visible to other processes that are members of the namespace, but are invisible to other processes. One use of namespaces is to implement containers.”
  • 9. CNI - Container Network Interface ● Originalmente criado para o RKT (runtime de Containers da CoreOS) ● O Kubelet chama um programa (o CNI!) para: ○ Criar um Network Namespace (e as placas de rede), caso não exista, alocado ao Namespace (PID) do POD ○ Alocar um IP para o POD ○ Desfazer e destruir tudo isso quando o POD morre ● No Kubelet, é composto do diretório de binários (--cni-bin-dir) e configuração (-- cni-conf-dir) { "name": "nomequalquer", "cniVersion": "0.1.0", "type": "calico", "ipam": { "type": "calico-ipam" } }
  • 10. CNI - Container Network Interface ● Quando criamos um POD o seguinte ocorre dentro do Kubelet: # CNI_COMMAND=ADD CNI_CONTAINERID=1234567890 CNI_NETNS=/var/run/netns/1234567890 CNI_IFNAME=eth12 CNI_PATH=/opt/cni/bin ./calico <calico.conf { "ip4": { "ip": "172.17.1.17/32" }, "dns": {} } ● Ou seja, o Kubernetes não conhece a stack de rede. Ao invés disso ele delega a um programa (o CNI!) o controle dessa rede, inclusive IPAM ● Adicionalmente, ele pode usar esse programa para controle de regras de firewall do ambiente
  • 11. Resumo até aqui Kube APIWorkload Scheduler Kubelet ● Baixa imagem ● Executa o CNI ● Sobe o POD (Pause + Containers)
  • 12. Project Calico “Secure networking for the cloud native era”
  • 13. O que é o Calico? ● Software que provê conectividade e segurança de redes ● Simples - Modelo de redes simplificado, baseado em tecnologias de roteamento já conhecidas e bem utilizadas e sem necessidade de Overlays de rede ● Escalável - Possui uma arquitetura descentralizada onde cada node de rede é responsável pelo seu workload (regras, roteamento) e utiliza apenas um banco centralizado para armazenar informações ● Seguro - Calico provê capacidades de microsegmentação de forma simplificada, com a declaração de regras baseadas em objetos, labels e ações ● OpenSource - Código totalmente aberto, comunidade participante de decisões no design do Kubernetes
  • 14. Principais recursos ● Rede - Responsável por prover conectividade entre PODs ○ Suporte a IPv6 ○ NAT de saída ○ BGP e suporte à IPs reais por PODs ○ IP-in-IP para roteamento entre Datacenters ● Segurança - Provê microsegmentação ○ Para o Kubernetes através do uso de Network Policies ○ Para hosts físicos, com o agente instalado
  • 15. Topologia 1 - Acesso direto ao ETCD ETCD calicoctl K8s policy controller configurações kube-api Network policies (*) Objetosde regrasCalico Calico Node Calico Node Calico Node Configurações e regras de firewall (*) (*) = O Calico Node e o k8s-policy quem lêem as configurações CNI Requisita IP, aloca rotas Network Policies
  • 16. Topologia 2 - Acesso via API do Kubernetes (beta) ETCD kube-api Calico Node Configurações e regras de firewall CNI Requisita IP, aloca rotas Objetos de conf (CRD)
  • 17. Componentes ● Node - Container que agrega vários componentes para funcionamento do Calico ○ Felix - “Coração” da solução, responsável pela programação de interfaces, rotas e ACLs/regras de firewall e NAT ○ BIRD e BIRD6 - Cliente BGP para troca de informações de Rotas entre cada um dos nós (IPv4 e IPv6) ○ CONFD - Daemon que lê configurações do ETCD e reconfigura arquivos de acordo com templates - Gera as configurações do BIRD
  • 18. Componentes ● Kubernetes Policy Controller - Traduz objetos Network Policies em Objetos de regras para o Calico ○ Existem também plugins para o Openstack, por exemplo ● Route Reflector - Em ambientes muito grandes ou que demandem sincronização com roteadores externos, replica e agrega as rotas do ambiente via BGP - Baseado no BIRD
  • 20. Não precisa ser complexo pra ser completo :)
  • 21. Referências ● https://www.projectcalico.org ● https://kubernetes.io ● https://github.com/containernetworking/cni/blob/master/SPEC.md ● https://blog.scottlowe.org/2013/09/04/introducing-linux-network-namespaces/ ● http://www.dasblinkenlichten.com/understanding-cni-container-networking-interface/ ● http://blog.mbrt.it/2017-10-01-demystifying-container-networking/ ● https://thenewstack.io/hackers-guide-kubernetes-networking/ ● https://www.cncf.io/wp-content/uploads/2017/11/Introduction-to-CNI-2.pdf ● https://github.com/kelseyhightower/kubernetes-the-hard-way ● https://gist.github.com/rikatz/68217ad14b481d18d73d96edb3052e37 ● http://mvp.tigera.io/ - Entre, participe, ganhe uma camiseta do Calico :D