Une nouvelle version d'Anthos clusters on AWS (GKE on AWS) est disponible depuis le 31 mars. Consultez les notes de version pour plus d'informations.

Activer Ingress avec Anthos Service Mesh

Cet article explique comment installer Anthos Service Mesh, qui est préinstallé avec une passerelle d'entrée. Avec Anthos Service Mesh, vous pouvez configurer une ressource d'entrée Kubernetes pour vos déploiements si vous avez besoin d'un contrôleur d'entrée. Cet article fournit un exemple qui vous montre comment configurer un exemple de déploiement et une ressource d'entrée.

Avant de commencer

Avant de commencer à utiliser Anthos clusters on AWS, assurez-vous d'avoir effectué les tâches suivantes :

  • Installez un service de gestion.
  • Créez un cluster d'utilisateur.
  • Si vos clusters d'utilisateur disposent d'un accès sortant limité à Internet, autorisez l'accès aux domaines de dépôt de conteneurs suivants :

    • docker.io
    • quay.io

    Si vous ne souhaitez pas autoriser l'accès sortant à ces domaines, consultez la section Effectuer l'installation sans Prometheus et Kiali.

  • Utilisez kubectl config use context pour basculer vers le contexte de votre cluster d'utilisateur :

    kubectl config use-context CLUSTER_NAME

Configurer votre environnement

Vous devez disposer des outils suivants sur la machine à partir de laquelle vous souhaitez installer Anthos Service Mesh. Notez que vous ne pouvez installer Anthos Service Mesh que sur un cluster d'utilisateur, et non sur un cluster d'administrateur.

  • Outil de ligne de commande curl
  • SDK Cloud (outil de ligne de commande gcloud)

Après avoir installé le SDK Cloud :

  1. Authentifiez-vous avec le SDK Cloud :

    gcloud auth login
    
  2. Mettez à jour les composants :

    gcloud components update
    
  3. Installez kubectl :

    gcloud components install kubectl
    
  4. Installez kpt :

    gcloud components install kpt
    
  5. Basculez le contexte vers votre cluster d'utilisateur :

    kubectl config use-context CLUSTER_NAME
  6. Accordez des autorisations d'administrateur de cluster à votre compte utilisateur (votre adresse e-mail de connexion Google Cloud). Vous avez besoin de ces autorisations pour créer les règles de contrôle d'accès basé sur les rôles (RBAC) nécessaires pour Anthos Service Mesh :

    kubectl create clusterrolebinding cluster-admin-binding \
      --clusterrole=cluster-admin \
      --user=USER_ACCOUNT

Télécharger le fichier d'installation

  1. Téléchargez le fichier d'installation d'Anthos Service Mesh dans votre répertoire de travail actuel :

    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.3-asm.6-linux-amd64.tar.gz
  2. Téléchargez le fichier de signature et utilisez openssl pour valider la signature :

    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.3-asm.6-linux-amd64.tar.gz.1.sig
    openssl dgst -verify - -signature istio-1.7.3-asm.6-linux-amd64.tar.gz.1.sig istio-1.7.3-asm.6-linux-amd64.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    La sortie attendue est Verified OK.

  3. Extrayez le contenu du fichier vers n’importe quel emplacement de votre système de fichiers. Par exemple, pour extraire le contenu vers le répertoire de travail actuel :

    tar xzf istio-1.7.3-asm.6-linux-amd64.tar.gz

    La commande crée un répertoire d'installation dans votre répertoire de travail actuel nommé istio-1.7.3-asm.6. Le répertoire istio-1.7.3-asm.6/bin contient l'outil de ligne de commande istioctl que vous utilisez pour installer Anthos Service Mesh.

  4. Assurez-vous d'être dans le répertoire racine de l'installation Anthos Service Mesh.

    cd istio-1.7.3-asm.6
  5. Pour plus de commodité, ajoutez le répertoire /bin à votre PATH :

    export PATH=$PWD/bin:$PATH

Créer l'espace de noms istio-system

Créez un espace de noms appelé istio-system pour les composants du plan de contrôle :

kubectl create namespace istio-system

Configurer le webhook de validation

Lorsque vous installez Anthos Service Mesh, vous définissez un libellé de révision sur istiod. Vous devez définir la même révision sur le webhook de validation.

