Skip to content

Commit

Permalink
Merge branch 'main' into docs/eso-vault
Browse files Browse the repository at this point in the history
  • Loading branch information
brenob6 committed Nov 29, 2024
2 parents 6492d96 + 4aa35e6 commit 5b72d34
Show file tree
Hide file tree
Showing 17 changed files with 713 additions and 28 deletions.
18 changes: 10 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ A documentação está organizada para fornecer uma base sólida, garantindo que

É uma linguagem de programação criada pelo Google, muito utilizada para desenvolvimento backend, de microserviços, aplicativos CLI, entre outros.

O Go é utilizado tanto no Kubernetes, quanto no ESO, as duas principais tecnologias envolvidas no trabalho.
O Go é necessário no ESO para compilar, executar e contribuir com o código-fonte do projeto.

### Kubernetes

Expand All @@ -22,25 +22,27 @@ Com o Kubernetes é possível orquestrar de forma mais fácil múltiplos contêi

### External Secrets Operator (ESO)

O ESO, é uma ferramenta que integra segredos (variáveis sensíveis) de provedores externos, como AWS, Google Cloud, entre outros, com um ambiente kubertenes.
O ESO é um operador Kubernetes que tem como função integrar secrets de sistemas externos, como o AWS Secrets Manager, HashiCorp Vault, etc.

Com ele, é possível, pegar senhas salvas em um ambiente AWS, por exemplo, e subir para um contêiner em um cluster Kubernetes.
O objetivo do ESO é sincronizar secrets sensíveis de APIs externas com o Kubernetes, provendo uma maneira mais fácil e segura de lidar com os eles.

Imagine que você esteja lidando com dados sensíveis como um acesso ao banco de dados que esteja armazenado em um sistema externo. Com o ESO, esses dados são disponibilizados no Kubernetes como secrets, podendo ser consumidos pela aplicação. Além disso, caso as credenciais sejam atualizadas no AWS Secrets Manager, o ESO sincroniza as mudanças automaticamente com o Kubernetes.

## Estrutura do Repositório

As pastas deste repositório foram organizadas de forma a facilitar o processo de configuração e uso do External Secrets Operator (ESO), permitindo que você siga os passos necessários de maneira sequencial e eficiente. A estrutura está dividida da seguinte forma:

