Project Calico é um software de rede open source que fornece conectividade e segurança de rede para containers. Ele usa um modelo de rede simplificado baseado em tecnologias de roteamento como BGP. Cada nó de rede é responsável por seu próprio tráfego de rede e regras de firewall, enquanto um banco de dados centralizado armazena as configurações de rede. Project Calico também fornece capacidades avançadas de microsegmentação de rede através de políticas de rede do Kubernetes.
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
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)
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