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/ Uso de anotações para configurar o balanceamento de carga
Atualizado em 2024-11-28 GMT+08:00

Uso de anotações para configurar o balanceamento de carga

Você pode adicionar anotações a um arquivo YAML para usar algumas funções avançadas do CCE. Esta seção descreve as anotações disponíveis quando um serviço LoadBalancer é criado.

Interligação com o ELB

Tabela 1 Anotações para interconexão com o ELB

Parâmetro

Tipo

Descrição

Versão do cluster suportada

kubernetes.io/elb.class

String

Selecione um tipo adequado de balanceador de carga.

O valor pode ser:

v1.9 ou mais recente

kubernetes.io/elb.id

String

Obrigatório quando um balanceador de carga existente deve ser associado.

ID de um balanceador de carga.

Como obter:

No console de gerenciamento, clique em Service List e escolha Networking > Elastic Load Balance. Clique no nome do balanceador de carga de destino. Na página de guia Summary, localize e copie o ID.

NOTA:

O sistema se conecta preferencialmente ao balanceador de carga com base no campo kubernetes.io/elb.id. Se este campo não for especificado, o campo spec.loadBalancerIP é usado (opcional e disponível apenas em 1.23 e versões anteriores).

Não use o campo spec.loadBalancerIP para se conectar ao balanceador de carga. Este campo será descartado pelo Kubernetes. Para obter detalhes, consulte Deprecação.

v1.9 ou mais recente

kubernetes.io/elb.autocreate

Tabela 9

Obrigatório quando os balanceadores de carga são criados automaticamente.

Exemplo:

  • Se um balanceador de carga de rede pública for criado automaticamente, defina esse parâmetro com o seguinte valor:

    {"type":"public","bandwidth_name":"cce-bandwidth-1551163379627","bandwidth_chargemode":"bandwidth","bandwidth_size":5,"bandwidth_sharetype":"PER","eip_type":"5_bgp","name":"james"}

  • Se um balanceador de carga de rede privada for criado automaticamente, defina esse parâmetro com o seguinte valor:

    {"type":"inner","name":"A-location-d-test"}

v1.9 ou mais recente

kubernetes.io/elb.enterpriseID

String

Opcional quando balanceadores de carga são criados automaticamente.

Clusters de v1.15 e versões posteriores suportam este campo. Nos clusters anteriores à v1.15, os balanceadores de carga são criados no projeto padrão por padrão.

Esse parâmetro indica o ID do projeto empresarial no qual o balanceador de carga do ELB será criado.

Se esse parâmetro não for especificado ou for definido como 0, os recursos serão vinculados ao projeto corporativo padrão.

Como obter:

Faça logon no console de gerenciamento e escolha Enterprise > Project Management na barra de menu superior. Na lista exibida, clique no nome do projeto empresarial de destino e copie o ID na página de detalhes do projeto empresarial.

v1.15 ou mais recente

kubernetes.io/elb.subnet-id

String

Opcional quando balanceadores de carga são criados automaticamente.

ID da sub-rede onde o cluster está localizado. O valor pode conter de 1 a 100 caracteres.

  • Obrigatório quando um cluster v1.11.7-r0 ou anterior deve ser criado automaticamente.
  • Opcional para clusters posteriores à v1.11.7-r0.

Obrigatório para versões anteriores à v1.11.7-r0

Descartado em versões posteriores à v1.11.7-r0

kubernetes.io/elb.lb-algorithm

String

Especifica o algoritmo de balanceamento de carga do grupo de servidores back-end. O valor padrão é ROUND_ROBIN.

Opções:

  • ROUND_ROBIN: algoritmo round robin ponderado
  • LEAST_CONNECTIONS: algoritmo de menor conexão ponderada
  • SOURCE_IP: algoritmo de hash do IP de origem
NOTA:

Se esse parâmetro for definido como SOURCE_IP, a configuração de peso (campo weight) dos servidores de back-end vinculados ao grupo de servidores de back-end será inválida e a sessão fixa não poderá ser ativada.

v1.9 ou mais recente

