La configuration d'un certificat HTTPS permet d'activer le chiffrement Transport Layer Security (TLS)/Secure Sockets Layer (SSL) pour les services déployés sur une passerelle MSE Ingress. Cette étape est essentielle pour sécuriser les données des applications web modernes et des services API. Un certificat HTTPS garantit le chiffrement des données transmises entre les clients et la passerelle, empêchant ainsi toute partie non autorisée de voler ou de falsifier des informations sensibles. Il offre également une protection robuste contre les attaques de type « man-in-the-middle ».
Prérequis
Vous avez exposé vos services via une passerelle MSE Ingress. Pour plus d'informations, consultez les rubriques Accéder aux services dans Container Service for Kubernetes (ACK) via une passerelle MSE Ingress ou Accéder aux services dans ACK Serverless via une passerelle MSE Ingress.
-
Vous disposez d'un certificat numérique de confiance. Vous pouvez en obtenir un de l'une des manières suivantes :
Achetez un certificat via Alibaba Cloud Certificate Management Service. Pour plus d'informations, consultez la rubrique Acheter un certificat SSL.
Utilisez un certificat acheté auprès d'une autre autorité de certification (CA).
Générez un certificat auto-signé localement.
Méthodes de configuration
Une passerelle MSE Ingress prend en charge deux méthodes pour configurer un certificat HTTPS : l'utilisation d'un Kubernetes Secret ou l'utilisation de la console MSE.
|
Élément |
Kubernetes Secret |
Console MSE |
|
Cas d'utilisation |
|
|
|
Priorité |
Faible |
Élevée |
|
Inter-namespace |
Non pris en charge. |
Pris en charge. |
|
Mise à jour du certificat |
Remplacement du contenu du Kubernetes Secret. |
Remplacement du certificat depuis la console MSE ou déploiement d'un nouveau certificat depuis la console Certificate Management Service. |
Déployer le service backend
Connectez-vous à la console Container Service for Kubernetes (ACK). Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster cible. Dans le volet de navigation de gauche, accédez à .
-
Sur la page Deployments, cliquez sur Create from YAML. Utilisez le fichier YAML suivant pour déployer un déploiement httpbin et un service httpbin.
apiVersion: apps/v1 kind: Deployment metadata: name: httpbin namespace: default spec: replicas: 1 selector: matchLabels: app: httpbin template: metadata: labels: app: httpbin version: v1 spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/mse-ingress/go-httpbin args: - "--version=v1" imagePullPolicy: Always name: httpbin --- apiVersion: v1 kind: Service metadata: name: httpbin namespace: default spec: ports: - port: 8080 protocol: TCP selector: app: httpbin
Configurer le certificat HTTPS
Kubernetes Secret
Vous pouvez configurer un certificat HTTPS pour un domaine en référençant un Kubernetes Secret à l'aide de la sémantique Ingress native.
-
Préparez un certificat de domaine. Cet exemple utilise un certificat auto-signé.
RemarquePour les environnements de production, vous devez utiliser une clé privée et un certificat réels pour votre activité. Vous pouvez télécharger la clé et le certificat de votre domaine depuis la console Certificate Management Service.
-
Exécutez la commande suivante pour générer un fichier de certificat tls.crt et un fichier de clé privée tls.key.
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=foo.bar.com/O=foo.bar.com" -
Créez un Secret pour stocker le certificat TLS.
Connectez-vous à la console Container Service for Kubernetes (ACK). Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster cible. Dans le volet de navigation de gauche, accédez à .
Cliquez sur Create. Dans le panneau Create, définissez le champ Name sur tls-test, sélectionnez Type comme TLS Certificate, copiez le contenu des fichiers tls.crt et tls.key créés dans les zones de saisie correspondantes, puis cliquez sur Create.
-
-
Créez un MSE Ingress et configurez le certificat HTTPS pour le domaine
foo.bar.com.Dans le volet de navigation de gauche, accédez à Network > Ingresses.
-
Sur la page Ingresses, cliquez sur Create Ingress. Dans la boîte de dialogue Create Ingress, configurez la route.
Paramètre
Description
Exemple
Type de passerelle
Sélectionnez MSE Ingress. Pour une comparaison des différents types de passerelles, consultez la rubrique Comparaison de Nginx Ingress, ALB Ingress, APIG Ingress et MSE Ingress.
MSE Ingress
Name
Saisissez un nom personnalisé pour l'Ingress.
test
IngressClass
Sélectionnez la classe de ressource appropriée.
mse
Règle
Cliquez sur + Add Rule pour ajouter des règles de routage.
-
Nom de domaine : Un nom de domaine personnalisé.
-
Mappage de chemin : Configurez les paramètres suivants.
-
Chemin : Le chemin URL permettant d'accéder au service.
-
Règle de correspondance :
-
Prefix (correspondance basée sur le préfixe) : Correspond au préfixe du chemin URL de la requête.
-
Exact (correspondance exacte) : Correspond exactement au chemin URL de la requête.
-
Default (spécifique à l'implémentation) : Le comportement est déterminé par la logique spécifique du contrôleur Ingress.
Pour plus d'informations, consultez la rubrique Fonctionnalités avancées des ALB Ingresses.
-
-
Service : Le service Kubernetes cible.
-
Port : Le port à exposer pour le service.
-
-
L'Ingress prend en charge plusieurs chemins sous le même nom de domaine. Cliquez sur + Add Path pour ajouter d'autres chemins.
-
Nom de domaine : foo.bar.com
-
Mappage de chemin :
-
Chemin : /
-
Règle de correspondance : Prefix (correspondance basée sur le préfixe)
-
Service : httpbin
-
Port : 8080
-
Configuration TLS
Activez TLS pour configurer un service de routage sécurisé.
-
Nom de domaine : Un nom de domaine personnalisé.
-
Secret : Sélectionnez le Secret approprié.
Remarque
Laisser ce champ vide active la découverte automatique des certificats.
Pour créer un nouveau Secret :
-
À droite du champ Secret, cliquez sur Create.
-
Dans la boîte de dialogue Create Secret, spécifiez un Name, Cert et Key pour le Secret, puis cliquez sur OK.
-
Dans la liste déroulante Secret, sélectionnez le Secret que vous avez créé.
-
Cliquez sur + Add TLS Configuration pour configurer plusieurs paramètres TLS.
-
Nom de domaine : foo.bar.com
-
Secret : tls-test
-
Conservez les valeurs par défaut pour les autres paramètres et cliquez sur OK sur la page Create Ingress.
-
Testez le trafic HTTPS. Exécutez la commande suivante en remplaçant
x.x.x.xpar l'adresse IP réelle de votre passerelle. Vous pouvez trouver l'adresse IP de la passerelle sur la page de liste des Ingresses.RemarqueCet exemple utilise un certificat auto-signé et un domaine qui n'est pas enregistré auprès d'un fournisseur DNS. Par conséquent, vous devez utiliser l'indicateur
--resolvepour résoudre manuellement le nom de domaine vers l'adresse IP de la passerelle et l'indicateur-kpour ignorer la validation du certificat.curl -v -k https://foo.bar.com/version --resolve "foo.bar.com:443:x.x.x.x"Le résultat attendu est le suivant :
* Connected to foo.bar.com (X.X.X.X) port 443 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * successfully set certificate verify locations: * CAfile: /etc/ssl/cert.pem CApath: none * TLSv1.2 (OUT), TLS handshake, Client hello (1): * TLSv1.2 (IN), TLS handshake, Server hello (2): * TLSv1.2 (IN), TLS handshake, Certificate (11): * TLSv1.2 (IN), TLS handshake, Server key exchange (12): * TLSv1.2 (IN), TLS handshake, Server finished (14): * TLSv1.2 (OUT), TLS handshake, Client key exchange (16): * TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.2 (OUT), TLS handshake, Finished (20): * TLSv1.2 (IN), TLS change cipher, Change cipher spec (1): * TLSv1.2 (IN), TLS handshake, Finished (20): * SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256 * ALPN, server accepted to use http/1.1 * Server certificate: * subject: CN=foo.bar.com; O=foo.bar.com * start date: Jan 17 06:47:23 2024 GMT * expire date: Jan 16 06:47:23 2025 GMT * issuer: CN=foo.bar.com; O=foo.bar.com * SSL certificate verify result: self signed certificate (18), continuing anyway. > GET /version HTTP/1.1 > Host: foo.bar.com > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 OK < date: Wed, 17 Jan 2024 07:49:39 GMT < content-length: 53 < content-type: text/plain; charset=utf-8 < req-cost-time: 3 < req-arrive-time: 1705477779046 < resp-start-time: 1705477779049 < x-envoy-upstream-service-time: 2 < server: istio-envoy < version: v1 hostname: httpbin-xxxxxx
Console MSE
Vous pouvez configurer un certificat pour un domaine directement depuis la console MSE. Cette méthode ne nécessite pas de référencer un Kubernetes Secret dans l'objet Ingress ; il vous suffit de configurer les règles de routage.
Pour un même nom de domaine, la méthode via la console MSE est prioritaire sur la méthode Kubernetes Secret. Si vous configurez des certificats pour le même domaine à la fois dans la console MSE et dans une ressource Kubernetes Ingress, le certificat de la console sera utilisé.
Préparez un certificat de domaine et téléchargez-le sur Alibaba Cloud Certificate Management Service. Pour plus d'informations, consultez la rubrique Télécharger, synchroniser et partager des certificats SSL. Si votre certificat est déjà hébergé dans Certificate Management Service, vous pouvez ignorer cette étape.
-
Créez un domaine et configurez son certificat.
Connectez-vous à la console MSE Gateway Management et sélectionnez une région dans la barre de navigation supérieure.
Dans le volet de navigation de gauche, accédez à Name > OK, puis cliquez sur l'ID de l'instance de passerelle cible.
Dans le volet de navigation de gauche, cliquez sur Cloud-native Gateway, puis sélectionnez l'onglet Domain.
Cliquez sur Add domain name. Ajoutez un Domain name, définissez le protocole Gateways sur HTTPS et sélectionnez le certificat correspondant.
-
Créez un service.
Sur la page Route Management de l'instance MSE, sélectionnez l'onglet Routes et cliquez sur Create service.
Définissez Protocol sur Container service, sélectionnez les Service appropriés, cochez le service
httpbinque vous avez créé précédemment dans la Service list, puis cliquez sur Service Sources.
-
Créez une route.
Sur la page Route Management de l'instance MSE, sélectionnez l'onglet Route et cliquez sur Create route.
Pour Domain name, sélectionnez le domaine ajouté à l'étape 2. Pour Backend service, sélectionnez le service créé à l'étape 3, puis cliquez sur Save and publish.
-
Testez le trafic HTTPS. Exécutez la commande suivante en remplaçant
x.x.x.xpar l'adresse IP réelle de votre passerelle. Vous pouvez trouver l'adresse IP de la passerelle sur la page .RemarqueSi vous utilisez un certificat auto-signé et que le domaine n'est pas enregistré auprès d'un fournisseur DNS, vous devez utiliser l'indicateur
--resolvepour résoudre manuellement le nom de domaine vers l'adresse IP de la passerelle et l'indicateur-kpour ignorer la validation du certificat.Remplacez
<Your-DomainName>par votre nom de domaine réel.curl -v -k https://<Your-DomainName>/version --resolve "<Your-DomainName>:443:x.x.x.x"Le résultat attendu est le suivant :
* Connected to ********** (X.X.X.X) port 443 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * successfully set certificate verify locations: * CAfile: /etc/ssl/cert.pem CApath: none * TLSv1.2 (OUT), TLS handshake, Client hello (1): * TLSv1.2 (IN), TLS handshake, Server hello (2): * TLSv1.2 (IN), TLS handshake, Certificate (11): * TLSv1.2 (IN), TLS handshake, Server key exchange (12): * TLSv1.2 (IN), TLS handshake, Server finished (14): * TLSv1.2 (OUT), TLS handshake, Client key exchange (16): * TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.2 (OUT), TLS handshake, Finished (20): * TLSv1.2 (IN), TLS change cipher, Change cipher spec (1): * TLSv1.2 (IN), TLS handshake, Finished (20): * SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256 * ALPN, server accepted to use http/1.1 * Server certificate: * subject: CN=*********; O=********** * start date: Jan 17 06:47:23 2024 GMT * expire date: Jan 16 06:47:23 2025 GMT * issuer: CN=**********; O=********** * SSL certificate verify result: self signed certificate (18), continuing anyway. > GET /version HTTP/1.1 > Host: ********** > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 OK < date: Wed, 17 Jan 2024 08:16:27 GMT < content-length: 46 < content-type: text/plain; charset=utf-8 < req-cost-time: 5 < req-arrive-time: 1705479387567 < resp-start-time: 1705479387573 < x-envoy-upstream-service-time: 4 < server: istio-envoy < version: v1 hostname: httpbin-xxxxxx