Exposer une passerelle d'entrée à l'aide d'un équilibreur de charge externe
Présentation
Avec Cloud Service Mesh, vous pouvez déployer et gérer des passerelles d'entrée dans votre maillage de services. Vous pouvez configurer davantage l'équilibrage de charge de 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 le trafic à la passerelle d'entrée.
Cette page vous 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 est exécuté. Vous allez configurer cet équilibreur de charge externe pour qu'il se trouve face à la passerelle d'entrée de votre cluster à l'aide de l'adresse IP externe de l'équilibreur de charge.
Configurer votre environnement
Exécutez les commandes suivantes à partir d'une station 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 à votre 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-ingressgateway
Définissez le champ
IP address
de 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 garantit 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: désigne le ou les nœuds de votre cluster Kubernetes qui hébergent la passerelle d'entrée. Exécutez cette commande
kubectl
pour autant de nœuds d'entrée que vous le souhaitez.
- INGRESSGATEWAY_NODE_IP: désigne le ou les nœuds de votre cluster Kubernetes qui hébergent 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 l'implémentation de votre plan de contrôle. Pour ce faire, suivez les instructions de la section Identifier l'implémentation du plan de contrôle.
Créez l'espace de noms Cet espace de noms permet de 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 la mise en œuvre du plan de contrôle.
Géré (TD)
- Appliquez l'étiquette d'injection par défaut à l'espace de noms:
kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio.io/rev- istio-injection=enabled --overwrite
Géré (Istiod)
Recommandé: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 --overwrite
Si vous êtes un utilisateur existant disposant du 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 compatible. Pour ce faire, procédez comme suit:
Exécutez la commande suivante pour localiser les versions disponibles:
kubectl -n istio-system get controlplanerevision
Le résultat ressemble à ce qui suit :
NAME AGE asm-managed-rapid 6d7h
REMARQUE: Si deux révisions du plan de contrôle figurent dans la liste ci-dessus, supprimez-en une. Il n'est pas possible d'avoir plusieurs canaux de plan de contrôle dans le cluster.
Dans le résultat, la valeur figurant dans la colonne
NAME
correspond au libellé de révision qui correspond à la version disponible disponible pour la version de Cloud Service Mesh.Appliquez le libellé de révision à l'espace de noms.
kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
Dans le cluster
Recommandé: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 --overwrite
Nous vous recommandons d'utiliser l'injection par défaut, mais l'injection basée sur les révisions est compatible: Suivez les instructions ci-dessous:
Exécutez la commande suivante pour localiser le libellé de révision sur
istiod
:kubectl get deploy -n istio-system -l app=istiod -o \ jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
Appliquez le libellé de révision à l'espace de noms. Dans la commande suivante,
REVISION_LABEL
correspond à la valeur du libellé de révisionistiod
que 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.yaml
Ré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 created
Corrigez le service
ingressgateway
avec 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] Appliquez un correctif au déploiement
ingressgateway
pour l'affinité des étiquettes des nœuds de la 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 de la passerelle d'entrée Service
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 le NodePorts
affiché à 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 d'état dans la configuration de votre équilibreur de charge.
hosts: CLUSTER_NODE_IP Protocol: HTTP Port: STATUS_PORT Path: /healthz/ready
CLUSTER_NODE_IP: correspond à l'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 définir cette configuration plusieurs fois, une fois par nœud de cluster.
STATUS_PORT: correspond au
NodePort
via lequel l'API d'état de fonctionnement 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 tous les nœuds du cluster.
Configurez des pools de nœuds dans votre équilibreur de charge pour router le trafic
HTTP
etHTTPS
. Utilisez la configurationIP:PORT
suivante pour le trafic sur les ports 80 (HTTP
) et 443 (HTTPS
).80 -> CLUSTER_NODE_IP:HTTP_INGRESS_PORT 443 -> CLUSTER_NODE_IP:HTTPS_INGRESS_PORT
CLUSTER_NODE_IP: correspond à l'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 définir cette configuration plusieurs fois, une fois par nœud de cluster.
HTTP_INGRESS_PORT: est le
NodePort
par 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 tous les nœuds du cluster.HTTPS_INGRESS_PORT: correspond au
NodePort
via 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 tous les nœuds du cluster.
Pour vérifier votre configuration, assurez-vous que les vérifications d'état de votre équilibreur de charge réussissent.
Étapes suivantes
- Apprenez-en plus sur l'installation et la mise à niveau des passerelles.