A seguir, mostra como usar as anotações anteriores:

  • Associar um balanceador de carga existente. Para mais detalhes, consulte Usar o kubectl para criar um Serviço (usando um balanceador de carga existente).
    apiVersion: v1 
    kind: Service 
    metadata: 
      name: nginx
      annotations:
        kubernetes.io/elb.id: <your_elb_id>                         # ELB ID. Replace it with the actual value.
        kubernetes.io/elb.class: performance                        # Load balancer type
        kubernetes.io/elb.lb-algorithm: ROUND_ROBIN                   # Load balancer algorithm
    spec:
      selector: 
         app: nginx
      ports: 
      - name: service0 
        port: 80
        protocol: TCP 
        targetPort: 80
      type: LoadBalancer
  • Criar automática de um balanceador de carga. Para mais detalhes, consulte Usar o kubectl para criar um Serviço (criação automática de um balanceador de carga).
    Balanceador de carga compartilhado:
    apiVersion: v1 
    kind: Service 
    metadata: 
      annotations:   
        kubernetes.io/elb.class: union
        kubernetes.io/elb.autocreate: '{
          "type": "public",
          "bandwidth_name": "cce-bandwidth-1551163379627",
          "bandwidth_chargemode": "bandwidth",
          "bandwidth_size": 5,
          "bandwidth_sharetype": "PER",
          "eip_type": "5_bgp"
        }'
        kubernetes.io/elb.enterpriseID: 0               # ID of the enterprise project to which the load balancer belongs
        kubernetes.io/elb.lb-algorithm: ROUND_ROBIN     # Load balancer algorithm
      labels: 
        app: nginx 
      name: nginx 
    spec: 
      ports: 
      - name: service0 
        port: 80
        protocol: TCP 
        targetPort: 80
      selector: 
        app: nginx 
      type: LoadBalancer
    Balanceador de carga dedicado:
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx
      labels:
        app: nginx
      namespace: default
      annotations:
        kubernetes.io/elb.class: performance
        kubernetes.io/elb.autocreate: '{
          "type": "public",
          "bandwidth_name": "cce-bandwidth-1626694478577",
          "bandwidth_chargemode": "bandwidth",
          "bandwidth_size": 5,
          "bandwidth_sharetype": "PER",
          "eip_type": "5_bgp",
          "available_zone": [
             ""
          ],
          "l4_flavor_name": "L4_flavor.elb.s1.small"
        }'
        kubernetes.io/elb.enterpriseID: 0               # ID of the enterprise project to which the load balancer belongs
        kubernetes.io/elb.lb-algorithm: ROUND_ROBIN     # Load balancer algorithm
    spec:
      selector:
        app: nginx
      ports:
      - name: cce-service-0
        targetPort: 80
        nodePort: 0
        port: 80
        protocol: TCP
      type: LoadBalancer

Sessão persistente

Tabela 2 Anotações para sessão persistente

Parâmetro

Tipo

Descrição

Versão do cluster suportada

kubernetes.io/elb.session-affinity-mode

String

A sessão persistente baseada em endereço IP de origem é suportada. Ou seja, as solicitações do mesmo endereço IP sejam encaminhadas para o mesmo servidor back-end.

  • Disabling sticky session: não configure este parâmetro.
  • Enabling sticky session: defina esse parâmetro como SOURCE_IP, indicando que a sessão adesiva é baseada no endereço IP de origem.
NOTA:

Quando kubernetes.io/elb.lb-algorithm é definido como SOURCE_IP (source IP hash), sessão persistente não pode ser ativada.

v1.9 ou mais recente

kubernetes.io/elb.session-affinity-option

Tabela 12

Tempo limite de sessão persistente expira.

v1.9 ou mais recente

A seguir, mostra como usar as anotações anteriores:
apiVersion: v1 
kind: Service 
metadata: 
  name: nginx
  annotations:
    kubernetes.io/elb.id: <your_elb_id>                         # ELB ID. Replace it with the actual value.
    kubernetes.io/elb.class: performance                   # Load balancer type
    kubernetes.io/elb.session-affinity-mode: SOURCE_IP          # The sticky session type is source IP address.
    kubernetes.io/elb.session-affinity-option: '{"persistence_timeout": "30"}'     # Stickiness duration (min)
spec:
  selector: 
     app: nginx
  ports: 
  - name: service0 
    port: 80
    protocol: TCP 
    targetPort: 80
  type: LoadBalancer

Verificação de integridade

Tabela 3 Anotações para a verificação de integridade

Parâmetro

Tipo

Descrição

Versão do cluster suportada

kubernetes.io/elb.health-check-flag

String

Se deve ativar a verificação de integridade do ELB.

  • Enabling health check: deixe este parâmetro em branco ou defina-o como on.
  • Disabling health check: defina este parâmetro como off.

Se esse parâmetro estiver ativado, o campo kubernetes.io/elb.health-check-option também deve ser especificado ao mesmo tempo.

v1.9 ou mais recente

kubernetes.io/elb.health-check-option

Tabela 10

Itens de configuração de verificação de integridade do ELB.

v1.9 ou mais recente

kubernetes.io/elb.health-check-options

