archives

TLDR

Qual o objetivo desse post?

Às vezes lemos em vagas ou ouvimos em palestras que é necessário ter uma base sólida em redes e sistemas operacionais para atuar com Cloud ou DevOps, contudo, isso pode ser vago e sem contexto para a maioria.

Quando falamos de redes estamos falando de um vasto CONTINENTE de conceitos e tecnologias, neste post vamos arranhar – de leve – a superfície desse continente, acredite.

Aqui reunimos quais os conhecimentos de REDE necessários no dia-a-dia, e podemos dizer que eles podem ser considerados uma “BASE SÓLIDA” de alguém que está pronto para atuar em projetos no mercado profissional.

Esperamos que as pessoas possam avaliar se já conhecem os temas, ou o quanto conhecem dos temas ou então, encontrar em que nível de conhecimento estão e caso não conheçam algo, podem colocar o assunto no seu ToDo para estudar.

Neste post nós não devemos entrar em questões e termos de cloud providers, vamos tentar focar no que é comum em todos eles.

A ideia desse post surgiu após o post do GOMEX sobre os primeiros passos para entrar no mundo DevOps.

Nosso desejo é fazer os seguintes posts de forma coletiva:

  • O que é ter uma base sólida em redes;
  • O que é ter uma base sólida em linux;
  • O que é ter uma base sólida em git;
  • O que é ter uma base sólida em shell.

E quem sabe podemos entrar em Python, Ruby e Go. Se tiver gente que manje e queria compartilhar eu ajudo a escrever :)

Se quiser ajudar comenta aí ou me chama no twitter :)

Momento Merchan :P

Me siga no twitter @gutocarvalho e acompanhe meus posts sobre Cloud Native e CI/CD.

Aproveite e siga a CD Foundation e Cloud Native Foundation no twitter.

Para quem foi feito esse post?

Aqui o foco está nas pessoas atuando nas posições abaixo:

  • Sysadmin;
  • Cloud Native Engineer;
  • Cloud Engineer;
  • DevOps Engineer;
  • Plataform Engineer;
  • GitOps Engineer.

Como entender as indicações do texto?

Aqui vamos usar alguns termos simples

  • Conheça, se usado indica uma leitura de alto nível do assunto.
  • Entenda, se usado indica que deve estudar a fundo, instalar e testar, se possível.
  • Aprenda, vai lá e usa de verdade

O que eu vou encontrar aqui?

Vamos falar desde redes, protocolos, modelos, tecnologias, métodos, técnicas, ferramentas e poderemos tocar em alguns aspectos do Sistema Operacional Linux também.

Nosso foco aqui é Open Source, Open Standards e sistemas Linux e Unix Like.

No primeiro momento vamos indicar alguns links para você iniciar seus estudos, os esforços estarão centrados nisso, com o tempo vamos expandir esses links.

Eu já conheço quase tudo, o que isso significa?

De pronto eu posso dizer:

  • Significa que você tem uma base sólida nesta área de redes, significa que você consegue se sair bem reuniões que envolvam o tema, conseguindo falar a mesma língua das pessoas presentes e consegue colaborar com todos;
  • Significa que você consegue construir e desenhar projetos levando em conta aspectos fundamentais de redes;
  • Significa que você consegue fazer troubleshooting de forma efetiva.

E o que mais?

  • Significa também que é hora de ir além :)
  • Significa que pode contribuir com o post, mas só se quiser :P
  • Se você tem todos esses skills, certamente é uma pessoa que eu gostaria de trabalhar junto ;)

Conheça os colaboradores do post

Pessoas que colaboraram com o texto.

  • Rafael Gomex (@gomex)
  • Rafael Silva (@rafaotetra)
  • Saulo Madalozzo (@madalozzo)

Esse documento será atualizado regularmente?

A ideia é essa, acompanhe pelo histórico de revisões.