Enregistrez le fichier YAML suivant dans un fichier appelé istiod-service.yaml :

apiVersion: v1
kind: Service
metadata:
  name: istiod
  namespace: istio-system
  labels:
    istio.io/rev: asm-173-6
    app: istiod
    istio: pilot
    release: istio
spec:
  ports:
    - port: 15010
      name: grpc-xds # plaintext
      protocol: TCP
    - port: 15012
      name: https-dns # mTLS with k8s-signed cert
      protocol: TCP
    - port: 443
      name: https-webhook # validation and injection
      targetPort: 15017
      protocol: TCP
    - port: 15014
      name: http-monitoring # prometheus stats
      protocol: TCP
  selector:
    app: istiod
    istio.io/rev: asm-173-6

Installer Anthos Service Mesh

Cette section explique comment installer Anthos Service Mesh sur votre cluster d'utilisateur, ce qui active les fonctionnalités par défaut compatibles répertoriées sur la page Fonctionnalités compatibles du profil asm-multicloud. Vous pouvez choisir d'activer l'entrée pour le sous-réseau public ou pour le sous-réseau privé.

Public

  1. Installez Anthos Service Mesh :

    istioctl install \
      --set profile=asm-multicloud \
      --set revision=asm-173-6
    

    L'argument --set revision ajoute un libellé de révision au format istio.io/rev=asm-173-6 à istiod. Le libellé de révision est utilisé par le webhook d'injecteur side-car automatique pour associer les side-cars injectés à une révision istiod particulière. Pour activer l'injection automatique side-car pour un espace de noms, vous devez lui attribuer un libellé de révision correspondant au libellé de istiod.

  2. Configurez le webhook de sorte qu'il puisse localiser le service istiod avec le libellé de révision :

    kubectl apply -f istiod-service.yaml
    

    Cette commande crée une entrée de service qui permet au webhook de validation de vérifier automatiquement les configurations avant leur application.

Privé

Ci-dessous, vous ajoutez l'annotation service.beta.kubernetes.io/aws-load-balancer-internal à tous les services créés par Anthos Service Mesh. Lorsque cette annotation est présente, Anthos clusters on AWS crée des services d'entrée privés.

  1. Enregistrez le fichier YAML suivant dans un fichier appelé istio-operator-internal-lb.yaml :

    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    spec:
      components:
        ingressGateways:
        - enabled: true
          k8s:
            serviceAnnotations:
              service.beta.kubernetes.io/aws-load-balancer-internal: "true"
    
  2. Installez Anthos Service Mesh :

    istioctl install \
     --set profile=asm-multicloud \
     --set revision=asm-173-6 \
     -f istio-operator-internal-lb.yaml
    

    L'argument --set revision ajoute un libellé de révision au format istio.io/rev=asm-173-6 à istiod. Le libellé de révision est utilisé par le webhook d'injecteur side-car automatique pour associer les side-cars injectés à une révision istiod particulière. Pour activer l'injection automatique side-car pour un espace de noms, vous devez lui attribuer un libellé de révision correspondant au libellé de istiod.

  3. Configurez le webhook de sorte qu'il puisse localiser le service istiod avec le libellé de révision :

    kubectl apply -f istiod-service.yaml
    

    Cette commande crée une entrée de service qui permet au webhook de validation de vérifier automatiquement les configurations avant leur application.

Effectuer l'installation sans Prometheus et Kiali

Par défaut dans Anthos Service Mesh 1.7 et versions antérieures, Anthos Service Mesh installe Prometheus et Kiali à partir de leurs dépôts de packages d'origine sur docker.io et quay.io. Si vous ne souhaitez pas installer ces outils ou autoriser les connexions à ces dépôts, transmettez -set addonComponents.prometheus.enabled=false et --set addonComponents.kiali.enabled=false à istioctl install. Par exemple, utilisez la commande suivante pour exclure Prometheus et Kiali de l'installation de sous-réseau public.

  istioctl install \
    --set profile=asm-multicloud \
    --set addonComponents.prometheus.enabled=false \
    --set addonComponents.kiali.enabled=false \
    --revision=asm-173-6

Vérifier les composants du plan de contrôle

