Instale controladores NGINX Ingress independentes via Helm além do controlador padrão de Add-ons para criar pontos de entrada de tráfego dedicados a diferentes serviços ou ambientes. Essa abordagem isola o tráfego com instâncias SLB distintas (voltadas para a Internet e internas) ou fornece configurações e versões específicas de controladores para determinadas aplicações, garantindo isolamento total de falhas e configurações em comparação ao uso de um único controlador compartilhado.
Os controladores instalados via Helm diferem do controlador padrão de Add-ons:
Recursos integrados: O controlador de Add-ons inclui funcionalidades adicionais, como canary release, logging and monitoring e cluster inspection.
Responsabilidade: Gerencie o ciclo de vida dos controladores instalados via Helm, incluindo atualizações, configuração e solução de problemas.
Como funciona
Cada controlador possui um nome IngressClass exclusivo. Defina o campo spec.ingressClassName em um Ingress para direcioná-lo a um controlador específico. Apenas o controlador correspondente aplica as regras, o que garante o isolamento do tráfego.
Exemplo: isolamento de tráfego voltado para a Internet e tráfego interno.
Pré-requisitos
O cluster deve executar a versão 1,22 ou posterior.
As versões de componentes para clusters na versão 1,20 ou anterior atingiram o fim da vida útil ([[Product Announcement] End of Maintenance for NGINX Ingress controller v1.2 and Earlier](t2767923.xdita#)). Se necessário, atualize manualmente um cluster ACK.
Implante um novo controlador de Ingress usando o Helm
Na página ACK Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
-
Clique em Deploy para instalar o ack-ingress-nginx-v1.
Configure os seguintes parâmetros principais:
Parâmetro
Descrição
Application name
O nome deve ser exclusivo dentro do cluster.
ImportanteEste nome serve como prefixo para o Service:
<Application Name>-ack-ingress-nginx-v1-controller(voltado para a Internet) ou<Application Name>-ack-ingress-nginx-v1-controller-internal(interno). A criação falhará se o nome total exceder 63 caracteres.Chart
Pesquise e selecione ack-ingress-nginx-v1.
O chart ack-ingress-nginx não recebe mais manutenção.
Chart Version
-
Para clusters versão 1.24 ou posterior: 4.0.22 ou superior.
-
Para clusters versão 1.22: versões de 4.0.16 (inclusivo) até 4.0.22 (exclusivo).
Parameters
Padrão: implanta como um Deployment com 2 réplicas, criando um Service LoadBalancer voltado para a Internet vinculado a uma instância CLB.
Ajuste os padrões em parâmetros do ack-ingress-nginx-v1.
Este exemplo implanta um controlador interno. Defina
controller.service.external.enabledcomofalseecontroller.service.internal.enabledcomotrue.ImportanteGaranta que controller.ingressClassResource.name e controller.ingressClassResource.controllerValue sejam exclusivos dentro do cluster.
Na página Helm, anote o Namespace (em Basic Information), bem como o nome da IngressClass e do Service (em Resource) para uso posterior.
-
Verifique o isolamento de tráfego
Este cenário utiliza controladores separados (voltados para a Internet e internos) para validar o isolamento:
-
Controlador padrão: implantado via Add-ons, vinculado a uma instância SLB voltada para a Internet.
Caso não esteja configurado, consulte Create and use an NGINX Ingress to expose a service .
Novo controlador: vinculado a uma instância SLB interna, acessível apenas dentro da VPC.
Implante uma aplicação de exemplo e crie uma regra de Ingress direcionada apenas ao novo controlador.
Etapa 1: Implante uma aplicação de teste
-
Crie um arquivo
nginx.yaml.Exemplo: Deployment e Service NGINX.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 1 selector: matchLabels: run: nginx template: metadata: labels: run: nginx spec: containers: - image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 imagePullPolicy: Always name: nginx ports: - containerPort: 80 protocol: TCP restartPolicy: Always --- apiVersion: v1 kind: Service metadata: name: nginx spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: run: nginx sessionAffinity: None type: NodePort -
Implante a aplicação de exemplo.
kubectl apply -f nginx.yaml
Etapa 2: Crie e vincule uma regra de Ingress
-
Crie um arquivo
ingress.yaml.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: nginx spec: # Change the value to the IngressClass name you configured earlier (controller.ingressClassResource.name). ingressClassName: "<YOUR_INGRESS_CLASS>" rules: # The following domain name is for testing purposes. Replace it with your actual domain name in a production environment. - host: foo.bar.com http: paths: - path: / backend: service: name: nginx port: number: 80 pathType: ImplementationSpecific -
Crie a regra de Ingress.
kubectl apply -f ingress.yaml
Etapa 3: Teste o acesso
-
Obtenha os endereços IP do SLB de cada controlador.
-
Endereço IP do SLB do controlador padrão voltado para a Internet:
PUBLIC_IP=$(kubectl get svc -n kube-system nginx-ingress-lb -o jsonpath='{.status.loadBalancer.ingress[0].ip}') echo "Public Ingress IP: $PUBLIC_IP" -
Endereço IP do SLB do novo controlador interno:
# Replace <YourNamespace> with the namespace of the new controller (for example, default). # Replace <YourChartName> with the application name (release name) of the new controller. INTERNAL_IP=$(kubectl get svc -n <YourNamespace> <YourChartName>-ack-ingress-nginx-v1-controller-internal -o jsonpath='{.status.loadBalancer.ingress[0].ip}') echo "Internal Ingress IP: $INTERNAL_IP"
-
-
Acesse a aplicação pelo controlador interno (espera-se sucesso).
Envie uma solicitação de um terminal dentro da VPC. Um código de status
200confirma que o controlador interno roteia o tráfego corretamente.# Replace with the actual internal IP address. curl -o /dev/null -s -w "%{http_code}\n" -H "Host: foo.bar.com" http://$INTERNAL_IP -
Tente acessar a aplicação pelo controlador voltado para a Internet (espera-se falha).
Envie uma solicitação
curl. Uma resposta404 Not Foundconfirma que o controlador externo ignorou a regra de Ingress, validando o isolamento de tráfego.# Replace with the actual Internet-facing IP address. curl -H "Host: foo.bar.com" http://$PUBLIC_IP
Implantação em produção
-
Planejamento de recursos: Configure estes parâmetros para garantir alta disponibilidade:
Múltiplas réplicas:
controller.replicaCountSolicitações e limites de recursos adequados:
controller.resources.requestsecontroller.resources.limitsAnti-afinidade de Pods: Adicione uma regra
podAntiAffinityemcontroller.affinitypara agendar Pods em nós diferentes.
Monitoramento: Defina
controller.metrics.enabled: trueecontroller.metrics.serviceMonitor.enabled: true. Integre com o Prometheus para monitorar métricas como latência de requisição, taxas de erro (4xx/5xx) e configure alert rules.-
Desempenho: Para cenários de baixa latência, utilize uma instância NLB na configuração do Service:
Service interno:
controller.service.internal.loadBalancerClass: "alibabacloud.com/nlb"Service voltado para a Internet:
controller.service.loadBalancerClass: "alibabacloud.com/nlb"
-
Manutenção de versão:
Aplique correções de segurança conforme as NGINX Ingress controller component release notes.
Para um isolamento mais robusto, restrinja o acesso ao backend por controlador usando uma Network Policy.
Apêndice: Parâmetros principais dos componentes
|
Parâmetro |
Descrição |
|
|
Repositório de imagens do controlador NGINX Ingress. |
|
|
Versão da imagem do controlador NGINX Ingress. |
|
|
Nome IngressClass exclusivo dentro do cluster. Não pode ser |
|
|
Valor de classe do controlador exclusivo. Não pode ser |
|
|
Número de réplicas de Pods do controlador. Defina como 2 ou mais para alta disponibilidade. |
|
|
Define se deve ser criado um Service LoadBalancer (voltado para a Internet ou interno) para expor o controlador. |
|
|
Se |
|
|
Se |
|
|
Modo de implantação do controlador de Ingress: |
|
|
Identificador de eleição de líder entre as réplicas do controlador. Apenas o Líder pode atualizar o status do recurso Ingress. Deve ser exclusivo ao implantar múltiplos controladores no mesmo namespace. |
|
|
Se |
|
|
Se Recomendado quando |
|
|
Tipo de SLB para Services voltados para a Internet. |
|
|
Tipo de SLB para Services internos. |