Histórico de revisões

  • 2022-03-10
    • Atualizada a seção Network
    • Atualizada a seção de CertManager/LetsEncrypt
    • Atualizada a seção Redes Linux
    • Atualizada a seção Interfaces de rede
    • Atualizada a seção Iptables
    • Atualizada a seção NTP
    • Atualizada a seção VPN
    • Atualizada a seção Materiais complementares
    • Atualizada a seção Load Balancer
    • Atualizada a seção Reverse Proxy
    • Links adicionados na parte de Network
    • Links adicionados na parte de modelo OSI
    • Links adicionados na parte de DNS
    • Links adicionados em protocolos de rede
    • Links adicionados em conceitos de rede
    • Links adicionados em DHCP 2022-03-09
    • Primeira versão

Tabela de conteúdo

Entenda o que é network

  • Entendenda redes
    • Entender o que é uma rede e para que serve
    • Entender o que é um IP e para que serve
    • Entender o que é uma máscara de rede e para que serve
    • Entender o que é uma sub-rede e paera que server
      • Entender as classes de rede A, B, C, D, E
      • Entender e conhecer as redes reservadas
      • Entender o que é localhost
    • Conheça a conversao binária para endereços IP
    • Aprender a usar calculadora de redes
  • Conhecer Organizações
    • Conhecer a IETF
    • Conhecer a IRTF
    • Conhecer a IANA
    • Conhecer a EFF
    • Conhecer a ICANN
  • Conhecer padrões de documentação
    • RFC

Definições

Organizações

Documentos

Youtube

Ferramentas

Videos Professor Paulo Kretcheu

Entenda o modelo OSI

  • Entenda o modelo
    • Entenda as camadas
    • Conheça os principais protocolos de cada camada
    • Entenda que é apenas uma referência e nunca foi implementado
    • Entenda que ainda assim é a referência mais utilizada

Definições

Videos Professor Paulo Kretcheu

## Entenda o modelo TCP/IP

  • Entenda o modelo
    • Entenda as camadas
    • Conheça os principais protocolos de cada camada
    • Entença que foi o modelo que se tornou padrão e ganhou o mercado
    • Entenda que toda a internet roda em cima dele :)

Entenda os protocolos de rede mais importantes

  • IP
    • Entenda IPv4
      • Entenda o 3 Way Handshake
    • Entenda IPSEC
    • Entenda IPv6
  • TCP
    • Entenda seus benefícios e drawbacks
    • Entenda IANA e Portas
    • Entenda o processo de handshake
  • UDP
    • Entenda seus benefícios e drawbacks
  • ICMP
    • Entenda seus benefícios e para que serve
  • ARP
    • Entenda para que serve e como funciona

IP

TCP

UDP

ICMP

ARP

Videos Prof. Paulo Kretcheu

Entenda os conceitos de rede mais importantes

Entenda formas de comunicação

  • Entenda o que é unicast
  • Entenda o que é broadcast
  • Entenda o que é multicast
  • Entenda o que é anycast
  • Entenda a diferença entre unicast e multicast

Entenda NAT

  • Entenda o que é para que serve?
  • Entenda o que é PAT e qual a diferença pro nat?

Entenda essa tal de VLAN, 802.1Q (alto nível)

  • Entenda o que é VLAN
  • Entenda para que usamos uma VLAN e sua importância

Videos Prof. Paulo Kretcheu

Entenda DHCP

  • Entenda para que serve o DHCP
  • Entenda como funciona o DHCP
  • Entenda o dhcp process (discovery, offer, request, ack )
  • Entenda o dhcp lease
  • Entenda como configurar um interface de rede para uso de DHCP
    • ambiente debian-like
    • ambiente redhat-like
  • Conheça e veja um arquivo de configuração de algum dhcp server.

Videos Prof. Paulo Kretcheu

Entenda DNS

DNS Fundamentos

  • Entenda para que serve o DNS
  • Entenda como funciona a infraestrutura de DNS
  • Conheça as RFCs 1034 e 1035
  • Entenda a relação da IANA e DNS
  • Entenda a relação da ICANN e DNS

DNS estrutura

  • Entenda uma árvore de DNS
  • Entenda o que são os RootServers
  • Entenda como funciona a DNS Database
  • Entenda o que é um Registrar de DNS

DNS Domínios

  • Entenda o que é um TLDN
  • Entenda o que é um FQDN