Vérifiez que les pods du plan de contrôle dans istio-system sont opérationnels :

kubectl get pod -n istio-system

Le résultat attendu ressemble à ce qui suit :

NAME                                      READY   STATUS      RESTARTS   AGE
istio-ingressgateway-74cc894bfd-786rg     1/1     Running     0          7m19s
istiod-78cdbbbdb-d7tps                    1/1     Running     0          7m36s
promsd-576b8db4d6-lqf64                   2/2     Running     1          7m19s

Créer votre maillage de services

Vous avez installé le plan de contrôle Anthos Service Mesh avec la passerelle d'entrée préinstallée. Si vous avez uniquement besoin d'une fonctionnalité d'entrée mise en œuvre par un contrôleur d'entrée, vous êtes prêt à installer des applications sur votre cluster. Consultez la section suivante, Créer un exemple de déploiement, qui montre comment configurer une ressource d'entrée.

Si vous souhaitez bénéficier de toutes les fonctionnalités fournies par Anthos Service Mesh, passez à la phase suivante de l'installation, Injecter des proxys side-car, dans la documentation Anthos Service Mesh. La communication entre les proxys side-car et le plan de contrôle Anthos Service Mesh permet de créer le maillage de services pour vos charges de travail.

Créer un exemple de déploiement

Dans cette section, vous installez un exemple d'application et créez un point de terminaison d'entrée pour celui-ci.

  1. Créez un déploiement de hello-app et un ClusterIP pour le déploiement. Copiez le fichier YAML suivant dans un fichier nommé hello-app.yaml.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: hello-app
      name: hello-app
    spec:
      selector:
        matchLabels:
          app: hello-app
      replicas: 3
      template:
        metadata:
          labels:
            app: hello-app
        spec:
          containers:
          - name: hello
            image: "gcr.io/google-samples/hello-app:2.0"
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: hello-app
      name: hello-app
    spec:
      type: ClusterIP
      selector:
        app: hello-app
      ports:
      - protocol: TCP
        port: 8080
        targetPort: 8080
    
  2. Appliquez le fichier YAML à votre cluster avec kubectl apply.

    env HTTP_PROXY=http://localhost:8118 \
      kubectl apply -f hello-app.yaml
    
  3. Créez une entrée Kubernetes pour l'exemple d'application. Copiez le fichier YAML suivant dans un fichier nommé hello-app-ingress.yaml.

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      annotations:
        kubernetes.io/ingress.class: istio
      labels:
        app: hello-app
      name: hello-app
    spec:
      rules:
      - host:
        http:
          paths:
          - backend:
              serviceName: hello-app
              servicePort: 8080
    
  4. Créez l'entrée en appliquant la configuration avec kubectl apply.

    env HTTP_PROXY=http://localhost:8118 \
      kubectl apply -f hello-app-ingress.yaml
    
  5. Vérifiez l'état de votre passerelle à l'aide de kubectl get svc.

    env HTTP_PROXY=http://localhost:8118 \
      kubectl get ingress hello-app
    

    Le champ ADDRESS doit comporter un nom de domaine ELB. Si le champ ADDRESS reste en attente (pending), confirmez les libellés de VPC et de sous-réseau.

  6. Vous pouvez vérifier l'URL de la passerelle d'entrée en composant l'hôte et le port. Pour obtenir l'URL de votre passerelle, exécutez les commandes suivantes :

    export INGRESS_URL=$(env HTTP_PROXY=http://localhost:8118 \
    kubectl get ingress hello-app -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
    echo "Your hello-app ingress URL is: http://"$INGRESS_URL
    

    La dernière commande imprime le point de terminaison de votre entrée.

  7. Si vous avez créé une entrée publique, vous pouvez afficher la page Web par défaut hello-app dans curl en accédant à http://$INGRESS_URL/.

    curl $INGRESS_URL/
    

Nettoyer

Vous supprimez les composants hello-app avec la commande kubectl delete.

env HTTP_PROXY=http://localhost:8118 \
  kubectl delete -f hello-app.yaml &&\
  kubectl delete -f hello-app-ingress.yaml

Si vous souhaitez supprimer Anthos Service Mesh, consultez la page Désinstaller Anthos Service Mesh.

Étapes suivantes

En savoir plus :