Tabela 11

Item de configuração de verificação de integridade do ELB. Cada porta de serviço pode ser configurada separadamente e você pode configurar apenas algumas portas.

NOTA:

kubernetes.io/elb.health-check-option e kubernetes.io/elb.health-check-options não podem ser configurados ao mesmo tempo.

v1.19.16-r5 ou mais recente

v1.21.8-r0 ou mais recente

v1.23.6-r0 ou mais recente

v1.25.2-r0 ou mais recente

  • O seguinte mostra como usar kubernetes.io/elb.health-check-option:
    apiVersion: v1 
    kind: Service 
    metadata: 
      name: nginx
      annotations:
        kubernetes.io/elb.id: <your_elb_id>                         # ELB ID. Replace it with the actual value.
        kubernetes.io/elb.class: performance                   # Load balancer type
        kubernetes.io/elb.health-check-flag: 'on'                   # Enable the ELB health check function.
        kubernetes.io/elb.health-check-option: '{
          "protocol":"TCP",
          "delay":"5",
          "timeout":"10",
          "max_retries":"3"
        }'
    spec:
      selector: 
         app: nginx
      ports: 
      - name: service0 
        port: 80
        protocol: TCP 
        targetPort: 80
      type: LoadBalancer
  • Para obter detalhes sobre como usar kubernetes.io/elb.health-check-options, consulte Configuração da verificação de integridade para várias portas.

Protocolo HTTP

Tabela 4 Anotações para usar protocolos HTTP

Parâmetro

Tipo

Descrição

Versão do cluster suportada

kubernetes.io/elb.protocol-port

String

Porta de configuração de encaminhamento da Camada-7 usada pelo Serviço.

v1.19.16 ou mais recente

kubernetes.io/elb.cert-id

String

Certificado HTTP usado pelo Serviço para encaminhamento de Camada-7.

v1.19.16 ou mais recente

Para obter detalhes sobre os cenários de aplicação, consulte Serviço usando HTTP.

Ajuste dinâmico do peso do ECS de back-end

Tabela 5 Anotações para ajustar dinamicamente o peso do ECS de back-end

Parâmetro

Tipo

Descrição

Versão do cluster suportada

kubernetes.io/elb.adaptive-weight

String

Ajusta dinamicamente o peso do ECS de back-end do balanceador de carga com base em pods. As solicitações recebidas por cada pod são mais balanceadas.

  • true: ativado
  • false: desativado

Esse parâmetro se aplica somente a clusters de v1.21 ou posterior e é inválido na rede de passagem.

v1.21 ou mais recente

A seguir, mostra como usar as anotações anteriores:
apiVersion: v1 
kind: Service 
metadata: 
  name: nginx
  annotations:
    kubernetes.io/elb.id: <your_elb_id>                         # ELB ID. Replace it with the actual value.
    kubernetes.io/elb.class: performance                   # Load balancer type
    kubernetes.io/elb.adaptive-weight: 'true'                   # Enable dynamic adjustment of the weight of the backend ECS.
spec:
  selector: 
     app: nginx
  ports: 
  - name: service0 
    port: 80
    protocol: TCP 
    targetPort: 80
  type: LoadBalancer

Capacidade de passagem

Tabela 6 Anotações para capacidade de passagem

Parâmetro

Tipo

Descrição

Versão do cluster suportada

kubernetes.io/elb.pass-through

String

Se as solicitações de acesso de dentro do cluster para o Serviço passam pelo balanceador de carga do ELB.

v1.19 ou mais recente

Para obter detalhes sobre os cenários de aplicação, consulte Configuração de rede de passagem para um Serviço de LoadBalancer.

Lista branca

Tabela 7 Anotações para a lista de acesso do ELB

Parâmetro

Tipo

Descrição

Versão do cluster suportada

kubernetes.io/elb.acl-id

String

Esse parâmetro é obrigatório quando você define uma lista branca de endereços IP para um balanceador de carga. O valor desse parâmetro é o ID do grupo de endereços IP do balanceador de carga. Para obter detalhes, consulte Grupo de endereços IP.

Esse parâmetro tem efeito somente para balanceadores de carga dedicados e tem efeito somente quando um Serviço é criado ou uma nova porta de serviço (ouvinte) é especificada.

Como obter:

Faça logon no console. Na Service List, escolha Networking > Elastic Load Balance. No Console de rede, escolhaElastic Load Balance > IP Address Groups e copie o ID do grupo de endereços IP de destino.

v1.19.16

v1.21.4

kubernetes.io/elb.acl-status

String