DNS como serviço

  • Entenda o que é um servidor de autoridade DNS
  • Entenda o que é um servidor de cache de DNS
  • Entenda o que é pesquisa recursiva e como funciona
  • Entenda o que é uma zonas de DNS
  • Entenda o que é TTL de uma zona
  • Entenda o que são registros de DNS
  • Entenda quais são os tipos de registro de DNS
  • Entenda o que é um DNS Reverso e IP Reverso

DNSSEC

  • Entenda o que faz e como faz

DNS no Brasil

  • Conheça o NIC.Br
  • Entenda o Registro.Br

Principais implementações de serviços de DNS

  • Conheça Projeto BIND
  • Conheça Projeto PowerDNS
  • Conheça Projeto UnBound DNS

Troubleshooting

  • Aprenda a usar DIG para fazer troubleshooting de DNS
  • Aprenda a usar NSLOOKUP para fazer troubleshotting de DNS

Arquivos importantes no SO para lidar com DNS

  • Entenda o arquivo /etc/hosts
  • Entenda o arquivo /etc/resolv.conf
  • Entenda o arquivo /etc/nsswitch.conf

Definições principais

Definições sobre infraestrutura de DNS

Definições sobre domínios

Implementações mais comuns de serviço de DNS

Implementações de DNS para Kubernetes

Entidades que administram DNS no Brasil

RFCs

Videos Prof. Paulo Kretcheu

Entenda os protocolos de serviços para WEB

Entenda e conheça o protocolos para web

  • HTTPv1
    • Conheça os principais códigos de retorno do HTTP
      • 404 not-found
      • 503 service unavailable
      • 200 ok
    • Conheça os grupo de códigos HTTP
      • 500-599 erros do servidor
      • 400-499 erros do cliente
      • 300-399 redirecionamentos
      • 200-299 repostas de sucesso
      • 100-199 repostas de informacao
    • Entenda os principais verbos ou métodos HTTP
      • GET
      • POST
      • PUT
      • DELETE
  • HTTPv2
    • Entenda o que mudou
    • Entenda no que você precisa ficar mais atento
  • HTTPS
    • Entenda Como funciona
    • Entenda por que é importante
    • Entenda como implementar em seu projeto e infra

Entenda Transport Layer Security ou TLS

  • Entenda para que serve
  • Entenda como funciona
  • Entenda a diferença de SSL para TLS

Entenda o que são certificados

  • Entenda para que servem certificados
  • Entenda o que é uma CA
  • Entenda o que é um certificado wildcard
  • Entenda o que é um certificado auto assinado

Aprenda trabalhar com openssl

  • Entenda como criar certificados auto assinados
  • Entenda como ler informações de certificados

Aprenda a trabalhar com letsencrypt e certbot

  • Entenda o projeto letsencrypt
  • Entenda o certbot
    • Entenda como gerar certificados standalone
    • Entenda como gerar um certificado simples
    • Entenda como gerar um certificado wildcard
    • Entenda como gerar um certificado usando DNS
    • Aprenda a usar o plugin CloudFlare
    • Aprenda a usar o plugin Route53
    • Aprenda a usar o plugin GCP
  • Entenda como usar certbot com webservers
    • Aprenda a usar o plugin para NGINX
    • Aprenda a usar o plugin para Apache HTTPd
    • Aprenda a usar o plugin para HAPROXY
  • Entenda como renovar certificados
  • Entenda como automatizar a renovação de certificados
  • Entenda o cert-manager

Implementações de TLS

LetsEncrypt, Certbot e Cert-Manager

Entenda o NTP

  • Entenda o que é o Network time Protocol ou NTP
    • Conheça as principais implementações do NTP server
    • Conheça o timesyncd (parte do projeto systemd)
    • Conheça o chrony (usado em redhat systems)
    • Conheça o ntpd (ntp.org)
    • Conheça o principal cliente NTP, ntpdate
    • Entenda o que é timezone e sua ligação com NTP

Comparações entre implementações NTP

Entenda o network filesystem ou NFS

  • Entenda o que é o NFS
  • Entenda para que serve o NFS
  • Entenda como montar um volume NFS
  • Conheça um servidor NFS e seu arquivo de configuração

