Balanceo de carga de red
En este tema se explica cómo configurar un balanceador de carga de nivel 4 respaldado por un balanceador de carga estándar de Azure mediante GKE en Azure .
Cuando creas un servicio de tipo LoadBalancer, un controlador de GKE en Azure configura un balanceador de carga de Azure.
Antes de empezar
- Debes crear un clúster
y configurar
kubectlpara acceder a él.
Seleccionar un balanceador de carga público o privado
Los balanceadores de carga de servicio pueden ser públicos (con IPs de frontend públicas) o internos (solo se puede acceder a ellos a través de IPs privadas).
De forma predeterminada, un servicio nuevo es público. Para crear un balanceador de carga interno, defina la anotación service.beta.kubernetes.io/azure-load-balancer-internal
en "true" en su manifiesto.
Elegir una subred para los balanceadores de carga internos
Al crear un balanceador de carga interno, GKE en Azure debe elegir la subred en la que se colocará el balanceador de carga. Esta subred del balanceador de carga de servicio predeterminado se elige a partir de los parámetros de creación del clúster de la siguiente manera:
- Si se especifica y no está vacío,
cluster.networking.serviceLoadBalancerSubnetId - De lo contrario,
cluster.controlPlane.subnetId
También puedes especificar la subred que quieres usar en un balanceador de carga determinado añadiendo la anotación service.beta.kubernetes.io/azure-load-balancer-internal-subnet
al servicio. El valor de esta anotación es el nombre de la subred.
Crear un LoadBalancer de ejemplo
Para crear un balanceador de carga, crea un despliegue y expónlo con un servicio.
Crea tu implementación. Los contenedores de esta implementación escuchan en el puerto 50001. Guarda el siguiente archivo YAML con el nombre
my-deployment-50001.yaml:apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment-50001 spec: selector: matchLabels: app: products department: sales replicas: 3 template: metadata: labels: app: products department: sales spec: containers: - name: hello image: "gcr.io/google-samples/hello-app:2.0" env: - name: "PORT" value: "50001"Crea el despliegue con
kubectl apply:kubectl apply -f my-deployment-50001.yamlVerifica que se estén ejecutando tres pods:
kubectl get pods --selector=app=productsCrea un servicio de tipo
LoadBalancerpara tu implementación. Puede crear un balanceador de carga estándar de Azure que sea público o interno. Elige una de las opciones siguientes.Copia uno de los siguientes manifiestos en un archivo llamado
my-lb-service.yaml.Público
apiVersion: v1 kind: Service metadata: name: my-lb-service spec: type: LoadBalancer selector: app: products department: sales ports: - protocol: TCP port: 60000 targetPort: 50001Interno
Para crear un balanceador de carga interno, debe definir la anotación
service.beta.kubernetes.io/azure-load-balancer-internalen"true". El siguiente archivo YAML incluye esta anotación.yaml apiVersion: v1 kind: Service metadata: name: my-lb-service annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" spec: type: LoadBalancer selector: app: products department: sales ports: - protocol: TCP port: 60000 targetPort: 50001Crea el servicio con
kubectl apply:kubectl apply -f my-lb-service.yamlConsulta la dirección del servicio con
kubectl get service.kubectl get service my-lb-serviceEl resultado incluirá una columna
EXTERNAL-IPcon la dirección del balanceador de carga (pública o privada, según cómo se haya creado).Si has creado un balanceador de carga público, puedes conectarte a él con
curl. Sustituye external-ip por la dirección del resultado dekubectl get servicedel paso anterior.curl http://external-ip:60000La salida es similar a la siguiente:
Hello, world! Version: 2.0.0 Hostname: my-deployment-50001-84b6dc5555-zmk7q
Eliminar los recursos utilizados
Para eliminar el servicio y la implementación, usa kubectl delete.
kubectl delete -f my-lb-service.yaml
kubectl delete -f my-deployment-50001.yaml