Tous les produits
Search
Centre de documentation

Alibaba Cloud Service Mesh:Activer HTTPS sur une passerelle ASM

Dernière mise à jour :Aug 29, 2026

Activez HTTPS sur une passerelle ASM pour offrir un accès chiffré aux clients externes. Les passerelles ASM prennent en charge le chargement dynamique des certificats, ce qui permet de configurer en temps réel les clés privées, les certificats serveur et les certificats racine. Cette méthode évite le redémarrage de la passerelle ou la dépendance aux montages de volumes Secret, réduisant ainsi la complexité opérationnelle et éliminant les risques d'interruption de service. Les passerelles ASM peuvent surveiller et gérer plusieurs paires de certificats et de clés privées, offrant une communication flexible et sécurisée pour différents hôtes et renforçant la sécurité de la transmission des données.

Prérequis

Contexte

Istio prend en charge le chargement dynamique des certificats. La clé privée, le certificat serveur et le certificat racine requis pour la sécurité de la couche de transport (TLS) peuvent être configurés dynamiquement sans redémarrer la passerelle. Une passerelle ASM surveille les Secrets dans son namespace et les charge dynamiquement via la ressource personnalisée (CR) Gateway. L'utilisation de HTTPS sur une passerelle ASM offre les avantages suivants :

  • La passerelle d'entrée peut ajouter, supprimer ou mettre à jour dynamiquement les certificats, les clés privées ou les certificats racine correspondants requis, sans redémarrage.

  • Aucun montage de volume Secret n'est nécessaire. Après la création d'un Kubernetes Secret, la passerelle ASM le détecte et envoie son certificat, sa clé privée ou son certificat racine à la passerelle d'entrée.

  • Une passerelle ASM peut surveiller plusieurs paires de certificats et de clés privées. Il vous suffit de créer des Secrets pour plusieurs hôtes et de mettre à jour la configuration de la Gateway.

Étape 1 : Préparer les certificats et les clés privées

Lors de l'utilisation d'un nom de domaine, un dépôt ICP (Internet Content Provider) peut être nécessaire pour garantir son accessibilité publique. Cette rubrique utilise aliyun.com comme exemple pour générer un certificat et une clé privée, puis les enregistrer en tant que Secret.

Si vous disposez déjà d'un certificat et d'une clé privée pour aliyun.com, renommez la clé en aliyun.com.key et le certificat en aliyun.com.crt. Sinon, utilisez openssl pour générer un certificat et une clé.

  1. Exécutez la commande suivante pour créer un certificat racine et une clé privée.

    openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -subj '/O=myexample Inc./CN=aliyun.com' -keyout aliyun.root.key -out aliyun.root.crt 
  2. Exécutez les commandes suivantes pour générer un certificat serveur et une clé privée pour aliyun.com.

    openssl req -out aliyun.com.csr -newkey rsa:2048 -nodes -keyout aliyun.com.key -subj "/CN=aliyun.com/O=myexample organization"
    openssl x509 -req -days 365 -CA aliyun.root.crt -CAkey aliyun.root.key -set_serial 0 -in aliyun.com.csr -out aliyun.com.crt
  3. Créez un Secret ou un certificat en fonction de la version de votre instance ASM.

    • Pour les instances ASM antérieures à la v1.17

      À l'aide du kubeconfig du cluster de la passerelle d'entrée, exécutez la commande suivante pour créer un Secret contenant le certificat et la clé privée dans le namespace istio-system.

      kubectl create -n istio-system secret tls myexample-credential --key=aliyun.com.key --cert=aliyun.com.crt
      Important

      Le nom du Secret ne doit pas commencer par istio ni par prometheus et ne peut pas contenir le champ token.

    • Pour les instances ASM v1.17 et ultérieures

      1. Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez Service Mesh > Mesh Management.

      2. Sur la page Mesh Management, cliquez sur le nom de l'instance ASM cible. Dans le volet de navigation de gauche, sélectionnez ASM Gateways > Certificate Management.

      3. Sur la page Certificate Management, cliquez sur Create. Dans le panneau Certificate Information, définissez les paramètres suivants et cliquez sur OK.

        Parameter

        Description

        Name

        Saisissez un nom pour le certificat. Dans cet exemple, myexample-credential est utilisé.

        Public Key Certificate

        Le contenu du fichier aliyun.com.crt généré à l'étape 2.

        Private Key

        Le contenu du fichier aliyun.com.key généré à l'étape 2.

Étape 2 : Définir le service backend pour a.aliyun.com

Le service backend de cet exemple utilise NGINX. Pour le service backend a.aliyun.com, les requêtes vers le chemin /hello renvoient la chaîne Welcome to a.aliyun.com! avec un code d'état 200. Voici le contenu du fichier myexample-nginx.conf.