Conheça e entenda o protocolo LDAP de autenticação

  • Entenda o que é o LDAP
  • Entenda para que serve o LDAP
  • Entenda como integrar sua ferramenta a um serviço LDAP
  • Entenda como integrar seu Linux com um serviço LDAP

Entenda o protocolo SSH para acesso remoto

  • Entenda o que é SSH e para que ele serve
    • Entenda o funcionamento do SSH Client
    • Conheça um arquivo de config exemplo
    • Entenda o funcionamento do SSH Server
    • Conheça um arquivo de config exemplo
    • Entenda o funcionamento do comando SCP
    • Entenda o funcionamento do SFTP
    • Entendo o funcionamento do RSYNC com SSH
    • Entenda o funcionamento do Tuneling
    • Entenda o funcionamento do Port Forward
    • Entenda o funcionamento do X Forward
    • Entenda o funcionamento do Jump Server
    • Entenda o conceito de Bastion Host

Conheça os protocolos de correio mais comuns

  • Entendo o protocolo de envio ou SMTP
  • Entenda o protocolo de acesso ao correio ou IMAP
  • Entenda o protocolo de download de mensagens de correio ou POP

conheça soluções de segurança para correio eletrônico

  • Entenda a política de proteção de envios SPF
  • Entenda a proteção de domínios DKIM
  • Entenda a proteção DMARC

Protocolos

Segurança no correio

Dicas do Antispam[.]br

Entenda o que é VPN

  • Entenda o que é uma vpn?
  • Entenda para que serve?
  • Entenda os tipos mais comuns
    • Entenda o tipo REMOTE ACCESS
    • Entenda o tipo POINT TO POINT
    • Entenda o tipo IPSEC

Aprenda a trabalhar com openvpn

  • Entenda o uso de um cliente cli openvpn
  • Conheça exemplo de config de servidor openvpn

Aprenda a trabalhar com wireguard

  • Entenda o uso de um cliente cli wireguard
  • Conheça exemplo de config de servidor wireguard

Aprenda a trabalhar com ipsec

  • Entenda o que preciso saber sobre ipsec
  • Conheça os projetos e implementações mais importantes
    • Conheça o projeto openswan
    • Conheça o projeto strongswan
    • Conheça o projeto libreswan

Definição

Protocolos

Projetos de VPN que implementam PPTP e L2TP

Projetos de VPN que implementam IPSEC

Redes no Linux

Entenda configuração de redes no linux

  • Entenda o que são interfaces ethernet
    • Entenda que é mac address
    • Entenda os tipos de configuração de interface
    • Entenda como criar uma interface BOND
    • Entenda como criar uma interface BRIDGE
    • Entenda como criar uma interface VLAN
    • Entenda como criar uma interface VIRTUAL
    • Entenda como criar uma interface LOOPBACK
  • Entenda como configurar interfaces
    • Entenda a configuração em sistemas debian like
    • Entenda a configuração em sistemas redhat like
    • Entenda a configuração usando netplan
  • Entenda como usar ferramentas
    • Aprenda a usar o ifconfig, netstat
    • Aprenda a usar o ip, ss
    • Aprenda a usar o ethtool

Entenda roteamento no Linux

  • IP ROUTE
    • Entenda como funciona
    • Entenda como ver rotas
    • Entenda como criar rotas
    • Entenda como deletar rotas
    • Entenda como ver e criar tabelas e rotas para tabelas
    • Entenda como persistir rotas de forma estática

Entenda filtro de pacotes no linux

  • IPTABLES Packet Filter
    • Entenda para que serve e como funciona
    • Entenda a tabela filter
    • Entenda a cadeia foward
    • Entenda a cadeia ouput
    • Entenda a cadeia input
    • Entenda a tabela nat
    • Entenda cadeia prerouting
    • Entenda cadeia forwarding
    • Entenda cadeia output
    • Entenda cadeia postrouting
    • Aprenda a fazer um DNAT
    • Aprenda a fazer um SNAT
    • Aprenda a fazer um Redirect
    • Aprenda a fazer um Masquerade
    • Entenda tabela Mangle
    • Aprenda a marcar pacotes para roteamento
    • Conheça a tabela RAW
    • Conheça a tabela Security