Setup: Contém os arquivos e instruções para a configuração inicial, incluindo a instalação do Kubernetes, ESO e demais pré-requisitos.
[SETUP](https://github.com/frmiza/GCES-ESO-Doc/tree/docs/eso_docs/docs/1-Setup)
[SETUP](https://github.com/FGA-GCES/ESO-Documentacao/tree/main/docs/1-Setup)

Conectando: Orienta sobre como integrar o ESO ao Kubernetes e outras plataformas, incluindo como conectar com clusters kubernets locais ou por meio de ferramentas de computação em nuvem como a AWS, Google cloud e Azure
[CONECTANDO](https://github.com/frmiza/GCES-ESO-Doc/tree/docs/eso_docs/docs/2-Conectando)
Conectando: Orienta sobre como integrar o ESO ao Kubernetes e outras plataformas, incluindo como conectar com clusters kubernetes locais ou por meio de ferramentas de computação em nuvem como a AWS, Google cloud e Azure
[CONECTANDO](https://github.com/FGA-GCES/ESO-Documentacao/tree/main/docs/2-Conectando)

Links Externos: Uma coleção de recursos externos úteis, como artigos, fóruns e documentações oficiais, que podem auxiliar durante o desenvolvimento.
[LINKS](https://github.com/frmiza/GCES-ESO-Doc/tree/docs/eso_docs/docs/3-Links)
[LINKS](https://github.com/FGA-GCES/ESO-Documentacao/tree/main/docs/3-Links)

Seção com resolução de problemas encontrados durante o setup do projeto:
[COMMON_ISSUES](https://github.com/frmiza/GCES-ESO-Doc/tree/97a27e5594df9a12945dda4746d4dabacd47b30f/eso_docs/docs/4-Common_issues)
[COMMON_ISSUES](https://github.com/FGA-GCES/ESO-Documentacao/tree/main/docs/4-Common_issues)

## Executar a documentação localmente

Expand Down
228 changes: 228 additions & 0 deletions docs/0-Glossario/glossario.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,228 @@
# Glossário de Tecnologias Relacionadas ao ESO.

Este Glossário está organizado em ordem alfabética.

---

??? note "Cluster"

- **O que é?**
É um conjunto de nós (computadores) que executam cargas de trabalho no Kubernetes, isto é, executar aplicações em container.

É uma técnica que agrupa vários recursos computacionais em uma única unidade lógica. Esses recursos são conectados em rede e trabalham em conjunto para executar tarefas, processar dados e armazenar informações de maneira a melhorar o desempenho de aplicações, garantir alta disponibilidade, reduzir custos e aumentar a escalabilidade, já que os recursos podem ser compartilhados e distribuídos de maneira eficiente para atender às demandas da aplicação em tempo real. Cada computador é um “nó”, sendo que não há limites de quantos nós podem ser interligados.

O cluster é o que proporciona a principal vantagem do Kubernetes: a capacidade de programar e executar containers em um conjunto de máquinas físicas, virtuais, on-premise ou na nuvem. Os containers do Kubernetes não estão vinculados a máquinas individuais. Na verdade, eles são abstraídos em todo o cluster.


- **Para que serve?**
O cluster tem a função de agrupar várias máquinas em um sistema único e eficiente, permitindo que aplicações distribuídas sejam executadas com maior desempenho e escalabilidade. No Kubernetes, ele facilita o gerenciamento de containers de forma a reduzir a complexidade, garantir alta disponibilidade e reduzir custos. O cluster Kubernetes geralmente possui um nó principal que gerencia os pods e o ambiente de execução do sistema.

- **Links úteis:**
- [Introdução aos Clusters](https://kubernetes.io/docs/concepts/cluster-administration/)
- [O que é um cluster do Kubernetes?](https://aws.amazon.com/pt/what-is/kubernetes-cluster/)
- [Kubernetes Clusters: Everything You Need To Know](https://www.atatus.com/blog/kubernetes-clusters-everything-you-need-to-know/)

---

??? note "Docker"

- **O que é?**
Docker é uma plataforma aberta para o desenvolvimento, envio e execução de aplicações. Ele permite que você separe suas aplicações da infraestrutura, facilitando a entrega de software de forma rápida e eficiente, permitindo criar, compartilhar e executar aplicações e microsserviços containerizados.

- **Para que serve?**
Possibilita a gestão da infraestrutura ,utilizando suas metodologias para envio, teste e implantação de código. Com isso, é possível reduzir significativamente o tempo entre a escrita do código e a sua execução em produção.
Ele simplifica processos complexos, como mapeamento de portas, preocupações com o sistema de arquivos e outras configurações padrão, permitindo que o foco seja na escrita de código.
Com ele, é possível desenvolver a aplicação e seus componentes de apoio usando containers. Neste contexto, o container se torna a unidade para distribuir e testar a aplicação. Quando estiver pronto, é possível implantar a aplicação no ambiente de produção, seja ele local, na nuvem ou híbrido.

- **Links úteis:**
- [Documentação oficial](https://docs.docker.com/)

---

??? note "ESO - External Secrets Operator"

- **O que é?**
É um operador do Kubernetes que integra sistemas de gerenciamento de segredos externos (como AWS Secrets Manager, HashiCorp Vault, Google Secrets Manager, Azure Key Vault, IBM Cloud Secrets Manager, CyberArk Conjur, Pulumi ESC, entre outros). O operador lê informações das APIs externas e injeta automaticamente os valores nos segredos do Kubernetes, permitindo sincronizar dados confidenciais de provedores externos.

- **Para que serve?**
Automatiza a sincronização de segredos de APIs externas com os clusters Kubernetes, garantindo segurança e eficiência na gestão de credenciais.
O ESO é composto por um conjunto de recursos personalizados de API — ExternalSecret, SecretStore e ClusterSecretStore — que fornecem uma abstração amigável para a API externa que armazena e gerencia o ciclo de vida dos segredos para você. Isso facilita a gestão de segredos no Kubernetes ao integrá-los de maneira automática com os provedores externos de segredos.

- **Links úteis:**
- [Documentação oficial](https://external-secrets.io/)

---

??? note "Go"

- **O que é?**
Uma linguagem de programação de código aberto criada pelo Google, conhecida pela simplicidade, desempenho, clareza e concisão.
- **Para que serve?**
Usada no desenvolvimento de aplicativos, sistemas de backend e ferramentas, especialmente em ambientes de cloud e Kubernetes.
É uma linguagem que oferece mecanismos de concorrência que facilitam a escrita de programas capazes de aproveitar ao máximo máquinas com múltiplos núcleos e redes, enquanto seu sistema de tipos inovador permite a construção de programas flexíveis e modulares. Go compila rapidamente para código de máquina e, ao mesmo tempo, oferece conveniência com coleta de lixo e o poder da reflexão em tempo de execução. É uma linguagem compilada, estaticamente tipada, que tem a agilidade de linguagens dinamicamente tipadas e interpretadas.
- **Links úteis:**
- [Documentação oficial](https://go.dev/doc/)

---

??? note "Helm"

- **O que é?**
Um gerenciador de pacotes para Kubernetes que facilita a implantação e o gerenciamento de aplicações usando templates chamados "charts".
- **Para que serve?**
Simplifica a configuração, instalação e atualização de aplicativos no Kubernetes.
- **Links úteis:**
- [Documentação oficial](https://helm.sh/docs/)
- [GitHub do projeto](https://github.com/helm/helm)

---

??? note "HPA"

- **O que é?**
Horizontal Pod Autoscaler (HPA)
- **Para que serve?**
É usado para controlar a quantidade de Pods que há em um Deployment. Por exemplo, se o uso de CPU estiver muito alto, o HPA aumentaria a quantidade de pods. Também é possível utilizar o Vertical Pod Autoscaler (VPA), que aumentaria a quantidade de recursos de cada pod em vez de aumentar a quantidade de Pod.
Fonte: [Leo Michalski](https://github.com/leomichalski/kubernetes-para-devs/blob/main/README.md)

---

??? note "Ingress"

- **O que é?**
Em um cluster Kubernetes no qual todas as requisições chegam no mesmo IP e na mesma porta, os Ingresses são responsáveis por direcionar (de acordo com o DNS e o endpoint de cada requisição) essas requisições para os Services adequados. Também pode ser usado para outras finalidades.
Fonte: [Leo Michalski](https://github.com/leomichalski/kubernetes-para-devs/blob/main/README.md)

- **Para que serve?**
Oferece um ponto de entrada único para rotear tráfego para serviços internos.
- **Links úteis:**
- [Sobre Ingress](https://kubernetes.io/docs/concepts/services-networking/ingress/)

---

??? note "Issuer"

- **O que é?**
Um componente em ferramentas como o Cert-Manager para emitir certificados.
- **Para que serve?**
Gerencia a emissão de certificados TLS automáticos para serviços em Kubernetes.Ele que emite o certificado SSL para os Ingresses poderem criptografar (com HTTPS) as requisições que entram e saem, por exemplo.

- **Links úteis:**
- [Documentação do Cert-Manager](https://cert-manager.io/docs/)

---

??? note "Kind"

- **O que é?**
É uma ferramenta para executar clusters Kubernetes locais usando contêineres Docker como "nós" do cluster.
- **Para que serve?**
O Kind foi projetado inicialmente para testar o próprio Kubernetes, mas também pode ser utilizado para desenvolvimento local ou integração contínua (CI). Ele permite criar clusters Kubernetes de forma simples em ambientes locais, facilitando testes e desenvolvimento sem a necessidade de infraestrutura complexa.
- **Links úteis:**
- [Site oficial](https://kind.sigs.k8s.io/)

<font size="3"><p style="text-align: center"><b>Imagem 2</b> - kind - Kubernetes no Docker</p></font>

![pods](../assets/pictures/Glossario2.png)

<p style="text-align: center;"><b>Fonte</b>: <a href="https://kind.sigs.k8s.io/docs/design/initial/">Kind</a></p>

---

??? note "Kubectl"

- **O que é?**
O kubectl é uma ferramenta de linha de comando para se comunicar com o plano de controle de um cluster Kubernetes, utilizando a API do Kubernetes.
- **Para que serve?**
Executa operações no Kubernetes, como criar pods e monitorar o status do cluster.
Permite que você interaja com o cluster Kubernetes, realizando operações como criação, gerenciamento e visualização de recursos. Ele busca um arquivo de configuração chamado config no diretório $HOME/.kube, que contém as informações sobre como se conectar ao cluster.

- **Links úteis:**
- [Documentação oficial - Kubernetes](https://kubernetes.io/docs/reference/kubectl/)

---

??? note "Kubernetes"
- **O que é?**
Uma plataforma de orquestração de contêineres que automatiza a implantação, escala e gerenciamento de aplicativos. É Open Source.
- **Para que serve?**
Garante alta disponibilidade, escalabilidade e monitoramento de aplicações em contêineres.
- **Links úteis:**
- [Documentação oficial](https://kubernetes.io/docs/)
- [GitHub do projeto](https://github.com/kubernetes/kubernetes)

---

??? note "Nginx"
- **O que é?**
É um servidor web HTTP de código aberto que também pode funcionar como proxy reverso, balanceador de carga, cache de conteúdo, servidor proxy TCP/UDP e servidor proxy de e-mail. É amplamente utilizado devido à sua alta performance e capacidade de gerenciar grandes volumes de tráfego.

- **Para que serve?**
O Nginx é utilizado para servir conteúdos web, gerenciar tráfego de rede e balancear a carga entre servidores, além de atuar como proxy reverso e cache de conteúdo. Ele pode ser usado para melhorar a escalabilidade e a performance de aplicações web, distribuindo eficientemente as requisições entre múltiplos servidores.
Possui um processo principal que gerencia a configuração e vários processos de trabalho que fazem o processamento das requisições. Ele distribui as requisições de forma eficiente, e o número de processos de trabalho pode ser ajustado de acordo com o número de núcleos do processador.

- **Links úteis:**
- [Documentação oficial](https://nginx.org/en/docs/)

---


??? note "Lint"
- **O que é?**
Um processo de análise estática do código para identificar erros, problemas de estilo e inconformidades com as melhores práticas de codificação.
- **Para que serve?**
Serve para garantir a qualidade, consistência e a conformidade do código com padrões predefinidos, ajudando a identificar erros de sintaxe, problemas de formatação e más práticas de desenvolvimento antes da execução do código. Ele contribui para a manutenção de um código limpo, legível e eficiente.
- **Links úteis:**
- [Introdução ao linting](https://eslint.org/)

---

??? note "Pods"
- **O que é?**
A menor unidade de computação em Kubernetes, que agrupa um ou mais contêineres.
- **Para que serve?**
Gerencia contêineres que compartilham recursos e atuam como uma única entidade em um cluster.
- **Links úteis:**
- [Sobre Pods](https://kubernetes.io/docs/concepts/workloads/pods/)

<font size="3"><p style="text-align: center"><b>Imagem 3</b> - Organização dos Pods em um cluster</p></font>

![pods](../assets/pictures/Glossario1.png)

<font size="3"><p style="text-align: center">Fonte: [Armosec blog](https://www.armosec.io/blog/kubernetes-security-best-practices//)</p></font>

---

??? note "Secrets"
- **O que é?**
São os dados sensíveis que queremos armazenar, gerenciar e utilizar usando o ESO.

---

??? note "Tilt"
- **O que é?**
Uma ferramenta que ajuda no desenvolvimento local para Kubernetes, permitindo visualizar e gerenciar rapidamente alterações em aplicativos.
- **Para que serve?**
Facilita o fluxo de desenvolvimento em Kubernetes, atualizando o estado do cluster automaticamente com base nas mudanças no código. Ele tem uma interface e automatiza muitas coisas que teríamos que fazer manualmente também!
- **Links úteis:**
- [Site oficial](https://tilt.dev/)
- [Documentação](https://docs.tilt.dev/)

---

??? note "yq"
- **O que é?**
Uma ferramenta que vamos instalar para manipular arquivos YAML em linha de comando, semelhante ao jq para JSON.
- **Para que serve?**
Edita, transforma e consulta arquivos YAML. São nos arquivos YAML que vamos escrever como vai ser a configuração das aplicações, serviços ou clusters.
- **Links úteis:**
- [GitHub do yq](https://github.com/mikefarah/yq)

---



Loading

0 comments on commit 5b72d34

Please sign in to comment.