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
- Sessão persistente
- Verificação de integridade
- Protocolo HTTP
- Ajuste dinâmico do peso do ECS de back-end
- Capacidade de passagem
- Lista branca
- Rede host
Interligaçã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 | Obrigatório quando os balanceadores de carga são criados automaticamente. Exemplo:
| 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 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:
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: LoadBalancerBalanceador 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
| 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.
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 | Tempo limite de sessão persistente expira. | v1.9 ou mais recente |
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
| 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.
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 | Itens de configuração de verificação de integridade do ELB. | v1.9 ou mais recente | |
| kubernetes.io/elb.health-check-options | 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
| 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
| 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.
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 |
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
| 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
| 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.
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 |
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
| 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:
| v1.9 ou mais recente |
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
| 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.
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.
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.
|
| bandwidth_sharetype | Sim para balanceadores de carga de rede pública | String | Modo de compartilhamento de largura de banda.
|
| eip_type | Sim para balanceadores de carga de rede pública | String | Tipo de EIP.
|
| 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" ] |
| 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. |
| 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. |
| 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 |