Docker

  • Entenda a relação entre Iptables e Docker

Básicos

Avançados

Entenda técnicas e ferramentas de troubleshooting

Testando a conectividade

  • Aprenda a usar netcat para testes de conectividade
  • Aprenda a usar telnet para testes de conectividade
  • Aprenda a usar CURL e WGET para interagir com sites
  • Aprenda a usar CURL e WGET para fazer download

Analisando tráfego

  • Aprenda a usar tcpdump
  • Aprenda a usar wireshark e tshark

Redes no Linux

  • Aprenda a ver portas abertas e portas listen
  • Aprenda a ver conexões estabelecidas
  • Aprenda como encontrar processo que abriu uma porta
  • Aprenda a usar o PING
  • Aprenda a usar o Traceroute
  • Aprenda a usar o MTR

Material complementar

Assuntos com conexão direta e indireta com redes

Entenda o que é um Load Balancer

  • Entenda o que faz um Load Balancer?
    • Entenda Load Balancer HTTP (camada 7)
    • Entenda Load Balancer TCP (camada 4)
    • Entenda estratégias de LB
    • Entenda RoudRobin
    • Entenda Weighted Round Robin
    • Entenda Least Connection
    • Entenda IP HASH
    • Entenda o conceiro de Stick Session
  • Qual a diferença entre um LB 4 e 7?

Entenda o que é um Reverse Proxy

  • Entenda o que faz e para que serve?
  • Entenda Qual sua relacao com load balancers?
  • Exemplos
    • Config no NGINX
    • Config no HAPROXY

Entenda o que é High Availbility

  • Entenda o que é HA (high availbility) ?
  • Entenda quando usar

Entenda o que é Escalabilidade

  • Entenda o que significa escalar?
  • Entenda o que é escalabilidade horizontal?
  • Entenda o que é escalabilidade vertical?

Elasticidade

  • Entenda o que significa?

Entenda o que são APIs

  • Entender o que são ENDPOINTS
  • Entender o que é REST
  • Conheça o que é SOAP
  • Usando CURL para consumir uma API

Entenda o que é cloud-init

  • Entenda o que é e para que serve
  • Entenda como funciona
  • Aprenda a usar

Outras coisas que vale a pena ler

  • zeroconf
  • bonjour

Termos comuns para entender

Comuns

  • Bastion host
  • Jump /Jump Server
  • Redirect
  • Nat
  • Masquerede
  • Timezone
  • VPN
  • WebService

Erros e problemas

  • Time Out/Timed out
  • DOS
  • DDOS
  • Outage
  • Unavailable

Não tão comuns

  • MTTR
  • IaC
  • SDN

Termos especiais

  • Gambeta/Gambiarra/Solução Extraordiária Temporária #SQN :P
  • POG

Amarrando as pontas

Esse post é uma tentativa de dar um norte ou um caminho para se tornar uma pessoa sólida em redes, entendendo quais são os aspectos fundamentais e necessários para o dia-a-dia na vida profissional.

Se você conseguir ler, estudar, pesquisar e responder as perguntas, entender, conhecer e aprender os assuntos, estará no caminho certo.

Aquele abraço!

Mando aquele abraço para o professor MESTRE Ulysses Almeida (@ulyssesalmeida) que me ensinou boa parte destes conceitos no início desse século.

Mando aquele abraço para o Pizza (José Pissin) que me apresentou o Software Livre e isso mudou a minha vida.

Mando aquele abraço pro @gomex e @badtux que via exemplo me fazem contribuir mais e mais e mais :)

Mando aquele abraço para todos que leram, comentaram, revisaram e contribuiram de alguma forma com esse post!

[s]
Guto

Este post é do tipo #TLDR, entenda aqui.

Se gostou manda um alo no twitter @gutocarvalho ou deixa um comentário bacana :)


Gostou do conteúdo?

Você também me encontra nessas redes!

Mastodon

@gutocarvalho@bolha.us