events {
}
http {
  log_format main '$remote_addr - $remote_user [$time_local]  $status '
  '"$request" $body_bytes_sent "$http_referer" '
  '"$http_user_agent" "$http_x_forwarded_for"';
  access_log /var/log/nginx/access.log main;
  error_log  /var/log/nginx/error.log;
  server {
    listen 80;
    location /hello {
        return 200 'Welcome to a.aliyun.com!';
        add_header Content-Type text/plain;
    }
  }
}
  1. À l'aide du kubeconfig du cluster de la passerelle d'entrée, exécutez la commande suivante pour créer un Kubernetes ConfigMap pour la configuration du serveur NGINX.

    kubectl create configmap myexample-nginx-configmap --from-file=nginx.conf=./myexample-nginx.conf
  2. Activez l'injection automatique du proxy sidecar pour le namespace par défaut. Pour plus d'informations, consultez la section Activer l'injection automatique du proxy sidecar.

  3. Créez un fichier nommé myexampleapp.yaml avec le contenu suivant. Ensuite, exécutez la commande kubectl apply -f myexampleapp.yaml pour créer le service backend pour le nom de domaine a.aliyun.com.

    Afficher YAML

    apiVersion: v1
    kind: Service
    metadata:
      name: myexampleapp
      labels:
        app: myexampleapp
    spec:
      ports:
      - port: 80
        protocol: TCP
      selector:
        app: myexampleapp
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: myexampleapp
    spec:
      selector:
        matchLabels:
          app: myexampleapp
      replicas: 1
      template:
        metadata:
          labels:
            app: myexampleapp
        spec:
          containers:
          - name: nginx
            image: nginx
            ports:
            - containerPort: 80
            volumeMounts:
            - name: nginx-config
              mountPath: /etc/nginx
              readOnly: true
          volumes:
          - name: nginx-config
            configMap:
              name: myexample-nginx-configmap

Étape 3 : Définir le service backend pour b.aliyun.com

Le service backend de cet exemple utilise httpbin.

  1. Créez un fichier nommé httpbin.example.yaml et copiez-y le contenu suivant.

    Afficher YAML

    apiVersion: v1
    kind: Service
    metadata:
      name: httpbin
      labels:
        app: httpbin
    spec:
      ports:
      - name: http
        port: 8000
      selector:
        app: httpbin
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: httpbin
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: httpbin
          version: v1
      template:
        metadata:
          labels:
            app: httpbin
            version: v1
        spec:
          containers:
          - image: docker.io/citizenstig/httpbin
            imagePullPolicy: IfNotPresent
            name: httpbin
            ports:
            - containerPort: 80
  2. À l'aide du kubeconfig du cluster où réside le pod de la passerelle d'entrée, exécutez la commande suivante pour créer le service backend pour le nom de domaine b.aliyun.com.

    kubectl apply -f httpbin.example.yaml

Étape 4 : Créer une ressource Gateway

  1. Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez Service Mesh > Mesh Management.

  2. Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, sélectionnez ASM Gateways > Gateway. Sur la page qui s'affiche, cliquez sur Create from YAML.

  3. Sur la page Create, sélectionnez le namespace cible (dans cet exemple, default) et n'importe quel Scenario Template. Ensuite, saisissez le YAML suivant et cliquez sur Create.

    Afficher YAML

    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
      name: mysdsgateway
    spec:
      selector:
        istio: ingressgateway # use istio default ingress gateway
      servers:
      - port:
          number: 443
          name: https
          protocol: HTTPS
        tls:
          mode: SIMPLE
          credentialName: myexample-credential # must be the same as secret
        hosts:
        - '*.aliyun.com'
                                    

    Après la création de la ressource, la nouvelle passerelle apparaît sur la page Gateway.

Étape 5 : Créer des VirtualServices

  1. Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez Service Mesh > Mesh Management.

  2. Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, sélectionnez Traffic Management Center > VirtualService. Sur la page qui s'affiche, cliquez sur Create from YAML.

  3. Sur la page Create, sélectionnez les Namespaces cibles et n'importe quel Scenario Template. Ensuite, saisissez le YAML suivant et cliquez sur Create.

    Afficher YAML

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: mysdsgateway-myexamplevs
    spec:
      hosts:
      - "a.aliyun.com"
      gateways:
      - mysdsgateway
      http:
      - match:
        - uri:
            exact: /hello
        route:
        - destination:
            host: myexampleapp.default.svc.cluster.local
            port:
              number: 80      

    Répétez cette étape pour créer un VirtualService pour b.aliyun.com.

    Afficher YAML

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: mysdsgateway-httpbinvs
    spec:
      hosts:
      - "b.aliyun.com"
      gateways:
      - mysdsgateway
      http:
      - match:
        - uri:
            prefix: /status
        - uri:
            prefix: /delay
        route:
        - destination:
            port:
              number: 8000
            host: httpbin.default.svc.cluster.local        

    Après la création des services virtuels, ils apparaissent sur la page VirtualService.

Vérifier les résultats

Obtenir l'adresse du service de la passerelle d'entrée

  • Méthode 1 : Consultez l'adresse dans la console ASM. Connectez-vous à la console ASM, sélectionnez l'instance Service Mesh cible, puis sélectionnez ASM Gateways > Ingress Gateway dans le volet de navigation de gauche. Sur la page Ingress Gateway, consultez les informations requises.

  • Méthode 2 : Consultez l'adresse dans la console ACK. Pour plus d'informations, consultez la section Afficher les informations de service d'une passerelle d'entrée.

