Equilibrio de carga de la red
Este tema le muestra cómo configurar un equilibrador de carga L4 respaldado por un equilibrador de carga estándar de Azure mediante GKE en Azure.
Cuando se crea un servicio de tipo LoadBalancer
, un controlador de GKE en Azure configura un Azure Load Balancer .
Antes de empezar
- Debe crear un clúster y configurar
kubectl
para acceder al clúster.
Seleccionar un balanceador de carga público o privado
Los balanceadores de carga de servicio pueden ser públicos (que tienen direcciones IP públicas de interfaz) o internos (solo se puede acceder a ellos a través de direcciones IP privadas).
De forma predeterminada, un nuevo servicio es público. Para crear un balanceador de carga interno, configure la anotación service.beta.kubernetes.io/azure-load-balancer-internal
como "true"
en su manifiesto.
Selección de subred para balanceadores de carga internos
Al crear un equilibrador de carga interno, GKE en Azure debe seleccionar la subred donde colocarlo. Esta subred predeterminada del equilibrador de carga del servicio 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
Como alternativa, puede especificar la subred que se usará para 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.
Creación de un LoadBalancer de ejemplo
Para crear un equilibrador de carga, cree una implementación y exponga esa implementación con un servicio.
Crea tu implementación. Los contenedores de esta implementación 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"
Cree la implementación con
kubectl apply
:kubectl apply -f my-deployment-50001.yaml
Verifique que se estén ejecutando tres Pods:
kubectl get pods --selector=app=products
Cree un servicio de tipo
LoadBalancer
para su implementación. Puede crear un Azure Standard Load Balancer público o interno. Elija una de las siguientes opciones.Copie uno de los siguientes manifiestos a 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, configure la anotación
service.beta.kubernetes.io/azure-load-balancer-internal
/azure-load-balancer-internal` como"true"
. El siguiente YAML incluye esta anotaciónyaml 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
Cree el servicio con
kubectl apply
:kubectl apply -f my-lb-service.yaml
Vea la dirección del servicio con
kubectl get service
.kubectl get service my-lb-service
La salida incluirá una columna
EXTERNAL-IP
con una dirección del balanceador de carga (pública o privada dependiendo de cómo se creó el balanceador de carga).Si ha creado un balanceador de carga público, puede conectarse a él con
curl
. Reemplace external-ip con la dirección del resultado dekubectl get service
del paso anterior.curl http://external-ip:60000
La salida se parece a la siguiente:
Hello, world! Version: 2.0.0 Hostname: my-deployment-50001-84b6dc5555-zmk7q
Limpiando
Para eliminar el servicio y la implementación, use kubectl delete
.
kubectl delete -f my-lb-service.yaml
kubectl delete -f my-deployment-50001.yaml