PixelFed

@gutocarvalho@bolha.photos

Lemmy

@gutocarvalho@bolha.forum

WriteFreely

@gutocarvalho@bolha.blog @notamental@bolha.blog @poesias@bolha.blog @contos@bolha.blog

Bookwyrm

@gutocarvalho@bolha.review

Peertube

@gutocarvalho@bolha.tube

Friendica

@gutocarvalho@bolha.network

Quer saber mais sobre mim?

Visite meus sites!

E meus blogs:

Conhece o Coletivo Bolha?

Então vem conhecer o bolha.io ou bolhaverso!

Nós temos muito mais para compartilhar contigo!

Quer apoiar nosso trabalho? Você pode!

Te vejo no mastodon da bolha.us!

[s]

Bora entender isso e ficar na mesma página? Vem com a gente!

Me siga no twitter @gutocarvalho e acompanhe meus posts sobre Cloud Native e CI/CD.

Siga a CD Foundation e Cloud Native Foundation no twitter.

O que é?

O kubernetes é um orquestrador de containers que oferece meios para você executar, escalar e atualizar seu software de forma simples e eficiente.

Com o kubernetes podemos automatizar a implantação de nosso software integrando nossa pipeline com um cluster de containers, conseguindo assim entregar nosso software de maneira rápida e controlada.

Origens

Em 2014 o google liberou um projeto open source interno que orquestrava containers, ele foi a base para o Kubernetes.

Curiosidades sobre as origens

No Google, internamente o projeto se chamava BORG.

O projeto BORG foi reescrito em GO e foi rebatizado de Kubernetes.

Kubernetes significa timoneiro – em grego, aquele que pilota uma embarcação.

A primeira release do kubernetes foi lançada em 7 de Junho de 2014.

Cloud Native Computing Foundation ou CNCF

O Google queria algum lugar para hospedar não só o projeto Kubernetes em si, mais um lugar em que todos pudessem contribuir com o projeto e criar novas soluções para esse segmento de aplicações rodando em containers.

Com essa ideia em mente, o Google entrou em contato com a Linux Foundation para criar uma estrutura que pudesse receber esse projeto e fomentar tecnologias e soluções ligadas a esse novo universo de containers.

A Linux Foundation criou então a CNCF, Cloud Native Computing Foundation para fomentar o desenvolvimento do Kubernetes e de tecnologias com foco em containers. O Termo Cloud Native foi cunhado e passou a ser utilizado para se referir aplicações desta natureza.

A CNCF foi fundada e teve seu anúncio junto com o lançamento da versão 1.0 do Kubernetes em 21 de Julho de 2015.

Como funciona ?

O Kubernetes ou K8S como é chamado de forma abreviada é um orquestrador que foi desenhado para gerenciar workloads de containers e serviços de forma automatizada, utilizando configuração declarativa que usa o estrutura e formato de dados do projeto YAML.

Isso significa que podemos definir o estado desejado de funcionamento de nosso cluster e também das aplicações rodando neste, apenas utilizando convenções em YAML. Os operadores do cluster vão ler essas definições e garantir esse estado, fazendo modificações quando for necessário.

O kubernetes oferece:

  • Serviço de descoberta
  • Serviço de balanceamento de carga
  • Serviço de proxy
  • Gerenciamento de redes e sub-redes
  • Gerenciamento de DNS
  • Orquestração de storage para os containers
  • Automação de rollouts ou rollbacks de suas aplicações
  • Gerenciamento dos certificados com geração e renovação automática
  • Gerenciamento de configuraçoes (configmaps)
  • Gerenciamento de segredos (secrets)
  • Gerenciamento de jobs (cronjobs)
  • Gerenciamento de limites de recursos para cada container
  • Self-healing, ele reinicia ou substitiu um container em caso de falha

Em resumo, o kubernetes vai oferecer tudo que é necessário para sua aplicação rodar e ser utilizada por seus usuários.

Por que chamam o K8S de OS de Datacenter?

Em alguns treinamentos ou palestras você pode ouvir o pessoal falando que o Kuberneters – antigo BORG – é um sistema operacional de datacenter, e tudo bem, faz sentido falar isso.

