Ingress.yml
Descrição: este arquivo cria um Ingress no Kubernetes.
Um Ingress é usado para definir regras de entrada HTTP/HTTPS para serviços dentro do cluster.
Ele permite publicar aplicações por hostname e caminho, apontando o tráfego para um Service existente. O Ingress não executa aplicação, não cria Pods e não substitui o Service. Ele define regras de roteamento que precisam ser atendidas por um Ingress Controller instalado no cluster.
No arquivo de referência do cluster, o recurso aparece como:
Recurso: ingresses.networking.k8s.io
Grupo/API: networking.k8s.io
Tipo: Ingress
Versão: v1
GRUPO: networking.k8s.io
TIPO: Ingress
VERSÃO: v1
DESCRIÇÃO:
Ingress é uma coleção de regras que permite que conexões de entrada alcancem os
endpoints definidos por um backend. Um Ingress pode ser configurado para fornecer URLs
acessíveis externamente para serviços, balancear tráfego, terminar SSL, oferecer
hospedagem virtual baseada em nome etc.
Quando usar Ingress
Use Ingress quando a aplicação:
- precisa ser publicada por domínio HTTP/HTTPS;
- precisa ser acessada externamente por navegador ou cliente HTTP;
- precisa de roteamento por hostname;
- precisa de roteamento por caminho;
- precisa apontar um domínio para um
Service; - precisa compartilhar o mesmo IP de entrada com várias aplicações;
- precisa usar TLS/HTTPS com certificado armazenado em
Secret; - precisa de hospedagem virtual baseada em nome;
- precisa centralizar regras de entrada web no cluster;
- já possui um
Serviceexpondo os Pods internamente.
Exemplos comuns:
- publicar um portal institucional;
- publicar uma API;
- publicar um frontend;
- publicar um painel interno;
- publicar aplicação de laboratório;
- publicar ambiente de homologação;
- publicar aplicação de disciplina;
- publicar sistema administrativo;
- rotear
/apipara um Service e/para outro; - usar
app.exemplo.localapontando para um Service interno.
Quando Ingress não é o recurso indicado
Ingress não é o melhor recurso quando o problema exige outro tipo de controle.
| Necessidade | Recurso mais indicado | Motivo |
|---|---|---|
| Executar aplicação e controlar réplicas | Deployment |
Ingress não cria Pods; ele apenas define regras de entrada. |
| Criar endereço interno estável para Pods | Service |
Ingress aponta para Service, não diretamente para Pods. |
| Expor protocolo que não é HTTP/HTTPS | Service do tipo NodePort ou LoadBalancer, ou solução específica do controlador |
Ingress é voltado a tráfego HTTP/HTTPS. |
| Criar política de isolamento de rede | NetworkPolicy |
Ingress não controla isolamento entre Pods ou namespaces. |
| Guardar certificado TLS | Secret |
Ingress apenas referencia o Secret em spec.tls.secretName. |
| Guardar configuração da aplicação | ConfigMap |
Ingress não armazena configuração de aplicação. |
| Guardar senha/token | Secret |
Ingress não é cofre de credenciais. |
| Controlar CPU/memória | ResourceQuota, LimitRange ou resources |
Ingress não controla consumo de recursos da aplicação. |
| Criar balanceador TCP/UDP genérico | Service ou recurso específico do controlador |
Ingress trabalha com regras HTTP/HTTPS. |
| Fazer roteamento avançado moderno, com papéis separados e mais extensibilidade | Gateway API |
Gateway API foi criada para cenários mais avançados de roteamento. |
| Autenticação de usuário da aplicação | Aplicação, proxy de autenticação, Gateway, Ingress Controller com recurso específico ou solução OIDC | Ingress nativo não define login de usuário. |
Uso em cenário de universidade
Em uma universidade, um Ingress pode ser usado para publicar aplicações acadêmicas, administrativas, laboratoriais e de pesquisa sem criar uma VM ou IP exclusivo para cada sistema.
Exemplos:
- publicar um sistema web de setor administrativo;
- publicar uma API de projeto de pesquisa;
- publicar ambiente de homologação de uma equipe;
- publicar aplicação de disciplina;
- publicar painel de laboratório;
- publicar frontend de um projeto;
- publicar múltiplos sistemas usando o mesmo controlador de entrada;
- usar domínios diferentes para ambientes diferentes;
- usar TLS para aplicações web institucionais;
- centralizar entrada HTTP/HTTPS em um Ingress Controller gerenciado.
Uso recomendado em ambiente universitário:
- um
Namespacepor projeto, sistema, disciplina, laboratório ou ambiente; - um
Deploymentpara executar a aplicação; - um
Servicepara expor os Pods internamente; - um
Ingresspara publicar o Service por domínio HTTP/HTTPS; - um
SecretTLS quando o Ingress usar HTTPS; ResourceQuotaeLimitRangepara controlar uso de CPU/memória;NetworkPolicypara isolar projetos diferentes;ServiceAccount,RoleeRoleBindingpara permissões mínimas;- GitLab, Argo CD ou outro GitOps/CI para aplicar os manifestos;
ingressClassNamedefinido quando houver mais de um Ingress Controller;- regras de hostname claras e padronizadas por projeto ou ambiente.
Exemplo completo: ingress.yml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: minha-aplicacao
namespace: meu-projeto
labels:
app: minha-aplicacao
ambiente: homologacao
componente: entrada-web
annotations:
descricao: "Ingress exemplo para publicar aplicação HTTP/HTTPS"
spec:
ingressClassName: nginx
tls:
- hosts:
- minha-aplicacao.exemplo.local
secretName: minha-aplicacao-tls
rules:
- host: minha-aplicacao.exemplo.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: minha-aplicacao
port:
number: 80
Explicação linha por linha
apiVersion: networking.k8s.io/v1
Define a versão da API usada pelo manifesto.
Para Ingress, normalmente é:
apiVersion: networking.k8s.io/v1
Significado:
networking.k8s.io: grupo da API Kubernetes onde fica o Ingress;v1: versão estável da API.
Use exatamente networking.k8s.io/v1 para Ingress moderno.
kind: Ingress
Define o tipo de recurso que será criado.
kind: Ingress
Significado:
Ingress: recurso que define regras de entrada HTTP/HTTPS para Services.
Não confundir com:
Service: cria acesso estável aos Pods;Deployment: cria e atualiza Pods;IngressClass: define a classe/controlador de Ingress;Secret: armazena certificado TLS;Gateway: recurso da Gateway API para roteamento mais avançado.
metadata
metadata identifica e organiza o Ingress.
metadata:
name: minha-aplicacao
namespace: meu-projeto
labels:
app: minha-aplicacao
annotations:
descricao: "Ingress exemplo"
metadata.name
Nome do Ingress.
name: minha-aplicacao
Uso:
- identifica o recurso dentro do namespace;
- aparece em
kubectl get ingress; - deve ser único dentro do namespace.
Exemplos bons:
name: portal-academico
name: api-pesquisa
name: backend-laboratorio
Regras práticas:
- use letras minúsculas;
- use hífen;
- evite acentos;
- evite espaços;
- escolha nome curto e claro.
metadata.namespace
Namespace onde o Ingress será criado.
namespace: meu-projeto
Uso:
- separa aplicações;
- evita mistura entre projetos;
- mantém o Ingress junto do Service que ele publica;
- ajuda em RBAC, quotas, isolamento e organização.
Regra importante:
- o backend
service.namereferenciado pelo Ingress deve estar no mesmo namespace do Ingress.
Se omitir:
- Kubernetes usa o namespace atual do contexto;
- em produção isso pode causar Ingress no namespace errado.
Recomendação:
- sempre declarar
namespace.
metadata.labels
Labels são pares chave/valor usados para organização e filtros.
labels:
app: minha-aplicacao
ambiente: homologacao
componente: entrada-web
Uso:
- filtrar Ingresses com
kubectl; - organizar recursos;
- permitir automações;
- associar recursos ao mesmo sistema;
- ajudar ferramentas de observabilidade e GitOps.
Exemplo:
kubectl get ingress -l app=minha-aplicacao
Boas labels:
app: minha-aplicacao
ambiente: producao
componente: entrada-web
Evite usar label com dado sensível.
metadata.annotations
Annotations são metadados livres.
annotations:
descricao: "Ingress da aplicação"
Uso:
- documentação;
- configuração de ferramentas;
- configuração de controladores;
- integração com Ingress Controller.
Cuidado:
- muitas configurações avançadas de Ingress são específicas do controlador;
- uma annotation aceita por um controlador pode não funcionar em outro;
- consulte a documentação do Ingress Controller usado no cluster antes de adicionar annotations específicas.
Diferença entre labels e annotations:
| Campo | Uso |
|---|---|
labels |
seleção, filtro e organização |
annotations |
informação extra e configuração de ferramentas |
Campos de metadata normalmente gerenciados pelo Kubernetes
O kubectl explain mostra vários campos de metadata, mas muitos são preenchidos pelo próprio cluster.
Normalmente você não escreve manualmente:
creationTimestamp:
deletionTimestamp:
resourceVersion:
uid:
generation:
managedFields:
selfLink:
Eles servem para controle interno do Kubernetes.
spec
spec descreve o estado desejado do Ingress.
spec:
ingressClassName: nginx
rules:
- host: minha-aplicacao.exemplo.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: minha-aplicacao
port:
number: 80
Campos principais:
spec:
defaultBackend
ingressClassName
rules
tls
spec.ingressClassName
Define qual classe de Ingress deve processar este recurso.
ingressClassName: nginx
Uso:
- escolher o Ingress Controller;
- evitar ambiguidade quando há mais de um controlador;
- substituir o método antigo baseado em annotation.
Exemplos possíveis, dependendo do cluster:
ingressClassName: nginx
ingressClassName: traefik
ingressClassName: haproxy
Cuidado:
- o valor precisa corresponder a uma
IngressClassexistente no cluster; - o nome correto depende da instalação do Ingress Controller.
Verificar classes disponíveis:
kubectl get ingressclass
spec.rules
Lista regras de roteamento do Ingress.
rules:
- host: minha-aplicacao.exemplo.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: minha-aplicacao
port:
number: 80
Cada regra pode definir:
host;- regras HTTP;
- caminhos;
- backend de destino.
spec.rules[].host
Define o hostname atendido por aquela regra.
host: minha-aplicacao.exemplo.local
Uso:
- publicar aplicação por domínio;
- separar aplicações por hostname;
- permitir hospedagem virtual baseada em nome.
Exemplos:
host: portal.exemplo.local
host: api.exemplo.local
host: laboratorio.exemplo.local
Cuidado:
- o DNS precisa apontar o hostname para o endereço do Ingress Controller;
- o host deve ser compatível com o certificado TLS se HTTPS for usado.
spec.rules[].http
Define regras HTTP para o host.
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: minha-aplicacao
port:
number: 80
Uso:
- encaminhar caminhos HTTP para backends;
- permitir vários caminhos no mesmo host;
- publicar uma ou mais aplicações sob o mesmo domínio.
spec.rules[].http.paths
Lista caminhos HTTP.
paths:
- path: /
pathType: Prefix
backend:
service:
name: minha-aplicacao
port:
number: 80
Este campo é obrigatório dentro de http.
Um host pode ter vários caminhos.
Exemplo:
paths:
- path: /
pathType: Prefix
backend:
service:
name: frontend
port:
number: 80
- path: /api
pathType: Prefix
backend:
service:
name: backend
port:
number: 80
spec.rules[].http.paths[].path
Define o caminho HTTP.
path: /
Exemplos:
path: /
path: /api
path: /admin
path: /sistema
Uso:
/: raiz do site;/api: API;/admin: área administrativa;/sistema: aplicação em subcaminho.
Cuidado:
- aplicações em subcaminho podem precisar estar preparadas para rodar nesse path;
- rewrite de caminho costuma depender de recurso específico do Ingress Controller.
spec.rules[].http.paths[].pathType
Define como o campo path será interpretado.
pathType: Prefix
Este campo é obrigatório.
Valores aceitos:
pathType: Exact
pathType: Prefix
pathType: ImplementationSpecific
Exact
Casa o caminho exatamente.
path: /api
pathType: Exact
Exemplo:
/api casa
/api/ não casa da mesma forma
/api/v1 não casa
Use quando:
- o caminho precisa ser exatamente aquele;
- não quer pegar subcaminhos.
Prefix
Casa por prefixo de caminho.
path: /api
pathType: Prefix
Exemplo:
/api casa
/api/ casa
/api/v1 casa
/apix não deve ser tratado como mesmo segmento
Use quando:
- quer rotear uma árvore de caminhos;
- quer que
/api,/api/e/api/v1sigam para o mesmo backend.
É o tipo mais comum para aplicações web.
ImplementationSpecific
A interpretação depende do Ingress Controller.
pathType: ImplementationSpecific
Uso:
- compatibilidade com comportamento específico do controlador;
- cenários em que o controlador define sua própria regra.
Cuidado:
- pode mudar entre controladores;
- reduz portabilidade do manifesto;
- evite em tutorial básico ou ambiente padronizado, salvo necessidade real.
spec.rules[].http.paths[].backend
Define para onde o tráfego será enviado.
backend:
service:
name: minha-aplicacao
port:
number: 80
O backend pode apontar para:
service
resource
O uso mais comum é service.
backend.service.name
Nome do Service que receberá o tráfego.
name: minha-aplicacao
Regra importante:
- o Service precisa existir no mesmo namespace do Ingress;
- o Service precisa ter endpoints funcionais;
- o Service precisa expor a porta indicada.
Verificar Service:
kubectl get service minha-aplicacao -n meu-projeto
Verificar endpoints:
kubectl get endpoints minha-aplicacao -n meu-projeto
backend.service.port.number
Porta numérica do Service.
port:
number: 80
Uso:
- aponta para
spec.ports[].portdo Service; - não aponta diretamente para
targetPortdo container.
Exemplo:
# Service
ports:
- port: 80
targetPort: 8080
# Ingress
backend:
service:
name: minha-aplicacao
port:
number: 80
backend.service.port.name
Nome da porta do Service.
port:
name: http
Uso:
- quando o Service nomeia a porta;
- ajuda quando há múltiplas portas.
Exemplo:
# Service
ports:
- name: http
port: 80
targetPort: 8080
# Ingress
backend:
service:
name: minha-aplicacao
port:
name: http
backend.resource
Permite apontar o backend para outro recurso local tipado.
backend:
resource:
apiGroup: exemplo.io
kind: StorageBucket
name: arquivos
Campos:
| Campo | Função |
|---|---|
apiGroup |
grupo da API do recurso |
kind |
tipo do recurso |
name |
nome do recurso |
Uso:
- cenários específicos;
- integrações com controladores que suportam backend por recurso.
Cuidado:
- não é o caso mais comum;
- para aplicações web comuns, use
backend.service.
spec.defaultBackend
Define backend padrão para requisições que não casam com nenhuma regra.
defaultBackend:
service:
name: pagina-padrao
port:
number: 80
Uso:
- responder quando nenhum
hostoupathcasa; - criar página padrão;
- encaminhar tráfego não correspondido para um Service específico.
Cuidado:
- se omitido, o comportamento para requisições não correspondidas depende do Ingress Controller;
- o Service do defaultBackend precisa existir no mesmo namespace.
Exemplo completo:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: entrada-com-padrao
namespace: meu-projeto
spec:
ingressClassName: nginx
defaultBackend:
service:
name: pagina-padrao
port:
number: 80
spec.tls
Configura TLS/HTTPS para hosts do Ingress.
tls:
- hosts:
- minha-aplicacao.exemplo.local
secretName: minha-aplicacao-tls
Campos:
tls:
hosts
secretName
spec.tls[].hosts
Lista hostnames cobertos por aquela configuração TLS.
hosts:
- minha-aplicacao.exemplo.local
Uso:
- associar domínio ao certificado;
- indicar quais hosts devem usar o Secret TLS.
Cuidado:
- o certificado no Secret deve ser válido para os hosts listados;
- o host em
rules[].hostnormalmente deve estar presente emtls[].hosts.
spec.tls[].secretName
Nome do Secret com o certificado TLS.
secretName: minha-aplicacao-tls
O Secret deve estar no mesmo namespace do Ingress.
Formato comum do Secret TLS:
apiVersion: v1
kind: Secret
metadata:
name: minha-aplicacao-tls
namespace: meu-projeto
type: kubernetes.io/tls
data:
tls.crt: BASE64_DO_CERTIFICADO
tls.key: BASE64_DA_CHAVE
Cuidado:
- não coloque chave privada diretamente em texto puro no repositório;
- use ferramenta adequada para gerenciar Secrets;
- cert-manager ou outra automação pode criar esse Secret, se existir no cluster.
status
status mostra o estado atual observado pelo Kubernetes e pelo Ingress Controller.
Você normalmente não escreve status no YAML.
O Kubernetes e os controladores preenchem automaticamente.
No arquivo de referência aparecem campos como:
status:
loadBalancer
Use para diagnóstico:
kubectl get ingress minha-aplicacao -n meu-projeto
kubectl describe ingress minha-aplicacao -n meu-projeto
kubectl get ingress minha-aplicacao -n meu-projeto -o yaml
status.loadBalancer
Mostra o endereço de entrada atribuído pelo controlador, quando disponível.
loadBalancer:
ingress:
hostname
ip
ports
Uso:
- verificar IP;
- verificar hostname;
- diagnosticar publicação externa;
- confirmar se o Ingress Controller processou o recurso.
Exemplo de consulta:
kubectl get ingress minha-aplicacao -n meu-projeto
Manifesto mínimo funcional
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-exemplo
namespace: meu-projeto
spec:
ingressClassName: nginx
rules:
- host: nginx-exemplo.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-exemplo
port:
number: 80
Aplicar:
kubectl apply -f ingress.yml
Verificar:
kubectl get ingress -n meu-projeto
kubectl describe ingress nginx-exemplo -n meu-projeto
Manifesto recomendado para aplicação web simples
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-web
namespace: meu-projeto
labels:
app: app-web
spec:
ingressClassName: nginx
tls:
- hosts:
- app-web.exemplo.local
secretName: app-web-tls
rules:
- host: app-web.exemplo.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app-web
port:
number: 80
Este modelo é adequado para uma aplicação web/API que já tem um Service do tipo ClusterIP.
Manifesto com múltiplos caminhos
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-com-api
namespace: meu-projeto
spec:
ingressClassName: nginx
rules:
- host: sistema.exemplo.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: frontend
port:
number: 80
- path: /api
pathType: Prefix
backend:
service:
name: backend
port:
number: 80
Uso:
/encaminha para o frontend;/apiencaminha para o backend.
Cuidado:
- se a aplicação precisa remover ou reescrever o prefixo
/api, isso depende de recurso específico do Ingress Controller.
Manifesto com múltiplos hosts
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: multiplos-hosts
namespace: meu-projeto
spec:
ingressClassName: nginx
rules:
- host: app1.exemplo.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app1
port:
number: 80
- host: app2.exemplo.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app2
port:
number: 80
Uso:
- publicar aplicações diferentes por domínios diferentes;
- usar o mesmo Ingress Controller para múltiplas aplicações;
- organizar entrada web de um namespace.
Manifesto com defaultBackend
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: entrada-padrao
namespace: meu-projeto
spec:
ingressClassName: nginx
defaultBackend:
service:
name: pagina-padrao
port:
number: 80
Uso:
- responder quando nenhuma regra específica casa;
- criar página padrão para aquele Ingress;
- encaminhar tráfego não correspondido.
Comandos úteis
Aplicar
kubectl apply -f ingress.yml
Ver Ingresses
kubectl get ingress -n meu-projeto
Ver Ingress específico
kubectl get ingress minha-aplicacao -n meu-projeto
Ver detalhes
kubectl describe ingress minha-aplicacao -n meu-projeto
Ver YAML real aplicado
kubectl get ingress minha-aplicacao -n meu-projeto -o yaml
Ver IngressClasses disponíveis
kubectl get ingressclass
Ver Service usado pelo Ingress
kubectl get service minha-aplicacao -n meu-projeto
Ver endpoints do Service usado pelo Ingress
kubectl get endpoints minha-aplicacao -n meu-projeto
Testar DNS do host
dig +short minha-aplicacao.exemplo.local
Testar HTTP usando Host header
curl -v -H "Host: minha-aplicacao.exemplo.local" http://IP-DO-INGRESS/
Testar HTTPS ignorando validação temporariamente
curl -vk https://minha-aplicacao.exemplo.local/
Testar HTTPS com resolução manual
curl -vk --resolve minha-aplicacao.exemplo.local:443:IP-DO-INGRESS https://minha-aplicacao.exemplo.local/
Relação com outros manifestos
Um Ingress normalmente faz parte de um conjunto de manifestos.
Uso típico:
Namespace
├── ConfigMap
├── Secret
├── ServiceAccount
├── Deployment
├── Service
├── Ingress
├── NetworkPolicy
├── ResourceQuota
└── LimitRange
Ingress + Service
Ingress aponta para Service.
Service aponta para Pods.
Ingress + Deployment
Deployment cria Pods.
Service expõe os Pods.
Ingress publica o Service por domínio HTTP/HTTPS.
Ingress + Secret TLS
Secret guarda certificado e chave TLS.
Ingress referencia o Secret em spec.tls.secretName.
Ingress + IngressClass
IngressClass define qual controlador deve processar o Ingress.
Ingress referencia essa classe em spec.ingressClassName.
Ingress + NetworkPolicy
Ingress publica a aplicação.
NetworkPolicy controla o tráfego permitido entre componentes.
Erros comuns
Criar Ingress sem Ingress Controller
Sintoma:
- Ingress é criado;
- mas nada responde externamente;
ADDRESSpode ficar vazio;- regras não são aplicadas.
Causa:
Ingress resource sozinho não tem efeito sem Ingress Controller.
Verificar:
kubectl get pods -A | grep -i ingress
kubectl get ingressclass
ingressClassName errado
Sintoma:
- Ingress não é processado pelo controlador esperado;
ADDRESSfica vazio;- tráfego não chega.
Verificar classes disponíveis:
kubectl get ingressclass
Corrigir:
spec:
ingressClassName: nome-correto
Service inexistente
Errado:
backend:
service:
name: app-web
Mas o Service não existe.
Verificar:
kubectl get service app-web -n meu-projeto
Porta do backend errada
Errado:
backend:
service:
name: app-web
port:
number: 8080
Mas o Service expõe:
ports:
- port: 80
targetPort: 8080
Correto:
backend:
service:
name: app-web
port:
number: 80
O Ingress aponta para a porta do Service, não para a porta do container.
Service sem endpoints
Sintoma:
- Ingress existe;
- Service existe;
- mas aplicação não responde.
Verificar:
kubectl get endpoints app-web -n meu-projeto
Causa comum:
selector do Service não combina com labels dos Pods.
Host sem DNS apontando para o Ingress Controller
Sintoma:
- Ingress está correto;
- Service tem endpoints;
- mas domínio não resolve ou resolve para IP errado.
Verificar:
dig +short app-web.exemplo.local
kubectl get ingress app-web -n meu-projeto
TLS com Secret ausente ou errado
Sintoma:
- HTTPS falha;
- certificado não corresponde ao domínio;
- controlador mostra erro.
Verificar:
kubectl get secret app-web-tls -n meu-projeto
kubectl describe ingress app-web -n meu-projeto
O Secret TLS precisa estar no mesmo namespace do Ingress.
Usar path sem entender pathType
Errado usar ImplementationSpecific sem necessidade:
pathType: ImplementationSpecific
Prefira para caso comum:
pathType: Prefix
Use Exact quando o caminho precisa casar exatamente.
Esperar rewrite sem configurar controlador
O Ingress nativo define host, path e backend.
Reescrita de caminho, autenticação, CORS, headers e regras avançadas geralmente dependem do Ingress Controller e de sua documentação específica.
Checklist para uso em produção
Antes de aplicar um Ingress em ambiente compartilhado:
-
namespacedefinido; -
nameclaro; -
labelsclaras; -
ingressClassNamecorreto; - Ingress Controller instalado no cluster;
-
hostdefinido corretamente; - DNS aponta para o endereço do Ingress Controller;
-
pathcorreto; -
pathTypedefinido; - backend aponta para Service existente;
- backend aponta para a porta do Service, não para a porta direta do container;
- Service está no mesmo namespace do Ingress;
- Service tem endpoints;
- TLS configurado quando necessário;
- Secret TLS existe no mesmo namespace;
- certificado TLS cobre o hostname usado;
- annotations específicas conferidas na documentação do controlador;
- aplicação testada via HTTP/HTTPS;
- exposição externa revisada com cuidado;
- NetworkPolicy criada se houver necessidade de isolamento.
Resumo
Use Ingress para publicar aplicações HTTP/HTTPS no Kubernetes.
O Ingress controla:
- hostname;
- caminho HTTP;
- backend de destino;
- referência ao Service;
- TLS por Secret;
- backend padrão;
- classe de Ingress usada pelo controlador.
Para aplicação web comum, o conjunto mínimo geralmente é:
Namespace + Deployment + Service + Ingress
Para ambiente institucional compartilhado, o conjunto recomendado é:
Namespace + ResourceQuota + LimitRange + ServiceAccount + Role/RoleBinding
+ ConfigMap + Secret + Deployment + Service + Ingress + NetworkPolicy + PDB
Nenhum comentário para exibir
Nenhum comentário para exibir