O NGINX Ingress Controller padrão não oferece suporte a roteamento de tráfego complexo, múltiplos protocolos da camada de aplicação (como Dubbo e QUIC) ou balanceamento de tráfego na Camada 7. O MSE Ingress é uma implementação de Ingress baseada nos gateways nativos da nuvem do Alibaba Cloud Microservices Engine (MSE). Ele mantém compatibilidade com NGINX Ingresses e anotações do NGINX Ingress, preenchendo essas lacunas com os seguintes recursos:
Suporte a protocolos: Gerencia Dubbo, QUIC e outros protocolos da camada de aplicação, além de HTTP/HTTPS.
Governança de tráfego: Oferece canary releases para várias versões de serviço e regras flexíveis de roteamento de tráfego.
Proteção de segurança: Inclui recursos de segurança integrados no nível do gateway.
Alta disponibilidade: Executa como um gateway totalmente gerenciado e com múltiplas réplicas.
Este tópico descreve como configurar um MSE Ingress para rotear tráfego externo para aplicações em um cluster Container Service for Kubernetes (ACK). Para obter mais informações sobre MSE Ingresses e seu funcionamento, consulte Gerenciamento de MSE Ingress.
Pré-requisitos
Antes de começar, verifique se:
O MSE está ativado. Acesse o console do MSE para ativar o MSE.
-
O componente MSE Ingress Controller está instalado no cluster ACK. Instale-o usando um dos métodos a seguir:
Durante a criação do cluster: selecione MSE Ingress para Ingress na etapa Component Configurations.
Para um cluster existente: instale o componente na página Add-ons. Para detalhes, consulte Instalar o componente MSE Ingress Controller na página Add-ons.
O cluster executa Kubernetes v1.16 ou posterior. Para informações sobre criação de cluster, consulte Criar um cluster gerenciado ACK ou Criar um cluster dedicado ACK (descontinuado). Para atualizar um cluster existente, consulte Atualizar a versão do Kubernetes de um cluster ACK.
As permissões foram concedidas ao componente MSE Ingress Controller. Para detalhes, consulte Conceder permissões ao MSE Ingress Controller.
Um cliente kubectl está conectado ao cluster ACK. Para detalhes, consulte Obter o arquivo kubeconfig de um cluster e usar kubectl para conectar-se ao cluster.
Etapa 1: Criar um gateway nativo da nuvem MSE
Um MseIngressConfig é um CustomResourceDefinition (CRD) fornecido pelo MSE Ingress Controller. Ele gerencia o ciclo de vida e as configurações globais de um gateway nativo da nuvem MSE.
Um MseIngressConfig mapeia para um único gateway nativo da nuvem. Se você precisar de vários gateways, crie múltiplos MseIngressConfigs. Excluir um MseIngressConfig também exclui o gateway nativo da nuvem mapeado, exceto no cenário de reutilização.
Execute o comando a seguir para criar um gateway chamado mse-ingress com três réplicas. Cada réplica usa 2 vCPUs e 4 GB de memória.
cat << EOF | kubectl apply -f -
apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
name: test
spec:
name: mse-ingress # Name of the cloud-native gateway
common:
instance:
spec: 2c4g # 2 vCPUs, 4 GB memory per replica (default: 4c8g)
replicas: 3 # Number of gateway replicas (default: 3)
EOF
Quando você omite configurações opcionais, o sistema aplica os padrões:
vSwitch: Seleciona automaticamente o vSwitch do nó Kubernetes agendado pelo MSE Ingress Controller. Apenas um vSwitch é configurado. Para ambientes de produção, configure manualmente dois vSwitches.
SLB: Cria automaticamente uma instância de Server Load Balancer (SLB) voltada para a Internet com especificações
slb.s2.small.Grupo de segurança: Cria automaticamente um grupo de segurança básico.
A tabela a seguir descreve os parâmetros em spec.
|
Parâmetro |
Obrigatório |
Padrão |
Descrição |
|
|
Não |
- |
O nome do gateway nativo da nuvem. |
|
|
Não |
|
As especificações por réplica. Por exemplo, |
|
|
Não |
3 |
O número de réplicas do gateway. |
Para a referência completa de parâmetros, consulte Configurar um MseIngressConfig.
Etapa 2: Criar um recurso IngressClass
Um recurso IngressClass declara qual controlador de Ingress gerencia um conjunto de recursos Ingress. Associe o IngressClass ao MseIngressConfig criado na Etapa 1 para que o gateway nativo da nuvem processe as regras de Ingress correspondentes.
Escolha um dos métodos a seguir com base no seu cenário.
Método 1: Usar um recurso Kubernetes IngressClass (recomendado)
Utilize este método para novos serviços que acessam o MSE Ingress. Execute um dos comandos a seguir com base na versão do Kubernetes do seu cluster.
Clusters executando versões do Kubernetes anteriores à v1.19
cat << EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1beta1
kind: IngressClass
metadata:
name: mse
spec:
controller: mse.alibabacloud.com/ingress
parameters:
apiGroup: mse.alibabacloud.com # API group of MseIngressConfig
kind: MseIngressConfig # Resource kind
name: test # Name of the MseIngressConfig from Step 1
EOF
Clusters executando Kubernetes v1.19 ou posterior
cat << EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: mse
spec:
controller: mse.alibabacloud.com/ingress
parameters:
apiGroup: mse.alibabacloud.com # API group of MseIngressConfig
kind: MseIngressConfig # Resource kind
name: test # Name of the MseIngressConfig from Step 1
EOF
Método 2: Usar recursos MseIngressConfig (para migração)
Adote este método ao migrar do NGINX Ingress para o MSE Ingress, ou em cenários onde não é possível criar recursos IngressClass. Durante a migração, tanto o NGINX Ingress quanto o MSE Ingress devem escutar o mesmo recurso IngressClass. Este método permite configurar o IngressClass diretamente dentro do MseIngressConfig, evitando conflitos de nomes de IngressClass.
Adicione o campo ingressClass ao MseIngressConfig criado na Etapa 1:
apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
name: test
spec:
name: mse-ingress
common:
instance:
spec: 2c4g
replicas: 3
ingress:
local:
ingressClass: mse # IngressClass name to listen on
A tabela a seguir descreve os valores de ingress.local.ingressClass.
|
Valor |
Comportamento |
|
Não configurado |
O gateway não escuta nenhum recurso Ingress. |
|
|
O gateway escuta recursos Ingress associados ao IngressClass chamado |
|
|
O gateway escuta todos os recursos Ingress. |
|
|
O gateway escuta recursos Ingress associados ao IngressClass chamado |
|
Outros valores |
O gateway escuta recursos Ingress associados ao IngressClass especificado. |
Se tanto um recurso Kubernetes IngressClass (Método 1) quanto este parâmetro estiverem configurados, o recurso Kubernetes IngressClass terá precedência.
Verificar o status do gateway
Execute o comando a seguir para verificar o status do MseIngressConfig:
kubectl get MseIngressConfig test
Saída esperada:
NAME STATUS AGE
test Listening 3m15s
O status Listening confirma que o gateway nativo da nuvem está em execução e monitorando recursos Ingress associados ao IngressClass mse.
As transições de status ocorrem na seguinte ordem:
|
Status |
Descrição |
|
Pending |
O gateway está sendo criado. Esse processo leva cerca de 3 minutos. |
|
Running |
O gateway foi criado e está em execução. |
|
Listening |
O gateway está em execução e escutando recursos Ingress no cluster. |
|
Failed |
O gateway é inválido. Execute |
Etapa 3: Roteamento de tráfego para uma aplicação
Implantar um serviço de backend de exemplo
Execute o comando a seguir para implantar o serviço go-httpbin:
cat << EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: go-httpbin
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: go-httpbin
template:
metadata:
labels:
app: go-httpbin
version: v1
spec:
containers:
- image: specialyang/go-httpbin:v3
args:
- "--port=8090" # Application listens on port 8090
- "--version=v1" # Reports version v1
imagePullPolicy: Always
name: go-httpbin
ports:
- containerPort: 8090
---
apiVersion: v1
kind: Service
metadata:
name: go-httpbin
namespace: default
spec:
ports:
- port: 80 # Service port exposed to Ingress
targetPort: 8090 # Forwards to container port 8090
protocol: TCP
selector:
app: go-httpbin
EOF
Criar um recurso Ingress
Execute um dos comandos a seguir para criar um recurso Ingress. O Ingress roteia solicitações para example.com/version para o serviço go-httpbin.
Clusters executando versões do Kubernetes anteriores à v1.19
cat << EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress
namespace: default
spec:
ingressClassName: mse # Associates with the MSE IngressClass
rules:
- host: example.com
http:
paths:
- path: /version
backend:
serviceName: go-httpbin
servicePort: 80
EOF
Clusters executando Kubernetes v1.19 ou posterior
cat << EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress
namespace: default
spec:
ingressClassName: mse # Associates with the MSE IngressClass
rules:
- host: example.com
http:
paths:
- backend:
service:
name: go-httpbin
port:
number: 80
path: /version
pathType: Prefix
EOF
Verificar o resultado
-
Obtenha o endereço atribuído ao Ingress. Saída esperada:
kubectl get ingress ingressNAME CLASS HOSTS ADDRESS PORTS AGE ingress mse example.com 114.55.XX.XX 80 12m -
Envie uma solicitação de teste usando o endereço do Ingress. Saída esperada: A resposta
version:v1confirma que o tráfego foi roteado através do MSE Ingress para o serviço de backendgo-httpbin.curl -H "host: example.com" <ADDRESS>/versionversion:v1
Se o campo ADDRESS estiver vazio, o gateway nativo da nuvem ainda pode estar provisionando. Aguarde alguns minutos e execute kubectl get ingress ingress novamente. Se o problema persistir, verifique o status do MseIngressConfig com kubectl describe MseIngressConfig test.
Limpar recursos
Para remover os recursos de exemplo criados neste tutorial, execute os seguintes comandos:
kubectl delete ingress ingress
kubectl delete service go-httpbin
kubectl delete deployment go-httpbin
Excluir o MseIngressConfig também exclui o gateway nativo da nuvem MSE associado. Exclua-o apenas se não precisar mais do gateway:
kubectl delete MseIngressConfig test
Próximos passos
Configurar um MseIngressConfig -- Personalize vSwitches, instâncias SLB e grupos de segurança para seu gateway.
Gerenciamento de MSE Ingress -- Conheça recursos avançados de governança de tráfego, incluindo canary releases e divisão de tráfego.
Conceder permissões ao MSE Ingress Controller -- Configure controle de acesso refinado para o MSE Ingress Controller.