Se obervarmos com cuidado, vamos ver que o kubernetes oferece tudo que um software precisa, indo do endereço ip, rede, storage, balanceamento, dns, certificado, configurações, segredos, em suma, ele traz tudo que um datacenter ofereceria para uma aplicação em um lugar só, e essa é beleza e a força do projeto.

É de fato um datacenter inteiro em uma única solução.

Quais os benefícios?

Como o kubernetes oferece tudo que sua aplicação precisa, você tem mais tempo para se preocupar com o negócio, isso pode melhorar sua produtividade e reduzir tempo gasto com configurações comuns geralmente executadas em sua infraestrutura clássica.

O cluster kubernetes te ajuda a usar os recursos computacionais de forma mais eficiente. Como tudo roda em containers, você consegue compartilhar mais recursos computacionais com diferentes aplicações sendo executadas no cluster.

O processo de entrega e o ciclo de desenvolvimento do software pode ser sensivelmente reduzido depois que você integrar o cluster ao seu processo de desenvolvimento.

Uma vez que sua aplicação está rodando em Kubernetes, você conseguirá rodá-la praticamente em quaisquer cloud pública que suporte kubernetes. Essa portabilidade é muito importante e oferece a capacidade de seu software funcionar em diferentes clouds, podendo escolher aquela com melhor custo, ou até replicar sua aplicação em provedores diferentes para garantir mais disponibilidade.

Ao usar aplicações dentro do cluster, você conseguirá reduzir sensivelmente o custo de sua conta em uma Cloud Pública, isso acontece pois o Kubernetes já traz a maioria dos recursos de forma nativa, reduzindo assim dua despesa no final do mês.

O Kubernetes é o orquestrador líder de mercado, é comprovadamente estável, é mantido por diversas empresas incluindo o Google e foi testado em produção em diversos cenários com sucesso, o que nos garante que não estamos embarcando em uma aventura com uma tecnologia com pouca maturidade. Existem muitos cases de aplicações de missão crítica rodando em clusters Kubernetes, se é eficiente para eles, é eficiente para você.

É realmente seguro?

Sim é seguro, contudo, como qualquer outro software ou plataforma a segurança tem que fazer parte de suas preocupações desde o momento do design de seu cluster.

Coisas como:

  • Escolher uma distribuição kubernetes certificada pela CNCF
  • Escolher um OS base mínimo, com foco em K8S
  • Remover credenciais e acessos desnecessários
  • Evitar rodar qualquer coisa com privilégios de ROOT
  • Seguir todas as boas práticas de segurança para clusters K8S
  • Fazer o hardeding de seus clusters
  • Instalar ferramentas para verificar a segurança de seu cluster regularmente
  • Centralizar e acompanhar os logs do cluster e das APPs
  • Centralizar e acompanhar as métricas do cluster e das APPs
  • Inserir segurança no processo de desenvolvimento de suas APPS desde o dia zero

Seguindo essas dicas você terá tanto um cluster quando APPs seguras rodando nele.

Consigo rodar meu software nele?

Consegue sim, mesmo se for um monolito.

Diferente do que muitos pensam o Kubernetes pode rodar qualquer software que esteja embarcado em um container, seja um monolito, um microserviço ou uma API.

Obviamente se você estiver iniciando o desenvolvimento do seu software o ideal é pensar em decompor sua solução em microserviços que se comunicam via API, pensar em aplicações do tipo stateless, pensar em aplicações que podem rodar em múltiplos nodes e pods, pensar em uso de banco de dados externo, pensar em persistência e armazenamento de arquivos usando storage de objetos – estilo S3 – dentre outras boas práticas de APPs Cloud Native.

Seguindo essas dicas, você terá de fato uma aplicação Cloud Native que poderá usar o melhor do Kubernetes. Sua aplicação conseguirá escalar horizontalmente e atender a demanda crescente de seus usuários.

Consigo rodar Kubernetes on-premisses?

Sim consegue, existem excelentes distribuições para rodar On-Premisses, uma delas é o RKE da Rancher.

