Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Gerencie north-south traffic

Última atualização: Jun 27, 2026

Use gateways multicluster ALB para gerenciar o tráfego norte-sul em vários clusters ACK. Essa abordagem oferece redundância ativa entre zonas, balanceamento de carga e roteamento baseado em cabeçalhos, eliminando a necessidade de gerenciar controladores de Ingress separados para cada cluster.

Pré-requisitos

Antes de começar, verifique se você tem:

Como funciona

O tráfego flui da internet pela instância ALB até os pods nos clusters associados:

Internet → ALB instance → ACK One Fleet instance → Associated cluster 1 (pods)
                                                  → Associated cluster 2 (pods)

A instância Fleet atua como plano de controle. Um objeto AlbConfig na instância Fleet provisiona a instância ALB. As regras de Ingress na instância Fleet controlam como o ALB roteia o tráfego para os pods em todos os clusters associados.

Etapa 1: Crie um gateway multicluster ALB

Crie um objeto AlbConfig na instância Fleet para provisionar a instância ALB e registrar os clusters associados como destinos de tráfego.

  1. Obtenha os IDs de dois vSwitches da VPC onde a instância Fleet reside.

  2. Crie o arquivo gateway.yaml com o conteúdo a seguir. Substitua ${vsw-id1} e ${vsw-id2} pelos IDs dos vSwitches e substitua ${cluster1} e ${cluster2} pelos IDs dos clusters associados.

    Para cada cluster associado ( ${cluster1} e ${cluster2} ), configure as regras de entrada dos respectivos grupos de segurança para permitir tráfego de todos os endereços IP e portas no bloco CIDR do vSwitch.

    Parâmetro

    Obrigatório

    Descrição

    metadata.name

    Sim

    Nome do AlbConfig.

    metadata.annotations: alb.ingress.kubernetes.io/remote-clusters

    Sim

    Lista separada por vírgulas de IDs de cluster para adicionar ao gateway multicluster ALB. Cada ID de cluster já deve estar associado à instância Fleet.

    spec.config.name

    Não

    Nome da instância ALB.

    spec.config.addressType

    Não

    Tipo de rede da instância ALB. Internet (padrão): voltado para a internet pública, requer um Elastic IP Address (EIP), com cobrança de taxas de instância e largura de banda. Intranet: privado, acessível apenas dentro da VPC.

    spec.config.zoneMappings

    Sim

    IDs de vSwitch para a instância ALB. Os vSwitches devem estar em zonas compatíveis com o ALB e na mesma VPC dos clusters. Para alta disponibilidade, use vSwitches em pelo menos duas zonas, caso a região ofereça suporte. Para regiões e zonas compatíveis, consulte Regiões e zonas onde o ALB está disponível.

    spec.listeners

    Não

    Porta e protocolo do listener. O exemplo usa HTTP na porta 8001. Mantenha esta configuração — sem um listener, não é possível usar Ingresses ALB.

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: ackone-gateway-demo
      annotations:
        # Add associated clusters that are used to handle traffic to the ALB multi-cluster instance.
        alb.ingress.kubernetes.io/remote-clusters: ${cluster1},${cluster2}
    spec:
      config:
        name: one-alb-demo
        addressType: Internet
        addressAllocatedMode: Fixed
        zoneMappings:
        - vSwitchId: ${vsw-id1}
        - vSwitchId: ${vsw-id2}
      listeners:
      - port: 8001
        protocol: HTTP
    ---
    apiVersion: networking.k8s.io/v1
    kind: IngressClass
    metadata:
      name: alb
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: ackone-gateway-demo
  3. Aplique o manifesto para criar o gateway multicluster ALB e a IngressClass:

    kubectl apply -f gateway.yaml
  4. Após 1 a 3 minutos, verifique se o gateway foi criado:

    kubectl get albconfig ackone-gateway-demo

    Saída esperada:

    NAME                  ALBID      DNSNAME                                    PORT&PROTOCOL   CERTID   AGE
    ackone-gateway-demo   alb-xxxx   alb-xxxx.<regionid>.alb.aliyuncs.com                              4d9h
  5. Verifique se os clusters associados estão conectados ao gateway:

    kubectl get albconfig ackone-gateway-demo -ojsonpath='{.status.loadBalancer.subClusters}'

    A saída é uma lista de IDs de cluster.

Etapa 2: Roteamento de tráfego com Ingress

Crie um Ingress com ingressClassName: alb para usar o gateway multicluster ALB. Os Ingresses ALB suportam anotações comuns do Nginx Ingress e oferecem recursos aprimorados para instâncias ALB. Para obter a lista completa de anotações suportadas, consulte Configuração de Ingress ALB com anotações.

A tabela a seguir resume os quatro cenários de roteamento abordados nesta seção:

