Version 1.15

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Exposer une passerelle d'entrée à l'aide d'un équilibreur de charge externe

Présentation

Avec Anthos Service Mesh, vous pouvez déployer et gérer des passerelles d'entrée dans votre maillage de services. Vous pouvez également configurer l'équilibrage de charge pour votre cluster avec Anthos Service Mesh en utilisant des équilibreurs de charge externes (physiques ou logiciels en dehors du cluster) pour envoyer du trafic vers la passerelle d'entrée.

Cette page vous explique comment configurer un équilibreur de charge externe avec Anthos Service Mesh.

Avant de commencer

Pour suivre la procédure de ce document, vous avez besoin des ressources suivantes:

  • Cluster Kubernetes avec Anthos Service Mesh 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 passe devant la passerelle d'entrée de votre cluster via External IP Address.

Configurer votre environnement

Exécutez les commandes suivantes à partir d'un poste de travail ayant accès au cluster que vous souhaitez utiliser. Assurez-vous que l'outil kubectl est configuré pour utiliser le contexte spécifique à votre cluster.

  1. 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
    
  2. Définissez la valeur IP address de l'équilibreur de charge externe.

    export EXTERNAL_LB_IP_ADDRESS=EXTERNAL_LB_IP_ADDRESS
    
  3. [Facultatif] Attribuez 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 : nœud(s) de votre cluster Kubernetes qui héberge la passerelle d'entrée. Exécutez cette commande kubectl pour le nombre de nœuds d'entrée dont vous disposez.

Créer la passerelle d'entrée

  1. Créez l'espace de noms. Cet espace de noms sera utilisé pour déployer la passerelle d'entrée.

    kubectl create namespace ${ASM_INGRESSGATEWAY_NAMESPACE}
    
  2. Activez l'espace de noms pour l'injection : Les étapes dépendent de votre type Anthos Service Mesh (géré ou en cluster).

    Géré

    1. 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         6d7h
      asm-managed-rapid   6d7h
      

      Dans le résultat, la valeur de la colonne NAME correspond au libellé de révision correspondant au canal de publication disponible pour la version d'Anthos Service Mesh.

    2. 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

    1. 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"}'
      
    2. Appliquez le libellé de révision à l'espace de noms. Dans la commande suivante, REVISION correspond à la valeur du libellé de révision istiod que vous avez notée à l'étape précédente.

      kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \
        istio-injection- istio.io/rev=REVISION --overwrite
      
  3. 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
    
  4. Appliquez un correctif au 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)"
    
  5. [Facultatif] Appliquez le correctif au déploiement ingressgateway pour l'affinité de libellé 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.

Extraire les informations de port Service de la passerelle d'entrée

  1. Obtenez le 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}')
    
  2. Affichez le 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.

  1. 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 : adresse IP des nœuds de votre cluster Kubernetes qui héberge la passerelle d'entrée. Cette adresse IP doit être accessible depuis votre équilibreur de charge externe. Vous devrez peut-être définir cette configuration plusieurs fois, une fois par nœud de cluster.

    • STATUS_PORT: NodePort via lequel l'API indiquant l'état de la passerelle d'entrée est exposée. Vous pouvez copier les informations de l'étape précédente. Il est identique pour tous les nœuds du cluster.

  2. Configurez des pools de nœuds dans votre équilibreur de charge pour acheminer le trafic HTTP et HTTPS. Utilisez la configuration IP: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 : adresse IP des nœuds de votre cluster Kubernetes qui héberge la passerelle d'entrée. Cette adresse IP doit être accessible depuis 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: NodePort via lequel le trafic HTTP de la passerelle d'entrée est exposé. Vous pouvez copier les informations de l'étape précédente. Il est identique pour tous les nœuds du cluster.

    • HTTPS_INGRESS_PORT: NodePort via lequel le trafic HTTPS de la passerelle d'entrée est exposé. Vous pouvez copier les informations de l'étape précédente. Il est identique 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 sont bien effectuées.

Étapes suivantes