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
kubectl
para 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, debe definir 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 puede especificar la subred que se va a 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.yaml
Verifica que se estén ejecutando tres pods:
kubectl get pods --selector=app=products
Crea un servicio de tipo
LoadBalancer
para tu implementación. Puede crear un balanceador de carga estándar de Azure que sea público o interno. Elige una de las siguientes opciones.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: 50001
Interno
Para crear un balanceador de carga interno, debe definir la anotación
service.beta.kubernetes.io/azure-load-balancer-internal
en"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: 50001
Crea el servicio con
kubectl apply
:kubectl apply -f my-lb-service.yaml
Consulta la dirección del servicio con
kubectl get service
.kubectl get service my-lb-service
El resultado incluirá una columna
EXTERNAL-IP
con 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 service
del paso anterior.curl http://external-ip:60000
La salida es similar a la siguiente:
Hello, world! Version: 2.0.0 Hostname: my-deployment-50001-84b6dc5555-zmk7q
Eliminar los recursos utilizados
Para quitar el servicio y la implementación, usa kubectl delete
.
kubectl delete -f my-lb-service.yaml
kubectl delete -f my-deployment-50001.yaml