Balanceo de cargas de red
En este tema, se muestra cómo configurar un balanceador de cargas L4 respaldado por un balanceador de cargas estándar de Azure a través de GKE en Azure.
Cuando se crea un Service de tipo LoadBalancer
, un controlador de
GKE en Azure configura un
balanceador de cargas de Azure.
Antes de comenzar
- Debes crear un clúster
y configurar
kubectl
para acceder al clúster.
Selecciona un balanceador de cargas público o privado
Los balanceadores de cargas de Service pueden ser públicos, con IP de frontend públicas, o internos, a los que solo se puede acceder a través de IP privadas.
De forma predeterminada, un Service nuevo es público. Para crear un balanceador
de cargas interno, establece la
anotación service.beta.kubernetes.io/azure-load-balancer-internal
en "true"
en tu manifiesto.
Elige una subred para balanceadores de cargas internos
Cuando se crea un balanceador de cargas interno, GKE en Azure debe elegir la subred en la que se colocará el balanceador de cargas. Esta subred predeterminada del balanceador de cargas de Service 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
- En caso contrario,
cluster.controlPlane.subnetId
Como alternativa, puedes especificar la subred que se usará para un balanceador de cargas determinado; para esto
agrega la anotación service.beta.kubernetes.io/azure-load-balancer-internal-subnet
al Service. El valor de esta anotación es el nombre de la subred.
Crea un LoadBalancer de ejemplo
Para crear un balanceador de cargas, debes crear una implementación y exponerla con un servicio.
Crea la implementación. Los contenedores de este objeto Deployment escuchan en el puerto 50001. Guarda el siguiente YAML en un archivo llamado
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 Deployment con
kubectl apply
:kubectl apply -f my-deployment-50001.yaml
Verifica que los tres Pods estén en ejecución:
kubectl get pods --selector=app=products
Crea un Service de tipo
LoadBalancer
para la implementación. Puedes crear un balanceador de cargas 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ública
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
Crea un LoadBalancer interno configurando la anotación
service.beta.kubernetes.io/azure-load-balancer-internal
como"true"
. En el siguiente YAML, se 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 Service con
kubectl apply
:kubectl apply -f my-lb-service.yaml
Visualiza la dirección de host del Service con
kubectl get service
.kubectl get service my-lb-service
El resultado incluirá una columna
EXTERNAL-IP
con una dirección del balanceador de cargas (público o privado según cómo se creó el balanceador de cargas).Si creaste un balanceador de cargas público, puedes conectarte a él con
curl
. Reemplaza external-ip por la dirección del resultado dekubectl get service
del paso anterior.curl http://external-ip:60000
El resultado se parece al siguiente:
Hello, world! Version: 2.0.0 Hostname: my-deployment-50001-84b6dc5555-zmk7q
Realice una limpieza
Para quitar Service y Deployment, usa kubectl delete
.
kubectl delete -f my-lb-service.yaml
kubectl delete -f my-deployment-50001.yaml