Cenário

Quando usar

Anotação principal

Balanceamento de carga padrão

Distribuir tráfego para todos os clusters por contagem de réplicas

Nenhuma necessária

Roteamento para cluster único

Enviar todo o tráfego para um único cluster (para isolamento ou testes)

alb.ingress.kubernetes.io/cluster-weight.{clusterID}: "100"

Roteamento baseado em cabeçalho

Roteamento de requisições com um cabeçalho específico para um cluster designado

alb.ingress.kubernetes.io/conditions.{service}

Roteamento baseado em peso

Dividir o tráfego entre clusters em porcentagens definidas

alb.ingress.kubernetes.io/cluster-weight.{clusterID} (múltiplas)

Exemplo 1: Balanceamento de carga padrão

Distribua o tráfego para todos os pods de backend nos clusters associados, ponderado pela contagem de réplicas. Nenhuma anotação de peso de cluster é necessária. Use este método quando desejar uma distribuição de carga simples e automática, sem personalizar pesos por cluster.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/listen-ports: |
     [{"HTTP": 8001}]
  name: alb-ingress
  namespace: demo
spec:
  ingressClassName: alb
  rules:
  - host: alb.ingress.alibaba.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: service1
            port:
              number: 80

Exemplo 2: Roteamento para cluster único

Roteie todo o tráfego para um cluster específico — por exemplo, para isolar um cluster durante um incidente ou direcionar tráfego canário para um único cluster. Defina o peso do cluster como "100". Se o cluster especificado não existir, o sistema o ignorará.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/listen-ports: |
     [{"HTTP": 8001}]
    alb.ingress.kubernetes.io/cluster-weight.c6XXXXXXXXXXXXXXXXXXXXXXXXX: "100"
  name: alb-ingress
  namespace: demo
spec:
  ingressClassName: alb
  rules:
  - host: alb.ingress.alibaba.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: service1
            port:
              number: 80

Exemplo 3: Roteamento baseado em cabeçalho

Encaminhe requisições com um valor de cabeçalho HTTP específico para um cluster designado — por exemplo, para enviar requisições com stage: gray para um cluster de lançamento gradual (gray-release). Use a anotação alb.ingress.kubernetes.io/conditions.{service} para definir a regra de correspondência de cabeçalho e alb.ingress.kubernetes.io/cluster-weight.{clusterID} para especificar o cluster de destino. Caso o cluster especificado não exista, o sistema o ignorará.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/listen-ports: |
     [{"HTTP": 8001}]
    alb.ingress.kubernetes.io/conditions.service1: |
     [{
       "type": "Header",
       "headerConfig": {
          "key":"stage",
           "values": [
              "gray"
           ]
       }
      }]
    alb.ingress.kubernetes.io/cluster-weight.c6XXXXXXXXXXXXXXXXXXXXXXXXX: "100"
  name: alb-ingress
  namespace: demo
spec:
  ingressClassName: alb
  rules:
  - host: alb.ingress.alibaba.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: service1
            port:
              number: 80

Exemplo 4: Roteamento baseado em peso

Divida o tráfego entre clusters em porcentagens definidas — por exemplo, para transferir gradualmente o tráfego de um cluster para outro durante uma migração. A soma de todos os pesos dos clusters deve ser igual a 100.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/listen-ports: |
     [{"HTTP": 8001}]
    alb.ingress.kubernetes.io/cluster-weight.c6XXXXXXXXXXXXXXXXXXXXXXXXX: "60"
    alb.ingress.kubernetes.io/cluster-weight.cdXXXXXXXXXXXXXXXXXXXXXXXXX: "40"
  name: alb-ingress
  namespace: demo
spec:
  ingressClassName: alb
  rules:
  - host: alb.ingress.alibaba.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: service1
            port:
              number: 80

Solução de problemas

Gateway não criado após 3 minutos

Inspecione o status do AlbConfig para obter detalhes sobre erros:

kubectl describe albconfig ackone-gateway-demo

Causas comuns:

  • Os vSwitches não estão em zonas compatíveis com o ALB. Verifique usando Regiões e zonas onde o ALB está disponível.

  • As regras de entrada do grupo de segurança dos clusters associados não permitem tráfego proveniente do bloco CIDR do vSwitch.

Clusters associados não aparecem em subClusters

Verifique se os IDs de cluster na anotação alb.ingress.kubernetes.io/remote-clusters correspondem aos IDs dos clusters associados à instância Fleet:

kubectl get albconfig ackone-gateway-demo -ojsonpath='{.status.loadBalancer.subClusters}'

Se a saída estiver vazia, confirme se os IDs de cluster no arquivo gateway.yaml estão corretos e se os clusters estão associados à instância Fleet.

Próximos passos