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.
Siga la introducción conceptual de esta característica, que proporciona una explicación de los objetos
ServiceExport
yMultiClusterService
a los que se hace referencia en este documento.Debe tener un recurso de flota con un clúster de concentrador y clústeres miembro. Si no tiene este recurso, siga Inicio rápido: Creación de un recurso de flota y unión a clústeres de miembros.
Los clústeres de AKS de destino en los que se implementan las cargas de trabajo deben estar presentes en la misma red virtual o en redes virtuales emparejadas.
- Estos clústeres de destino deben agregarse como clústeres miembro al recurso Fleet.
- Estos clústeres de destino deben usar redes de Azure CNI (interfaz de redde contenedor).
Debe obtener acceso a la API de Kubernetes del clúster de concentrador siguiendo los pasos descritos en Acceso a la API de Kubernetes del recurso de flota.
Establezca las siguientes variables de entorno y obtenga kubeconfigs para la flota y todos los clústeres miembro:
export GROUP=<resource-group> export FLEET=<fleet-name> export MEMBER_CLUSTER_1=aks-member-1 export MEMBER_CLUSTER_2=aks-member-2 az fleet get-credentials --resource-group ${GROUP} --name ${FLEET} --file fleet az aks get-credentials --resource-group ${GROUP} --name ${MEMBER_CLUSTER_1} --file aks-member-1 az aks get-credentials --resource-group ${GROUP} --name ${MEMBER_CLUSTER_2} --file aks-member-2
Use el entorno de Bash en Azure Cloud Shell. Para más información, consulte Inicio rápido para Bash en Azure Cloud Shell.
Si prefiere ejecutar comandos de referencia de la CLI localmente, instale la CLI de Azure. Si utiliza Windows o macOS, considere la posibilidad de ejecutar la CLI de Azure en un contenedor Docker. Para más información, vea Ejecución de la CLI de Azure en un contenedor de Docker.
Si usa una instalación local, inicie sesión en la CLI de Azure mediante el comando az login. Siga los pasos que se muestran en el terminal para completar el proceso de autenticación. Para ver otras opciones de inicio de sesión, consulte Inicio de sesión con la CLI de Azure.
En caso de que se le solicite, instale las extensiones de la CLI de Azure la primera vez que la use. Para más información sobre las extensiones, consulte Uso de extensiones con la CLI de Azure.
Ejecute az version para buscar cuál es la versión y las bibliotecas dependientes que están instaladas. Para realizar la actualización a la versión más reciente, ejecute az upgrade.
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.
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
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
Cree el
ClusterResourcePlacement
siguiente en un archivo denominadocrp-2.yaml
. Observe que estamos seleccionando clústeres en la regióneastus
:apiVersion: placement.kubernetes-fleet.io/v1beta1 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
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
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
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
estrue
) y no tiene ningún conflicto con otras exportaciones (IS-CONFLICT
esfalse
).Nota:
ServiceExport puede tardar un minuto o dos en propagarse.
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
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 sertrue
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.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
yaks-member-2
de la regióneastus
. Para comprobar las direcciones IP del pod, ejecute los siguientes comandos en los clústeres de la regióneastus
:KUBECONFIG=aks-member-1 kubectl get pods -n kuard-demo -o wide
KUBECONFIG=aks-member-2 kubectl get pods -n kuard-demo -o wide
Azure Kubernetes Service