Pour utiliser un nom de domaine personnalisé avec un service Knative, nous vous recommandons de configurer un certificat HTTPS afin de sécuriser la transmission des données. Knative permet de spécifier ce certificat via un objet DomainMapping, qui associe le service Knative au nom de domaine personnalisé de manière sécurisée.
Prérequis
Knative est déployé dans votre cluster ACS. Pour plus d'informations, consultez la rubrique Déployer Knative.
Étape 1 : Créer un service Knative
Connectez-vous à la console Container Compute Service (ACS). Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom du cluster cible. Dans le volet de navigation de gauche de la page des détails du cluster, choisissez Applications > Knative.
Dans l'onglet Services de la page Knative, définissez le paramètre Namespace sur default, puis cliquez sur Create from Template pour créer un service Knative (le service
helloworld-go) à partir du modèle d'exemple disponible dans la console. Suivez les instructions pour finaliser la création. Une fois le service créé, son statut s'affiche comme réussi dans l'onglet Services et son nom de domaine par défaut esthelloworld-go.default.example.com. Avant d'accéder au service, vous devez lier le nom de domaine d'accès à la passerelle ingress en tant qu'hôte.
Étape 2 : Configurer le service HTTPS
La méthode de configuration HTTPS dépend du type de passerelle utilisé :
Passerelle ALB : Les certificats sont gérés de manière centralisée par AlbConfig. Vous activez TLS à l'aide d'une annotation, sans manipuler manuellement les fichiers de certificat.
Passerelle Kourier : Vous devez créer manuellement un Secret contenant le certificat, puis lier ce Secret au nom de domaine à l'aide d'un objet DomainMapping.
ALB
Spécifiez un certificat dans l'AlbConfig et activez l'accès TLS dans le service Knative en utilisant l'annotation knative.k8s.alibabacloud/tls: "true". Voir l'exemple ci-dessous.
Pour activer l'accès HTTPS, ajoutez l'annotation TLS au service Knative et configurez un écouteur sur le port 443 dans l'AlbConfig.
-
Ajoutez l'annotation
knative.k8s.alibabacloud/tls: "true"au fichier YAML du service Knative.apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld namespace: default annotations: knative.k8s.alibabacloud/tls: "true" spec: template: spec: containers: - image: registry-vpc.cn-shenzhen.aliyuncs.com/knative-sample/helloworld-go:73fbdd56 # Replace the region with the region that you actually use. env: - name: TARGET value: "Knative" -
Ajoutez un écouteur sur le port 443 dans l'AlbConfig (par exemple,
knative-internet) pour acheminer le trafic HTTPS vers le cluster.apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: knative-internet spec: config: ... listeners: - port: 443 # Valid values: HTTP, HTTPS, QUIC protocol: HTTPS ... -
Vérifiez que le service est accessible via HTTPS.
# Replace alb-ppcate4ox6******.cn-beijing.alb.aliyuncs.com with your ALB gateway address. curl -H "Host: helloworld.knative.top" https://alb-ppcate4ox6******.cn-beijing.alb.aliyuncs.com -kRésultat attendu :
Hello Knative!
Kourier
La passerelle Kourier ne propose pas de gestion native des certificats. Stockez d'abord le certificat TLS dans le cluster sous forme de Secret. Une fois le Secret prêt, liez le nom de domaine au certificat à l'aide d'un objet DomainMapping.
1. Créer un Secret de certificat
L'exemple suivant utilise un certificat HTTPS auto-signé généré avec OpenSSL. Si vous disposez déjà de fichiers de certificat au format .pem, ignorez l'étape 1 et commencez directement à l'étape 2.
Les certificats auto-signés sont destinés uniquement aux tests. Dans les environnements de production, nous vous recommandons d'utiliser des certificats émis par une autorité de certification (CA).
-
Créez un certificat auto-signé à l'aide d'OpenSSL.
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 -
Encodez en Base64 les fichiers
knativetop-key.pemetknativetop-cert.pemcréés à l'étape 1.-
Encodez en Base64 le fichier
knativetop-key.pem.cat knativetop-key.pem | base64Résultat attendu :
a25hdGl2ZXRvcC1r****** -
Encodez en Base64 le fichier
knativetop-cert.pem.cat knativetop-cert.pem | base64Résultat attendu :
a25hdGl2ZXRvcC1jZ******==
-
-
Créez le Secret. Ce Secret sera utilisé dans la configuration TLS du service Knative pour permettre un accès sécurisé au nom de domaine
helloworld.knative.top.kubectl create secret tls secret-tls --key knativetop-key.pem --cert knativetop-cert.pemRésultat attendu :
secret/secret-tls created
2. Créer un objet DomainMapping
Dans Knative, un objet DomainMapping est une ressource qui associe un nom de domaine à un ou plusieurs services Knative. Une fois le Secret prêt, utilisez un objet DomainMapping pour lier le nom de domaine personnalisé au service Knative, en référençant le Secret précédemment créé pour activer le chiffrement TLS.
-
Créez le fichier
helloworld.knative.top.yamlavec le contenu suivant.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 # The tls block specifies the secret to be used. tls: secretName: secret-tls -
Appliquez l'objet DomainMapping au cluster.
kubectl apply -f helloworld.knative.top.yamlRésultat attendu :
domainmapping.serving.knative.dev/helloworld.knative.top created -
Exécutez la commande suivante pour vérifier que l'objet DomainMapping est prêt.
kubectl get domainmapping helloworld.knative.topRésultat attendu :
NAME URL READY REASON helloworld.knative.top https://helloworld.knative.top True -
Vérifiez que le service est accessible via le nom de domaine personnalisé.
# 8.141.XX.XX is the Kourier gateway address. curl -H "Host: helloworld-go.default.example.com" http://8.141.XX.XX -kRésultat attendu :
Hello Knative!