Migrando de Kubernetes Ingress para API de Gateway: um guia passo a passo

Em Kubernetes, uma das tarefas mais críticas é gerenciar como os serviços dentro do cluster são expostos ao mundo exterior. Por um longo tempo, a API de entrada tem sido a maneira padrão de lidar com o tráfego HTTP (s), atuando como o gateway que direciona solicitações de clientes externos para os serviços certos dentro do cluster. Embora a Ingress tenha atendido bem ao seu objetivo, ele vem com limitações – particularmente em torno da extensibilidade, consistência entre implementações e suporte para cenários avançados de gerenciamento de tráfego. Para abordar essas lacunas, o Kubernetes introduziu a API do Gateway, uma alternativa de próxima geração à entrada. Ao contrário da Ingress, que se concentra principalmente no roteamento simples, a API do Gateway fornece um modelo mais rico e orientado a função. Ele foi projetado para ser mais expressivo, flexível e neutro do fornecedor, facilitando a definição de comportamentos complexos de rede, mantendo uma experiência consistente do usuário em diferentes ambientes. Se a sua organização estiver dependendo da entrada e considerando uma migração para a API do Gateway, este guia o levará pelo processo. Vamos explorar por que a API do gateway vale a pena adotar, quais mudanças você precisa estar ciente e as etapas práticas para migrar de sua configuração de entrada existente para a API de gateway moderna em um cluster de Kubernetes em execução. As organizações devem estar preparadas para os seguintes desafios: o suporte ao controlador – nem todos os controladores de entrada têm compatibilidade completa da API. Isso pode limitar os recursos ou exigir a escolha de um novo controlador que suporta nativamente o gateway. Curva de Aprendizagem-O Gateway apresenta novos recursos (Gateways, Rotas, Policies) e um design baseado em função. As equipes precisam de tempo e treinamento para adaptar seus fluxos de trabalho. Lacunas de recursos-Enquanto a API do Gateway é mais expressiva, certos casos de uso avançado ainda podem depender de extensões específicas do fornecedor, reduzindo a portabilidade. Organização operacional – Durante a migração, pode ser necessário executar a entrada e o gateway em paralelo, o que aumenta a complexidade da configuração e o consumo de recursos. Melhores práticas para migrar para a API de gateway 🌟 Comece pequeno-comece com serviços não críticos para testar o fluxo de trabalho da migração. Isso permite que sua equipe construa confiança, refine processos e descubra desafios antes de mover aplicativos críticos da missão. Alavancar a separação de papéis-Um dos pontos fortes da API da Gateway é o seu design baseado em função. Definir claramente a propriedade: as equipes de infraestrutura podem gerenciar gateways, enquanto os desenvolvedores de aplicativos se concentram em rotas. Essa separação melhora a segurança, a escalabilidade e a eficiência da equipe. Adote práticas Gitops – Gateway da loja e configurações de rota em sistemas de controle de versão como o Git. Isso permite a colaboração, auditabilidade e reversão rápida se surgirem problemas durante a migração. Monitore e observe – use ferramentas de registro, rastreamento e monitoramento para validar o comportamento de roteamento, garantir o desempenho e detectar anomalias cedo. Mantenha -se atualizado – a API do Gateway continua evoluindo, com recursos como MTLs, roteamento de GRPC e divisão de tráfego sendo padronizados. Manter-se atualizado ajuda sua organização a aproveitar novos recursos à medida que se tornam estáveis. Estratégia de migração: passar da entrada para a API de gateway 🎯 Migrar da API de entrada para gateway requer planejamento, teste e adoção em fases. Abaixo estão as etapas recomendadas. Pesquisa e planejamento: verifique sua configuração atual: colete detalhes sobre objetos de entrada existentes, controladores, hosts, caminhos, configurações de TLS, anotações e serviços de back -end. KUBECTL Get Ingress -a -o Yaml> All -ingressos.yaml Selecione um controlador de gateway compatível: A API do Gateway é apenas uma especificação. você precisará de uma implementação. Examples include: NGINX ➡︎ NGINX Gateway Fabric Traefik ➡︎ Traefik Proxy with Gateway API HAProxy ➡︎ HAProxy kubernetes Ingress Controller with Gateway API Istio ➡︎ Istio Gateway API Map Ingress to Gateway API IngressClass ➡︎ GatewayClass Ingress ➡︎ Gateway + HTTPRoute Review RBAC changes, as Gateway API introduces more Controle de acesso granular. Prova de conceito de implantação Recursos da API do Gateway em um espaço para nome de não produção. Valide o roteamento, o TLS e a conectividade de serviço antes de lançar ainda mais. Execute os dois recursos em paralelo, mantenha a entrada para o tráfego de produção. Implante o gateway equivalente + recursos httproute em paralelo. Use domínios de estadiamento (por exemplo, myapp.example.com) para validar o comportamento. Migrar o TLS diferente da entrada (que geralmente usa anotações), a API de gateway trata o TLS como um cidadão de primeira classe. Crie segredos TLS e faça referência a eles nos ouvintes de gateway. Engressão de anotações específicas do fornecedor geralmente depende de anotações como nginx.ingress.kubernetes.io/rewrite-target. Na API do gateway, eles são substituídos por campos nativos: correspondência de cabeçalho ➡︎ Matches. DNS para apontar para o balanceador de carga de gateway. Monitore o tráfego usando logs e métricas. Role de volta para a entrada, se necessário (pois ele ainda é executado em paralelo). Ingressão de descomissionamento Remova objetos antigos de entrada. Desinstale o controlador de entrada. Retire os recursos da API do Gateway como a única fonte de verdade para a rede de serviços. Migrando um recurso de entrada de Kubernetes existente para a API Gateway API Pré -requisitos ⚙️ Um cluster Kubernetes em execução (1.24+) com implantação, serviços, pods em execução com recurso de entrada. Etapa 1: Instale os recursos da API do gateway # Instale os recursos da API do gateway kubectl kustomize “| Kubectl Aplicar -f – # Verifique a instalação kubectl Get CRD | Gateway Grep Digite Modo de tela cheia Fazinho de gateway MODO DE PETRATEMET APSPORT: # INSPRIÇO NGATING NGATING NGATEWAY FATEWAY FATEWAY FATEWAY MESTO AS ONETRAGEM API -CONTROLER DO GATA -NGATENG -NGATING PETURA DO GATA DE GATAGEM NGATERS -INSTRUÇO -NGATEM -NGATING PETAGEM FASTEWAY TATEWAY APIATIVE: Fabric with NGINX OSS using a Service type of NodePort kubectl apply -f # Verify the deployment kubectl get pods -n nginx-gateway Enter fullscreen mode Exit fullscreen mode Let’s configure specific ports for the gateway service: # View the nginx-gateway service kubectl get svc -n nginx-gateway nginx-gateway -o yaml # Update the service to expose specific nodePort Valores kubectl patch svc nginx -gateway -n nginx -gateway –type = “json” -p = ‘[
{“op”: “replace”, “path”: “/spec/ports/0/nodePort”, “value”: 30080},
{“op”: “replace”, “path”: “/spec/ports/1/nodePort”, “value”: 30081}
]’ # Verifique se o Serviço foi atualizado Kubectl Get SVC -n Nginx-Gateway Nginx-Gateway Digite Modo de tela cheia Modo de tela cheia Etapa 3: Criar recursos GatewayClass e Gateway Vamos criar os recursos GatewayClass e Gateway. Salve o seguinte YAML em um arquivo chamado Gateway-Resources.yaml: — APIVERSION: Gateway.networking.k8s.io/v1 tipo: gatewayclass metadados: name: nginx spec: controlnename: gateway.nginx.org/nginx-gateway-controlller —- apiversion: ngateway.ngateway.ninTway.netway.netway.netway.netway.netway.netway.Netway.Netway.Netway.Netway.Netway.Netway.Netway.Netway.Netway.Netway.Netway.Netway.Netway.Netway. name: nginx-gateway namespace: nginx-gateway spec: gatewayClassName: nginx # Use the gateway class that matches your controller listeners: – name: https port: 443 protocol: HTTPS hostname: myweb.k8s.local tls: mode: Terminate certificateRefs: – kind: Secret name: web-tls-secret namespace: web-app Permitido Routes: Namespaces: De: All-Nome: HTTP Porta: 80 Protocolo: HTTP HostName: myweb.k8s.local permitido Routes: namespaces: de: todos digitam o modo de tela completa Sair do modo de tela completa Nota: Aqui, no código acima, usamos “web-tls-secret”. Que já está sendo usado pelo recurso de entrada. # Aplique o YAML: KUBECTL APLICAR -F GATEWAY -RESOURCES. apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: web-route namespace: web-app spec: parentRefs: – name: nginx-gateway kind: Gateway namespace: nginx-gateway sectionName: http hostnames: – myweb.k8s.local rules: – matches: – path: type: PathPrefix value: / backendRefs: – Nome: Porta de serviço da web: 80 Digite o modo de saída de tela cheia de tela cheia Crie arquivo YAML para httproute para https com nome https.yaml. APIVERSION: Gateway.networking.k8s.io/v1 tipo: HTTPROUTE Metadados: Nome: Namespace da Web-Route-Https: Web-App Spec: ParentRefs:-Nome: Nginx-Gateway Tipo: Namespace de gateweb: nginx-gateway SectionName: HTTTS-HostNames-MyChEBB.WEBB.WEB. PathPrefix Valor: / backendRefs:-Nome: Porta de serviço da Web: 80 Digite o modo de tela cheia de tela FullScreen # Aplique o recurso Yaml: Kubectl Aplicar -f http.yaml kubectl Aplicar -f https.yaml # Verifique os recursos httproute kubectl Get HttProute -n Web -App -App Digite Modo de tela Full Modo de tela Full -Screen Etapa 5: verifique a gateway API API # Configuração O status HttProute Kubectl descreve o httproute web-route -n web-app # verifique se o httproute está adequadamente ligado ao gateway kubectl, obtenha httproute web-route -n web-app -o jsonpath = “{. Status.parents[0]. Condições[?(@.type==”Accepted”)].status} “Kubectl Obtenha httproute web-route-https -n web-app -o jsonpath =” {. status.parents[0]. Condições[?(@.type==”Accepted”)].status}” Enter fullscreen mode Exit fullscreen mode The output for the last command should be “True” if the HTTPRoute is properly accepted by the Gateway.Note: If you are facing error with the listener, make sure that secret was created in the same namespace as gateway, if not, create the below reference grant. cat < Enter fullscreen mode Exit fullscreen mode Step 6: Test the Gateway API Configuration Now, we are testing to Veja que o aplicativo é acessível através da nova API do gateway. Kubectl Delete Ingress-Opp Web-App Digite Modo de tela cheia Full O move mais perto de uma base mais confiável, flexível e moderna para seus aplicativos e as equipes que os constroem.

Fonte

Você pode ter perdido