Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ Cloud Container Engine/ Guia de usuário/ Rede/ Serviço/ LoadBalancer/ Configuração de rede de passagem para um Serviço de LoadBalancer
Atualizado em 2024-11-28 GMT+08:00

Configuração de rede de passagem para um Serviço de LoadBalancer

Cenários de aplicações

O kube-proxy, que é responsável pelo encaminhamento do tráfego intracluster, adiciona os endereços IP dos balanceadores de carga associados aos Serviços de LoadBalancer às regras de encaminhamento local dos nós por padrão. Quando um cliente de dentro de um cluster acessa o endereço IP de um balanceador de carga, o tráfego é encaminhado diretamente para o destino, em vez de ser encaminhado pelo balanceador de carga.

Se a afinidade em nível de nó estiver configurada para um Serviço (com externalTrafficPolicy definido como Local), o Serviço encaminhará o tráfego apenas para pods no nó que executa esses pods. Quando um nó ou pod acessa outro pod no mesmo cluster, se o nó em que o cliente é executado não tiver o pod de back-end correspondente, o acesso poderá falhar.

Solução

O CCE suporta redes de passagem. Você pode configurar a anotação kubernetes.io/elb.pass-through para o Serviço de LoadBalancer para que o balanceador de carga encaminhe o acesso intracluster para o endereço IP do balanceador de carga associado ao Serviço para pods de back-end.

Figura 1 Ilustração de rede de passagem
  • Clusters do CCE

    Quando um Serviço de LoadBalancer é acessado dentro do cluster, o acesso é encaminhado para os pods de back-end usando iptables/IPVS por padrão.

    Quando um Serviço de LoadBalancer (configurado com elb.pass-through) é acessado dentro do cluster, o acesso é encaminhado primeiro para o balanceador de carga, depois para os nós e, finalmente, para os pods de back-end usando iptables/IPVS.

  • Clusters do CCE Turbo

    Quando um cliente acessa um Serviço de LoadBalancer de dentro do cluster, a passagem é usada por padrão. Nesse caso, o cliente acessa diretamente o endereço IP da rede privada do balanceador de carga e, em seguida, acessa um contêiner por meio do balanceador de carga.

Restrições

  • Em um cluster padrão do CCE, depois que a rede de passagem é configurada para um balanceador de carga dedicado, o endereço IP privado do balanceador de carga não pode ser acessado do nó onde o pod de carga de trabalho reside ou de outros contêineres no mesmo nó da carga de trabalho.
  • A rede de passagem não é suportada para clusters de v1.15 ou anterior.
  • No modo de rede IPVS, as configurações de passagem dos Serviços conectados ao mesmo balanceador de carga devem ser as mesmas.
  • Se a afinidade de serviço em nível de nó (local) for usada, kubernetes.io/elb.pass-through será automaticamente definido como onlyLocal para ativar a passagem.

Procedimento

Esta seção descreve como criar um Deployment usando uma imagem do Nginx e criar um Serviço com a rede de passagem ativada.

  1. Use a ferramenta de linha de comando kubectl para se conectar ao cluster. Para obter detalhes, consulte Conexão a um cluster usando o kubectl.
  2. Use a imagem do Nginx para criar um Deployment.

    Crie um arquivo nginx-deployment.yaml. O conteúdo do arquivo é o seguinte:

    apiVersion: apps/v1     
    kind: Deployment         
    metadata:
      name: nginx            
    spec:
      replicas: 2                     
      selector:              
        matchLabels:
          app: nginx
      template:              
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - image: nginx:latest
            name: container-0
            resources:
              limits:
                cpu: 100m
                memory: 200Mi
              requests:
                cpu: 100m
                memory: 200Mi
          imagePullSecrets:
          - name: default-secret
    Execute o seguinte comando para implementar a carga de trabalho:
    kubectl create -f nginx-deployment.yaml

  3. Crie um Serviço de LoadBalancer e defina kubernetes.io/elb.pass-through como true. Para obter detalhes sobre como criar o Serviço de LoadBalancer, consulte LoadBalancer.

    O conteúdo do arquivo nginx-elb-svc.yaml é o seguinte. (Neste exemplo, um balanceador de carga compartilhado chamado james é criado automaticamente.)
    apiVersion: v1 
    kind: Service 
    metadata: 
      annotations:   
        kubernetes.io/elb.pass-through: "true"
        kubernetes.io/elb.class: union
        kubernetes.io/elb.autocreate: '{"type":"public","bandwidth_name":"cce-bandwidth","bandwidth_chargemode":"bandwidth","bandwidth_size":5,"bandwidth_sharetype":"PER","eip_type":"5_bgp","name":"james"}'
      labels: 
        app: nginx 
      name: nginx 
    spec: 
      externalTrafficPolicy: Local
      ports: 
      - name: service0 
        port: 80
        protocol: TCP 
        targetPort: 80
      selector: 
        app: nginx 
      type: LoadBalancer

  4. Execute o seguinte comando para criar o Serviço:

    kubectl create -f nginx-elb-svc.yaml

Verificação

  1. Faça logon no console do ELB e verifique o balanceador de carga (chamado james neste exemplo) associado ao Serviço.
  2. Clique no nome do balanceador de carga e clique na guia Monitoring.

    Há 0 conexões com o balanceador de carga.

  3. Faça logon em um contêiner de Nginx no cluster usando kubectl e acesse o endereço IP do balanceador de carga.

    1. Obtenha os contêineres de Nginx no cluster.
      kubectl get pod
      Informação semelhante à seguinte é exibida:
      NAME                     READY   STATUS    RESTARTS   AGE
      nginx-7c4c5cc6b5-vpncx   1/1     Running   0          9m47s
      nginx-7c4c5cc6b5-xj5wl   1/1     Running   0          9m47s
    2. Efetue logon em um contêiner do Nginx.
      kubectl exec -it nginx-7c4c5cc6b5-vpncx -- /bin/sh
    3. Acesse o endereço IP do balanceador de carga.
      curl **.**.**.**

  4. Aguarde um pouco e verifique os dados de monitoramento no console do ELB.

    Se uma nova conexão de acesso for exibida, o acesso será encaminhado pelo balanceador de carga conforme o esperado.