Utilisez un objet DomainMapping pour exposer un service Knative via HTTPS avec un nom de domaine personnalisé. Cette opération consiste à créer un secret TLS à partir d'un certificat et à le référencer dans la ressource DomainMapping. Lorsque le bloc tls est présent dans une ressource DomainMapping, le protocole passe automatiquement de HTTP à HTTPS.
Prérequis
Avant de commencer, assurez-vous que :
Knative est déployé dans votre cluster ACK. Pour plus d'informations, consultez la rubrique Déployer Knative.
kubectl est configuré pour se connecter à votre cluster.
Étape 1 : Créer un service Knative
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom du cluster à gérer, puis choisissez Applications > Knative dans le volet de navigation de gauche.
-
Sous l'onglet Services de la page Knative, définissez le paramètre Namespace sur default et cliquez sur Create from Template. Sélectionnez le modèle Sample Template et cliquez sur Create. Un service nommé helloworld-go est créé.

Étape 2 : Créer un secret TLS
Knative utilise les secrets Kubernetes pour stocker les certificats TLS et les clés privées. Cette étape crée un certificat auto-signé avec OpenSSL et le stocke en tant que secret nommé secret-tls.
Les certificats auto-signés conviennent uniquement aux tests. Les navigateurs ne font pas confiance aux certificats auto-signés et le certificat de cet exemple est valide pendant 3 650 jours sans renouvellement automatique. Pour les environnements de production, utilisez un certificat émis par une autorité de certification (CA) de confiance.
-
Exécutez les commandes OpenSSL suivantes pour générer une clé privée de 4 096 bits et un certificat auto-signé pour le domaine
helloworld.knative.top:openssl genrsa -out knativetop-key.pem 4096 openssl req -subj "/CN=helloworld.knative.top" -sha256 -new -key knativetop-key.pem -out knativetop.csr echo subjectAltName = DNS:helloworld.knative.top > extfile.cnf openssl x509 -req -days 3650 -sha256 -in knativetop.csr -signkey knativetop-key.pem -out knativetop-cert.pem -extfile extfile.cnfRésultat attendu :
Signature ok subject=CN = helloworld.knative.top Getting Private key -
Vérifiez le contenu encodé en Base64 de chaque fichier avant de créer le secret :
Encodez la clé privée : ``
bash cat knativetop-key.pem | base64`Résultat attendu :`a25hdGl2ZXRvcC1r******``Encodez le certificat : ``
bash cat knativetop-cert.pem | base64`Résultat attendu :`a25hdGl2ZXRvcC1jZ******==``
-
Créez le secret :
kubectl create secret tls secret-tls --key knativetop-key.pem --cert knativetop-cert.pemRésultat attendu :
secret/secret-tls created
Étape 3 : Créer un objet DomainMapping
Un objet DomainMapping est une ressource Knative qui associe un domaine personnalisé à un ou plusieurs services Knative. Le champ tls.secretName fait référence au secret créé à l'étape précédente. L'ajout de ce champ permet de basculer l'URL du service de HTTP vers HTTPS.
-
Créez un fichier nommé
helloworld.knative.top.yaml:vim helloworld.knative.top.yaml -
Ajoutez le contenu suivant, puis enregistrez et quittez :
Champ Description metadata.nameDomaine personnalisé à mapper. Il doit correspondre au domaine indiqué dans votre certificat. metadata.namespaceEspace de noms contenant à la fois l'objet DomainMapping et le service cible. spec.ref.nameNom du service Knative vers lequel acheminer le trafic. tls.secretNameNom du secret TLS. L'ajout de ce champ permet de basculer le protocole de HTTP vers HTTPS. apiVersion: serving.knative.dev/v1beta1 kind: DomainMapping metadata: name: helloworld.knative.top namespace: default spec: ref: name: helloworld-go kind: Service apiVersion: serving.knative.dev/v1 # tls block specifies the secret to be used tls: secretName: secret-tlsChamps clés :
-
Appliquez la configuration :
kubectl apply -f helloworld.knative.top.yamlRésultat attendu :
domainmapping.serving.knative.dev/helloworld.knative.top created -
Vérifiez que l'objet DomainMapping est prêt et que l'URL utilise HTTPS :
kubectl get domainmapping helloworld.knative.topRésultat attendu :
NAME URL READY REASON helloworld.knative.top https://helloworld.knative.top TrueLorsque
READYaffiche la valeurTrueet que l'URL commence parhttps://, le protocole TLS est correctement configuré.
Étape 4 : Tester l'accès HTTPS
La commande de test dépend du type d'ingress utilisé par votre cluster : ALB, MSE ou ASM.
ALB
Ajoutez un écouteur sur le port 443 dans la ressource AlbConfig. L'exemple suivant ajoute un écouteur HTTPS à la ressource knative-internet :
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: knative-internet
spec:
config:
...
listeners:
- port: 443
protocol: HTTPS # Valid values for protocol: HTTP, HTTPS, and QUIC.
...
Exécutez la commande suivante pour tester l'accès. L'option -k ignore la vérification du certificat, ce qui est requis pour les certificats auto-signés.
# Replace alb-ppcate4ox6******.cn-beijing.alb.aliyuncs.com with your ALB ingress address.
curl -H "host: helloworld.knative.top" https://alb-ppcate4ox6******.cn-beijing.alb.aliyuncs.com -k
MSE
# Replace 8.141.XX.XX with your MSE ingress address.
curl -H "host: helloworld-go.default.example.com" https://8.141.XX.XX -k
ASM
# Replace 8.141.XX.XX with your ASM ingress address.
curl -H "host: helloworld-go.default.example.com" http://8.141.XX.XX -k
Résultat attendu pour les trois cas :
Hello Knative!
Étapes suivantes
Configurez des contrôles d'intégrité pour votre service Knative : Configurer la sonde de port dans Knative
Activez l'accès Internet pour une instance de conteneur élastique en l'associant à une adresse IP élastique (EIP) : Associer une EIP à l'instance de conteneur élastique sur laquelle s'exécute un service Knative