O componente cloud-controller-manager (CCM) cria e gerencia automaticamente um balanceador de carga para um Service do tipo LoadBalancer. O balanceador pode ser um Classic Load Balancer (CLB) ou um Network Load Balancer (NLB). Este tópico usa uma aplicação Nginx como exemplo para demonstrar como expor uma aplicação por meio de um Service que provisiona automaticamente um balanceador de carga.
Observações
O CCM configura um balanceador de carga apenas para Services do tipo
Type=LoadBalancer. O CCM não configura balanceadores de carga para outros tipos de Service.-
O CCM usa uma API declarativa e atualiza automaticamente a configuração do balanceador de carga com base na configuração do Service. Consequentemente, quaisquer modificações manuais no console do Server Load Balancer podem ser sobrescritas.
ImportanteNão modifique manualmente no console do Server Load Balancer a configuração de um balanceador de carga gerenciado pelo Kubernetes. Suas alterações podem ser sobrescritas e tornar o Service inacessível.
Não é possível alterar o balanceador de carga de um Service existente do tipo LoadBalancer. Para usar um balanceador diferente, crie um novo Service.
Se você alterar o tipo de um Service de Type=LoadBalancer para Type!=LoadBalancer, o CCM excluirá a configuração do balanceador de carga. Isso tornará o Service inacessível pelo balanceador.
Limites de cota
O CCM cria balanceadores de carga para Services do tipo
Type=LoadBalancer. Por padrão, o limite é de 60 instâncias. Se precisar de mais de 60 instâncias, acesse o console do Quota Center e envie uma solicitação.O CCM cria listeners com base nas portas definidas no Service. Por padrão, é possível adicionar até 50 listeners a uma instância de balanceador de carga. Para adicionar mais listeners, acesse o console do Quota Center e envie uma solicitação.
-
Para obter mais informações sobre os limites do balanceador de carga, consulte Limites.
Para consultar suas cotas de balanceador de carga, consulte Gerenciamento de cota de balanceador de carga.
Etapa 1: Implantar a aplicação de exemplo
Implante a aplicação pela linha de comando do kubectl.
-
Crie um arquivo chamado my-nginx.yaml com o seguinte conteúdo YAML para a aplicação de exemplo.
apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1 kind: Deployment metadata: name: my-nginx # The name of the sample application. labels: app: nginx spec: replicas: 3 # The number of replicas. selector: matchLabels: app: nginx # The value must match the selector of the Service that exposes this application. template: metadata: labels: app: nginx spec: containers: - name: nginx image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest # Replace this with the actual image address. The format is <image_name:tags>. ports: - containerPort: 80 # This port must be exposed in the Service. -
Implante a aplicação de exemplo my-nginx.
kubectl apply -f my-nginx.yaml -
Confirme se a aplicação de exemplo está no estado Normal.
kubectl get deployment my-nginxSaída de exemplo:
NAME READY UP-TO-DATE AVAILABLE AGE my-nginx 3/3 3 3 50s
Etapa 2: Expor a aplicação usando um serviço que cria automaticamente um balanceador de carga
Crie um Service do tipo LoadBalancer pelo console ou pelo kubectl para expor a aplicação.
Usar o console
Faça login no console do ACS. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster desejado. No painel de navegação à esquerda, escolha Network > Services.
Na página Services, clique em Create no canto superior esquerdo.
-
Na caixa de diálogo Create Service, defina os parâmetros do Service.
Parâmetro
Descrição
Exemplo
Name
Insira um nome para o Service.
my-nginx-svc
Service Type
Selecione um tipo de Service. A rede do Service oferece os seguintes modos para diferentes tipos de clientes e origens de acesso:
External Traffic Policy
A External Traffic Policy só pode ser definida quando o tipo de Service é SLB.
Local: roteia o tráfego apenas para os pods do nó atual.
Cluster: encaminha o tráfego para pods em outros nós do cluster.
Local
Backend
Selecione a aplicação de backend para associar ao Service. Se você não vincular um deployment, o sistema não criará objetos Endpoints. Para mais informações, consulte services-without-selectors.
Nome: app
Valor: nginx
Port Mapping
Adicione uma porta de serviço (corresponde ao campo
portno arquivo YAML do Service) e uma porta de contêiner (corresponde ao campotargetPortno arquivo YAML do Service). A porta do contêiner deve corresponder à porta exposta pelo pod de backend.80
Annotations
Adicione uma anotação ao Service para configurar os parâmetros do balanceador de carga. Para mais informações, consulte Configurar uma instância CLB usando anotações.
ImportanteNão reutilize a instância SLB do API Server do cluster. Caso contrário, o acesso ao cluster pode apresentar anomalias.
Neste exemplo, o método de faturamento do Service está definido como pagamento por largura de banda e o pico de largura de banda está configurado para 2 Mbit/s para controlar o tráfego. As anotações são as seguintes:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-charge-type:paybybandwidthservice.beta.kubernetes.io/alibaba-cloud-loadbalancer-bandwidth:2
Label
Adicione um rótulo para identificar o Service.
Nenhum
Usar kubectl
-
Crie um arquivo chamado my-nginx-svc.yaml com o seguinte conteúdo para o Service.
Certifique-se de que o valor do campo
selector(app: nginxneste exemplo) corresponda ao valor do campomatchLabelsno deployment da aplicação de backend. Isso associa o Service à aplicação de backend.apiVersion: v1 kind: Service metadata: labels: app: nginx name: my-nginx-svc namespace: default spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: nginx type: LoadBalancer -
-
Saída esperada:
kubectl get svc my-nginx-svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE my-nginx-svc LoadBalancer 172.21.5.82 39.106.XX.XX 80/TCP 5m -
Saída esperada:
curl <YOUR-External-IP> # Replace <YOUR-External-IP> with the external IP address obtained in the previous step.<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p>Thank you for using nginx.