Esse parâmetro é obrigatório quando você define uma lista branca de endereços IP para um balanceador de carga. O valor está on, indicando que o controle de acesso está ativado.

Esse parâmetro tem efeito somente para balanceadores de carga dedicados e tem efeito somente quando um Serviço é criado ou uma nova porta de serviço (ouvinte) é especificada.

v1.19.16

v1.21.4

kubernetes.io/elb.acl-type

String

Esse parâmetro é obrigatório quando você define uma lista branca de endereços IP para um balanceador de carga.

  • black: indica a lista negra. O grupo de endereços IP selecionado não pode acessar o endereço do ELB.
  • white: indica a lista branca. Somente o grupo de endereços IP selecionado pode acessar o endereço do ELB.

Esse parâmetro tem efeito somente para balanceadores de carga dedicados e tem efeito somente quando um Serviço é criado ou uma nova porta de serviço (ouvinte) é especificada.

v1.19.16

v1.21.4

A seguir, mostra como usar as anotações anteriores:
apiVersion: v1 
kind: Service 
metadata: 
  name: nginx
  annotations:
    kubernetes.io/elb.id: <your_elb_id>                    # ELB ID. Replace it with the actual value.
    kubernetes.io/elb.class: performance                   # Load balancer type
    kubernetes.io/elb.acl-id: <your_acl_id>               # ELB IP address group ID
    kubernetes.io/elb.acl-status: 'on'                    # Enable access control.
    kubernetes.io/elb.acl-type: 'white'                   # Whitelist control
spec:
  selector: 
     app: nginx
  ports: 
  - name: service0 
    port: 80
    protocol: TCP 
    targetPort: 80
  type: LoadBalancer

Rede host

Tabela 8 Anotações para rede host

Parâmetro

Tipo

Descrição

Versão do cluster suportada

kubernetes.io/hws-hostNetwork

String

Se o pod usar hostNetwork, o ELB encaminhará a solicitação para a rede host depois que essa anotação for usada.

Opções:

  • true: ativado
  • false (padrão): desativado

v1.9 ou mais recente

The following shows how to use the preceding annotations:
apiVersion: v1 
kind: Service 
metadata: 
  name: nginx
  annotations:
    kubernetes.io/elb.id: <your_elb_id>                         # ELB ID. Replace it with the actual value.
    kubernetes.io/elb.class: performance                   # Load balancer type
    kubernetes.io/hws-hostNetwork: 'true'                     # The load balancer forwards the request to the host network.
spec:
  selector: 
     app: nginx
  ports: 
  - name: service0 
    port: 80
    protocol: TCP 
    targetPort: 80
  type: LoadBalancer

Estrutura de dados

Tabela 9 Estrutura de dados de elb.autocreate

Parâmetro

Obrigatório

Tipo

Descrição

name

Não

String

Nome do balanceador de carga criado automaticamente.

O valor pode conter de 1 a 64 caracteres. Somente letras, dígitos, sublinhados (_), hifens (-) e pontos (.) são permitidos.

Padrão: cce-lb+service.UID

type

Não

String

Tipo de rede do balanceador de carga.

  • public: balanceador de carga de rede pública
  • inner: balanceador de carga de rede privada

Padrão: inner

bandwidth_name

Sim para balanceadores de carga de rede pública

String

Nome da largura de banda. O valor padrão é cce-bandwidth-******.

O valor pode conter de 1 a 64 caracteres. Somente letras, dígitos, sublinhados (_), hifens (-) e pontos (.) são permitidos.

bandwidth_chargemode

Não

String

Modo de cobrança de largura de banda.

  • bandwidth: cobrado pela largura de banda
  • traffic: cobrado pelo tráfego

Padrão: bandwidth

bandwidth_size

Sim para balanceadores de carga de rede pública

Integer

Tamanho da largura de banda. O valor padrão é de 1 a 2000 Mbit/s. Configure este parâmetro com base na faixa de largura de banda permitida em sua região.

O incremento mínimo para ajuste de largura de banda varia dependendo do intervalo de largura de banda.
  • O incremento mínimo é de 1 Mbit/s se a largura de banda permitida não exceder 300 Mbit/s.
  • O incremento mínimo é de 50 Mbit/s se a largura de banda permitida varia de 300 Mbit/s a 1000 Mbit/s.
  • O incremento mínimo é de 500 Mbit/s se a largura de banda permitida exceder 1000 Mbit/s.

bandwidth_sharetype

Sim para balanceadores de carga de rede pública

String

Modo de compartilhamento de largura de banda.

  • PER: largura de banda dedicada

eip_type

Sim para balanceadores de carga de rede pública

String

