Exposer une passerelle d'entrée à l'aide d'un équilibreur de charge externe
Présentation
Cloud Service Mesh vous permet de déployer et de gérer des passerelles d'entrée dans votre maillage de services. Vous pouvez configurer davantage l'équilibrage de charge pour votre cluster avec Cloud Service Mesh en utilisant des équilibreurs de charge externes (équilibreurs de charge physiques ou logiciels en dehors du cluster) pour envoyer du trafic vers la passerelle d'entrée.
Cette page explique comment configurer un équilibreur de charge externe avec Cloud Service Mesh. Vous pouvez également configurer l'entrée avec plusieurs configurations de backend.
Avant de commencer
Pour suivre la procédure décrite dans ce document, vous avez besoin des ressources suivantes :
Un cluster Kubernetes sur lequel Cloud Service Mesh est installé.
Un équilibreur de charge externe pouvant accéder aux nœuds sur lesquels votre cluster s'exécute. Vous configurez cet équilibreur de charge externe pour qu'il gère la passerelle d'entrée de votre cluster à l'aide de son adresse IP externe.
Configurer votre environnement
Exécutez les commandes suivantes à partir d'un poste de travail pouvant accéder au cluster que vous souhaitez utiliser. Assurez-vous que l'outil kubectl est configuré pour utiliser le contexte spécifique au cluster.
Définissez les variables d'environnement.
export ASM_INGRESSGATEWAY_NAMESPACE=asm-ingressgateway export ASM_INGRESSGATEWAY_DEPLOYMENT_NAME=asm-ingressgateway export ASM_INGRESSGATEWAY_SERVICE_NAME=asm-ingressgateway export ASM_INGRESSGATEWAY_NODE_LABEL=asm-ingressgatewayDéfinissez le champ
IP addressde l'équilibreur de charge externe.export EXTERNAL_LB_IP_ADDRESS=EXTERNAL_LB_IP_ADDRESS[\Facultatif/] Ajoutez un libellé aux nœuds de la passerelle d'entrée. Cela permet de s'assurer que la passerelle est déployée sur des nœuds spécifiques du cluster.
kubectl label nodes INGRESSGATEWAY_NODE_IP ${ASM_INGRESSGATEWAY_NODE_LABEL}=- INGRESSGATEWAY_NODE_IP : nœud(s) de votre cluster Kubernetes
qui héberge la passerelle d'entrée. Exécutez cette commande
kubectlpour chaque nœud d'entrée.
- INGRESSGATEWAY_NODE_IP : nœud(s) de votre cluster Kubernetes
qui héberge la passerelle d'entrée. Exécutez cette commande
Créer la passerelle d'entrée
Avant de suivre les instructions de cette section, vous devez déterminer votre mise en œuvre du plan de contrôle. Pour ce faire, suivez les instructions de la section Identifier la mise en œuvre du plan de contrôle.
Créez l'espace de noms qui sera utilisé pour déployer la passerelle d'entrée.
kubectl create namespace ${ASM_INGRESSGATEWAY_NAMESPACE}
Activez l'espace de noms pour l'injection : Les étapes dépendent de votre mise en œuvre du plan de contrôle.
Plan de contrôle géré (TD)
- Appliquez les étiquettes d'injection par défaut à l'espace de noms.
kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio.io/rev- istio-injection=enabled --overwritePlan de contrôle géré (Istiod)
Recommandation : Exécutez la commande suivante pour appliquer l'étiquette d'injection par défaut à l'espace de noms :
kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio.io/rev- istio-injection=enabled --overwriteSi vous utilisez déjà le plan de contrôle Istiod géré : nous vous recommandons d'utiliser l'injection par défaut, mais l'injection basée sur les révisions est acceptée. Suivez les instructions suivantes :
Exécutez la commande suivante pour localiser les canaux de publication disponibles :
kubectl -n istio-system get controlplanerevisionLe résultat ressemble à ce qui suit :
NAME AGE asm-managed-rapid 6d7hREMARQUE : Si deux révisions du plan de contrôle apparaissent dans la liste ci-dessus, supprimez-en une. Il n'est pas possible d'avoir plusieurs canaux de plan de contrôle dans un même cluster.
Dans le résultat, la valeur de la colonne
NAMEest l'étiquette de révision qui correspond au canal de publication disponible pour la version de Cloud Service Mesh.Appliquez l'étiquette de révision à l'espace de noms :
kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
Au sein du cluster
Recommandation : Exécutez la commande suivante pour appliquer l'étiquette d'injection par défaut à l'espace de noms :
kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio.io/rev- istio-injection=enabled --overwriteNous vous recommandons d'utiliser l'injection par défaut, mais l'injection basée sur les révisions est acceptée : Suivez les instructions ci-dessous :
Exécutez la commande suivante pour localiser l'étiquette de révision sur
istiod:kubectl get deploy -n istio-system -l app=istiod -o \ jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'Appliquez l'étiquette de révision à l'espace de noms. Dans la commande suivante,
REVISION_LABELcorrespond à la valeur du libellé de révisionistiodque vous avez notée à l'étape précédente.kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
Appliquez le fichier manifeste de passerelle d'entrée.
kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} apply --filename https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-service-mesh-samples/main/docs/ingress-gateway-external-lb/ingress-gateway.yamlRésultat attendu :
serviceaccount/asm-ingressgateway created role.rbac.authorization.k8s.io/asm-ingressgateway created rolebinding.rbac.authorization.k8s.io/asm-ingressgateway created deployment.apps/asm-ingressgateway created service/asm-ingressgateway created poddisruptionbudget.policy/asm-ingressgateway created horizontalpodautoscaler.autoscaling/asm-ingressgateway createdCorrigez le service
ingressgatewayavec l'adresse IP de l'équilibreur de charge externe.cat <<EOF > asm-external-ip-patch.yaml spec: externalIPs: - ${EXTERNAL_LB_IP_ADDRESS} loadBalancerIP: ${EXTERNAL_LB_IP_ADDRESS} EOF kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} patch service/${ASM_INGRESSGATEWAY_SERVICE_NAME} --patch "$(cat asm-external-ip-patch.yaml)"[Facultatif] Corrigez le déploiement
ingressgatewaypour l'affinité de libellé des nœuds de passerelle d'entrée.cat <<EOF > asm-ingress-node-label-patch.yaml spec: template: spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: ${ASM_INGRESSGATEWAY_NODE_LABEL} operator: Exists EOF kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} patch deployment/${ASM_INGRESSGATEWAY_DEPLOYMENT_NAME} --patch "$(cat asm-ingress-node-label-patch.yaml)"
Configurer l'équilibreur de charge externe
Dans cette section, vous allez configurer l'équilibreur de charge externe pour qu'il se connecte à la passerelle d'entrée du cluster.
Récupérer les informations de port Service de la passerelle d'entrée
Récupérez les
NodePorts.export HTTP_INGRESS_PORT=$(kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} get service/${ASM_INGRESSGATEWAY_SERVICE_NAME} --output jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}') export HTTPS_INGRESS_PORT=$(kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} get service/${ASM_INGRESSGATEWAY_SERVICE_NAME} --output jsonpath='{.spec.ports[?(@.name=="https")].nodePort}') export STATUS_PORT=$(kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} get service/${ASM_INGRESSGATEWAY_SERVICE_NAME} --output jsonpath='{.spec.ports[?(@.name=="status-port")].nodePort}')Affichez les
NodePorts.echo HTTP_INGRESS_PORT=${HTTP_INGRESS_PORT} echo HTTPS_INGRESS_PORT=${HTTPS_INGRESS_PORT} echo STATUS_PORT=${STATUS_PORT}
Configurer l'équilibreur de charge externe
Utilisez les NodePorts affichés à l'étape précédente pour configurer la connectivité entre l'équilibreur de charge externe et la passerelle d'entrée.
Configurez la vérification de l'état dans la configuration de votre équilibreur de charge.
hosts: CLUSTER_NODE_IP Protocol: HTTP Port: STATUS_PORT Path: /healthz/readyCLUSTER_NODE_IP : adresse IP des nœuds de votre cluster Kubernetes qui héberge la passerelle d'entrée. Cette adresse IP doit être accessible à partir de votre équilibreur de charge externe. Vous devrez peut-être configurer cette configuration plusieurs fois, une fois par nœud de cluster.
STATUS_PORT :
NodePortvia lequel l'API d'état de la passerelle d'entrée est exposée. Vous pouvez copier ces informations à partir de l'étape précédente. La valeur est la même pour chaque nœud du cluster.
Configurez des pools de nœuds dans votre équilibreur de charge pour le routage du
HTTPet duHTTPStrafic. Utilisez la configurationIP:PORTsuivante pour le trafic sur le port 80 (HTTP) et le port 443 (HTTPS).80 -> CLUSTER_NODE_IP:HTTP_INGRESS_PORT 443 -> CLUSTER_NODE_IP:HTTPS_INGRESS_PORTCLUSTER_NODE_IP : adresse IP des nœuds de votre cluster Kubernetes qui héberge la passerelle d'entrée. Cette adresse IP doit être accessible à partir de votre équilibreur de charge externe. Vous devrez peut-être configurer cette configuration plusieurs fois, une fois par nœud de cluster.
HTTP_INGRESS_PORT :
NodePortvia lequel le trafic HTTP de la passerelle d'entrée est exposé. Vous pouvez copier ces informations à partir de l'étape précédente. La valeur est la même pour chaque nœud du cluster.HTTPS_INGRESS_PORT :
NodePortvia lequel le trafic HTTPS de la passerelle d'entrée est exposé. Vous pouvez copier ces informations à partir de l'étape précédente. La valeur est la même pour chaque nœud du cluster.
Pour vérifier votre configuration, assurez-vous que les vérifications d'état de votre équilibreur de charge aboutissent.
Étape suivante
- Apprenez-en plus sur l'installation et la mise à niveau des passerelles.