Compartir a través de


Configuración del equilibrio de carga de capa 4 de varios clústeres en clústeres miembros de Azure Kubernetes Fleet Manager (versión preliminar)

En el caso de las aplicaciones implementadas en varios clústeres, los administradores suelen querer enrutar el tráfico entrante a ellos a través de clústeres.

Puede seguir este documento para configurar el equilibrio de carga de nivel 4 para estas aplicaciones de varios clústeres.

Importante

Las características en vista previa de Azure Kubernetes Fleet Manager están disponibles en autoservicio y de manera opcional. Las versiones preliminares se proporcionan "tal cual" y "como están disponibles", y están excluidas de los Acuerdos de nivel de servicio y la garantía limitada. Las versiones preliminares de Azure Kubernetes Fleet Manager reciben cobertura parcial del soporte al cliente en la medida de lo posible. Por lo tanto, estas características no están diseñadas para su uso en producción.

Requisitos previos

Si no tiene una suscripción a Azure, cree una cuenta gratuita de Azure antes de empezar.

Implementación de una carga de trabajo en clústeres de miembros del recurso de flota

Nota:

  • Los pasos de esta guía paso a paso hacen referencia solo a una aplicación de ejemplo con fines de demostración. Puede sustituir esta carga de trabajo por cualquiera de sus propios objetos de implementación y servicio existentes.

  • En estos pasos se implementa la carga de trabajo de ejemplo desde el clúster Fleet en clústeres miembro mediante la propagación de la configuración de Kubernetes. Como alternativa, puede optar por implementar estas configuraciones de Kubernetes en cada clúster miembro por separado, de una en una.

  1. Cree un espacio de nombres en el clúster de flota:

    KUBECONFIG=fleet kubectl create namespace kuard-demo
    

    La salida es similar a la del siguiente ejemplo:

    namespace/kuard-demo created
    
  2. Aplique los objetos Deployment, Service, ServiceExport:

    KUBECONFIG=fleet kubectl apply -f https://raw.githubusercontent.com/Azure/AKS/master/examples/fleet/kuard/kuard-export-service.yaml
    

    La especificación ServiceExport del archivo anterior permite exportar un servicio de clústeres miembros al recurso Fleet. Una vez exportado correctamente, el servicio y todos sus puntos de conexión se sincronizarán con el clúster de flota y, a continuación, se pueden usar para configurar el equilibrio de carga de varios clústeres en estos puntos de conexión. El resultado es similar al ejemplo siguiente:

    deployment.apps/kuard created
    service/kuard created
    serviceexport.networking.fleet.azure.com/kuard created
    
  3. Cree el ClusterResourcePlacement siguiente en un archivo denominado crp-2.yaml. Observe que estamos seleccionando clústeres en la región eastus:

    apiVersion: placement.kubernetes-fleet.io/v1
    kind: ClusterResourcePlacement
    metadata:
      name: kuard-demo
    spec:
      resourceSelectors:
        - group: ""
          version: v1
          kind: Namespace
          name: kuard-demo
      policy:
        affinity:
          clusterAffinity:
            requiredDuringSchedulingIgnoredDuringExecution:
              clusterSelectorTerms:
                - labelSelector:
                    matchLabels:
                      fleet.azure.com/location: eastus
    
  4. Aplique el objeto ClusterResourcePlacement:

    KUBECONFIG=fleet kubectl apply -f crp-2.yaml
    

    Si funciona correctamente, el resultado será similar al siguiente ejemplo:

    clusterresourceplacement.placement.kubernetes-fleet.io/kuard-demo created
    
  5. Compruebe el estado de ClusterResourcePlacement:

    KUBECONFIG=fleet kubectl get clusterresourceplacements
    

    Si funciona correctamente, el resultado será similar al siguiente ejemplo:

    NAME            GEN   SCHEDULED   SCHEDULEDGEN   APPLIED   APPLIEDGEN   AGE
    kuard-demo      1     True        1              True      1            20s
    

Creación de MultiClusterService para equilibrar la carga entre los puntos de conexión de servicio en varios clústeres miembro

  1. Compruebe los clústeres miembro de la región eastus para ver si el servicio se exporta correctamente:

    KUBECONFIG=aks-member-1 kubectl get serviceexport kuard --namespace kuard-demo
    

    La salida es similar a la del siguiente ejemplo:

    NAME    IS-VALID   IS-CONFLICTED   AGE
    kuard   True       False           25s
    
    KUBECONFIG=aks-member-2 kubectl get serviceexport kuard --namespace kuard-demo
    

    La salida es similar a la del siguiente ejemplo:

    NAME    IS-VALID   IS-CONFLICTED   AGE
    kuard   True       False           55s
    

    Debería ver que el servicio es válido para la exportación (el campo IS-VALID es true) y no tiene ningún conflicto con otras exportaciones (IS-CONFLICT es false).

    Nota:

    ServiceExport puede tardar un minuto o dos en propagarse.

  2. Cree MultiClusterService en un miembro para equilibrar la carga entre los puntos de conexión de servicio de estos clústeres:

    KUBECONFIG=aks-member-1 kubectl apply -f https://raw.githubusercontent.com/Azure/AKS/master/examples/fleet/kuard/kuard-mcs.yaml
    

    Nota:

    Para exponer el servicio a través de la dirección IP interna en lugar de la pública, agregue la anotación a MultiClusterService:

    apiVersion: networking.fleet.azure.com/v1alpha1
    kind: MultiClusterService
    metadata:
      name: kuard
      namespace: kuard-demo
      annotations:
         service.beta.kubernetes.io/azure-load-balancer-internal: "true"
      ...
    

    La salida es similar a la del siguiente ejemplo:

    multiclusterservice.networking.fleet.azure.com/kuard created
    
  3. Compruebe que MultiClusterService sea válido ejecutando el siguiente comando:

    KUBECONFIG=aks-member-1 kubectl get multiclusterservice kuard --namespace kuard-demo
    

    La salida debería tener un aspecto similar al ejemplo siguiente:

    NAME    SERVICE-IMPORT   EXTERNAL-IP     IS-VALID   AGE
    kuard   kuard            <a.b.c.d>       True       40s
    

    El campo IS-VALID debe ser true en la salida. Consulte la dirección IP del equilibrador de carga externo (EXTERNAL-IP) en la salida. Puede tardar un tiempo antes de que la importación se procese por completo y la dirección IP esté disponible.

  4. Ejecute el siguiente comando varias veces con la dirección IP externa anterior:

    curl <a.b.c.d>:8080 | grep addrs 
    

    Observe que las direcciones IP de los pods que atienden la solicitud cambian y que estos pods proceden de los clústeres miembro aks-member-1 y aks-member-2 de la región eastus. Para comprobar las direcciones IP del pod, ejecute los siguientes comandos en los clústeres de la región eastus:

    KUBECONFIG=aks-member-1 kubectl get pods -n kuard-demo -o wide
    
    KUBECONFIG=aks-member-2 kubectl get pods -n kuard-demo -o wide