Accéder à la passerelle d'entrée via la ligne de commande

  • Exécutez la commande suivante pour accéder au service a.aliyun.com via HTTPS.

    curl -k -H Host:a.aliyun.com --resolve a.aliyun.com:443:{REPLACE_WITH_THE_INGRESS_GATEWAY_IP_ADDRESS}  https://a.aliyun.com/hello

    Résultat attendu :

    Welcome to a.aliyun.com!
  • Exécutez la commande suivante pour accéder au service b.aliyun.com via HTTPS.

    curl -k -H Host:b.aliyun.com --resolve b.aliyun.com:443:{REPLACE_WITH_THE_INGRESS_GATEWAY_IP_ADDRESS}  https://b.aliyun.com/status/418  

    Résultat attendu :

        -=[ teapot ]=-
           _...._
         .'  _ _ `.
        | ."` ^ `". _,
        \_;`"---"`|//
          |       ;/
          \_     _/
            `"""`

Opérations connexes

Mettre à jour le certificat de la passerelle

Pour mettre à jour le certificat monté sur une passerelle, créez un nouveau Secret dans le plan de données, puis modifiez la valeur du champ credentialName dans la ressource Gateway avec le nom du nouveau Secret. La passerelle monte automatiquement le nouveau Secret. Cet exemple montre comment créer un Secret nommé new-istio-ingressgateway-certs pour le serveur example.com.

  1. Créez un certificat dont l'émetteur est myexample.

    1. Dans l'outil OpenSSL, exécutez la commande suivante pour créer un certificat racine et une clé privée.

      openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -subj '/O=myexample Inc./CN=example.com' -keyout example.root.key -out example.root.crt
    2. Exécutez les commandes suivantes pour générer un certificat serveur et une clé privée pour le serveur example.com.

      openssl req -out example.com.csr -newkey rsa:2048 -nodes -keyout example.com.key -subj "/CN=example.com/O=myexample organization"
      openssl x509 -req -days 365 -CA example.root.crt -CAkey example.root.key -set_serial 0 -in example.com.csr -out example.com.crt
    3. Obtenez le fichier kubeconfig du cluster et utilisez kubectl pour vous connecter au cluster.

    4. Exécutez la commande suivante pour créer un Secret nommé new-istio-ingressgateway-certs.

      kubectl create -n istio-system secret tls new-istio-ingressgateway-certs --key example.com.key --cert example.com.crt
  2. Exécutez la commande suivante dans le cluster pour supprimer l'ancien Secret de certificat.

    kubectl delete secret  istio-ingressgateway-certs -n istio-system
  3. Mettez à jour la ressource Gateway.

    1. Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez Service Mesh > Mesh Management.

    2. Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, sélectionnez ASM Gateways > Gateway.

    3. Sur la page Gateway, recherchez la ressource Gateway cible et cliquez sur View YAML dans la colonne Actions.

    4. Dans la boîte de dialogue edit, modifiez la valeur de credentialName avec le nouveau nom de Secret de certificat, new-istio-ingressgateway-certs, puis cliquez sur OK.

  4. Vérifiez que le certificat de la passerelle est mis à jour.

    1. Exécutez la commande suivante pour afficher les informations actuelles du certificat dans le cluster.

      kubectl exec istio-ingressgateway-xxxx -n istio-system -- curl localhost:15000/config_dump  > ingressgateway_dump.yaml
    2. Exécutez la commande suivante pour imprimer et rechercher le certificat new-istio-ingressgateway-certs.

      cat ingressgateway_dump.yaml | grep new-istio-ingressgateway-certs -A 3

      Résultat attendu :

      "name": "kubernetes://new-istio-ingressgateway-certs",
      "tls_certificate": {
        "certificate_chain": {
          "inline_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t...xxx...LS0tLS1FTkQgQ0VSVElGSUNBVEUt"
        }
      }

      Copiez le contenu après le paramètre inline_bytes pour obtenir le certificat encodé en Base64.

    3. Exécutez la commande suivante dans votre outil de ligne de commande local pour décoder le certificat en Base64.

      echo <Base64-encoded-certificate-content> | base64 --decode
    4. Enregistrez le contenu décodé dans un fichier test.com.crt.

    5. Exécutez la commande suivante dans l'outil OpenSSL pour afficher l'organisation du certificat.

      openssl x509 -in test.com.crt -text -noout

      Résultat attendu :

      Certificate:
          Data:
              Version: 1 (0x0)
              Serial Number: 0 (0x0)
              Signature Algorithm: sha256WithRSAEncryption
              Issuer: O = myexample Inc., CN = example.com
              Validity
                  Not Before: Mar 17 03:20:27 2022 GMT
                  Not After : Mar 17 03:20:27 2023 GMT
              Subject: CN = example.com, O = myexample organization

      Vous pouvez constater que l'organisation a bien été modifiée en myexample, ce qui signifie que le certificat de la passerelle a été mis à jour avec succès.