Tipo de EIP.

  • 5_telcom: China Telecom
  • 5_union: China Unicom
  • 5_bgp: BGP dinâmico
  • 5_sbgp: BGP estático

vip_subnet_cidr_id

Não

String

Sub-rede onde o balanceador de carga está localizado. Este campo é suportado por clusters de v1.21 ou posterior.

Se esse parâmetro não for especificado, o balanceador de carga do ELB e o cluster estarão na mesma sub-rede.

available_zone

Sim

Array of strings

AZ onde o balanceador de carga está localizado.

Você pode obter todas as AZs suportadas consultando a lista de AZ.

Esse parâmetro está disponível apenas para balanceadores de carga compartilhados.

l4_flavor_name

Sim

String

Nome do flavor do balanceador de carga da camada 4.

Você pode obter todos os tipos suportados consultando a lista de flavors.

Esse parâmetro está disponível apenas para balanceadores de carga compartilhados.

l7_flavor_name

Não

String

Nome do flavor do balanceador de carga da camada-7.

Você pode obter todos os tipos suportados consultando a lista de flavors.

Esse parâmetro está disponível apenas para balanceadores de carga compartilhados. O valor deste parâmetro deve ser o mesmo de l4_flavor_name, ou seja, ambos são especificações elásticas ou especificações fixas.

elb_virsubnet_ids

Não

Array of strings

Sub-rede onde o servidor back-end do balanceador de carga está localizado. Se esse parâmetro for deixado em branco, a sub-rede do cluster padrão será usada. Os balanceadores de carga ocupam um número diferente de endereços IP de sub-rede com base em suas especificações. Não use os blocos CIDR de sub-rede de outros recursos (como clusters e nós) como o bloco CIDR do balanceador de carga.

Esse parâmetro está disponível apenas para balanceadores de carga compartilhados.

Exemplo:

"elb_virsubnet_ids": [
   "14567f27-8ae4-42b8-ae47-9f847a4690dd"
 ]
Tabela 10 Estrutura de dados de elb.health-check-option

Parâmetro

Obrigatório

Tipo

Descrição

delay

Não

String

Tempo de espera inicial (em segundos) para iniciar a verificação de integridade.

Intervalo de valores: 1 a 50. Valor padrão: 5

timeout

Não

String

Tempo limite de verificação de integridade, em segundos.

Intervalo de valores: 1 a 50. Valor padrão: 10

max_retries

Não

String

Número máximo de tentativas de verificação de integridade.

Intervalo de valores: 1 a 10. Valor padrão: 3

protocol

Não

String

Protocolo de verificação de integridade.

Opções de valor: TCP ou HTTP

path

Não

String

URL de verificação de integridade. Este parâmetro precisa ser configurado quando o protocolo é HTTP.

Valor padrão: /

O valor pode conter de 1 a 10.000 caracteres.

Tabela 11 Descrição da estrutura de dados do campo elb.health-check-options

Parâmetro

Obrigatório

Tipo

Descrição

target_service_port

Sim

String

Porta para verificação de integridade especificada por spec.ports. O valor consiste no protocolo e no número da porta, por exemplo, TCP:80.

monitor_port

Não

String

Porta re-especificada para verificação de integridade. Se esse parâmetro não for especificado, a porta de serviço será usada por padrão.

NOTA:

Certifique-se de que a porta esteja no estado de escuta no nó onde o pod está localizado. Caso contrário, o resultado da verificação de integridade será afetado.

delay

Não

String

Tempo de espera inicial (em segundos) para iniciar a verificação de integridade.

Intervalo de valores: 1 a 50. Valor padrão: 5

timeout

Não

String

Tempo limite de verificação de integridade, em segundos.

Intervalo de valores: 1 a 50. Valor padrão: 10

max_retries

Não

String

Número máximo de tentativas de verificação de integridade.

Intervalo de valores: 1 a 10. Valor padrão: 3

protocol

Não

String

Protocolo de verificação de integridade.

Valor padrão: protocolo do Serviço associado

Opções de valor: TCP, UDP ou HTTP

path

Não

String

URL de verificação de saúde. Este parâmetro precisa ser configurado quando o protocolo é HTTP.

Valor padrão: /

O valor pode conter de 1 a 10.000 caracteres.

Tabela 12 Estrutura de dados de elb.session-affinity-option

Parâmetro

Obrigatório

Tipo

Descrição

persistence_timeout

Sim

String

Tempo limite de sessão persistente, em minutos. Esse parâmetro é válido somente quando elb.session-affinity-mode é definido como SOURCE_IP.

Intervalo de valores: 1 a 60. Valor padrão: 60