Quando falamos de on-premisses, precisamos pensar em um desenho robusto de nosso cluster, lembrar que precisamos de redudância entre hypervisors, backup real e eficiente, load balancer L4, centralização de logs, monitoramento, avaliação de métricas e performance, gerenciamento de certificados dentre outras coisas que precisam ser configuradas e levadas em conta para termos um cluster on-premisses rodando de forma segura, estável e performática.

Consigo rodar Kubernetes em meu provedor de nuvem?

Sim consegue também, rodando em instâncias virtuais da mesma forma como rodaria on-premisses ou usando serviços gerenciados do provedor.

Vale a pena usar o kubernetes gerenciado?

Vale muito, especialmente se seu time é mais focado em desenvolvimento do que em infraestrutura.

No caso de plataformas gerenciadas como EKS da AWS, GKS do Google, AKS da Azure, OKE da Oracle ou mesmo o Kubernetes gerenciado da Jelastic/SaveinCloud toda a parte da configuração e funcionamento do cluster, em especial os nós de controle, são mantidos pelo provedor, você só se preocupa com seus workloads e os nós do tipo worker que serão registrados no cluster que foi criado.

Com um kubernetes gerenciado você pode focar em seu negócio e deixar a infra com o provedor, é o melhor cenário para uma empresa com um time pequeno de desenvovledores ou um time sem engenheiros de nuvem.

O que são aplicações Cloud Native?

Aplicações Cloud Native são aquelas que já são construídas pensando em se beneficiar de recursos da computação em nuvem. E neste caso, isso esta intimamente ligado ao uso de containers e a orquestração destes.

Características de aplicações Cloud Native

  • Uso da Cultura DevOps no dia-a-dia do time do produto
  • Uso de métodos ágeis no desenvolvimento do produto
  • Uso de arquitetura de microserviços e API-First
  • Foco em oferecer métricas de seus componentes desde o dia zero
  • Foco em oferecer amplo monitoramento de suas features desde o dia zero
  • Foco em portabilidade e execução multi-cloud desde o dia zero
  • Abstração de sistema operacional com uso de containers
  • Uso de pipelines de integração contínua no processo de desenvolvimento
  • Uso de pipelines de entrega contínua para publicar seu software
  • Software desenhado para rodar como “Stateless”
  • Software pensado para uso de storage de objetos ao invés de filesystem
  • Software pensado para funcionar em cenários de escalabilidade horizontal
  • Software pensado para rodar em clusters de containers como kubernetes ou nomad
  • Software pensado para ser resiliente a falhas, onde possamos usar chaos engineering para testá-lo
  • Foco na rápida entrega de atualizações e novidades para seus usuários
  • Foco na capacidade de fazer rollback de forma fácil e simples caso seja nesessário

Eu acrescentaria ainda:

  • Suporte nativo a Kubernetes e Docker

Basicamente são essas as características que representam uma APP Cloud Native hoje, pelo menos em minha humilde opinião.

Amarrando as pontas

Espero que eu tenha conseguido explicar o projeto Kubernetes e o conceito de Cloud Native para você.

Em breve falaremos da arquitetura do Kubernetes! :)

[s]
Guto


Este post é do tipo #TLDR, entenda aqui.

Se gostou manda um alo no twitter @gutocarvalho.


Gostou do conteúdo?

Você também me encontra nessas redes!

Mastodon

@gutocarvalho@bolha.us

PixelFed

@gutocarvalho@bolha.photos

Lemmy

@gutocarvalho@bolha.forum

WriteFreely

@gutocarvalho@bolha.blog @notamental@bolha.blog @poesias@bolha.blog @contos@bolha.blog

Bookwyrm

@gutocarvalho@bolha.review

Peertube

@gutocarvalho@bolha.tube

Friendica

@gutocarvalho@bolha.network

Quer saber mais sobre mim?

Visite meus sites!

E meus blogs:

Conhece o Coletivo Bolha?

Então vem conhecer o bolha.io ou bolhaverso!

Nós temos muito mais para compartilhar contigo!

Quer apoiar nosso trabalho? Você pode!

Te vejo no mastodon da bolha.us!

[s]