4.7. Configurer des domaines personnalisés pour les services Knative
4.7.1. Configurer un domaine personnalisé pour un service Knative
Les services Knative se voient automatiquement attribuer un nom de domaine par défaut basé sur la configuration de votre cluster. Par exemple, <service_name>-<namespace>.example.com
. Vous pouvez personnaliser le domaine de votre service Knative en associant un nom de domaine personnalisé que vous possédez à un service Knative.
Pour ce faire, vous pouvez créer une ressource DomainMapping
pour le service. Vous pouvez également créer plusieurs ressources DomainMapping
pour associer plusieurs domaines et sous-domaines à un seul service.
4.7.2. Mappage de domaine personnalisé
Vous pouvez personnaliser le domaine de votre service Knative en mappant un nom de domaine personnalisé que vous possédez à un service Knative. Pour mapper un nom de domaine personnalisé à une ressource personnalisée (CR), vous devez créer une CR DomainMapping
qui est mappée à une CR cible adressable, telle qu'un service Knative ou une route Knative.
4.7.2.1. Créer un mappage de domaine personnalisé
Vous pouvez personnaliser le domaine de votre service Knative en mappant un nom de domaine personnalisé que vous possédez à un service Knative. Pour mapper un nom de domaine personnalisé à une ressource personnalisée (CR), vous devez créer une CR DomainMapping
qui est mappée à une CR cible adressable, telle qu'un service Knative ou une route Knative.
Conditions préalables
- L'opérateur OpenShift Serverless et Knative Serving sont installés sur votre cluster.
-
Installez le CLI OpenShift (
oc
). - Vous avez créé un projet ou avez accès à un projet avec les rôles et autorisations appropriés pour créer des applications et d'autres charges de travail dans OpenShift Container Platform.
Vous avez créé un service Knative et contrôlé un domaine personnalisé que vous souhaitez associer à ce service.
NoteVotre domaine personnalisé doit pointer vers l'adresse IP du cluster OpenShift Container Platform.
Procédure
Créez un fichier YAML contenant le CR
DomainMapping
dans le même espace de noms que le CR cible que vous souhaitez mapper :apiVersion: serving.knative.dev/v1alpha1 kind: DomainMapping metadata: name: <domain_name> 1 namespace: <namespace> 2 spec: ref: name: <target_name> 3 kind: <target_type> 4 apiVersion: serving.knative.dev/v1
Exemple de mappage de domaine de service
apiVersion: serving.knative.dev/v1alpha1 kind: DomainMapping metadata: name: example-domain namespace: default spec: ref: name: example-service kind: Service apiVersion: serving.knative.dev/v1
Exemple de mappage de domaines de routes
apiVersion: serving.knative.dev/v1alpha1 kind: DomainMapping metadata: name: example-domain namespace: default spec: ref: name: example-route kind: Route apiVersion: serving.knative.dev/v1
Appliquer le CR
DomainMapping
sous la forme d'un fichier YAML :$ oc apply -f <filename>
4.7.3. Domaines personnalisés pour les services Knative à l'aide du CLI Knative
Vous pouvez personnaliser le domaine de votre service Knative en faisant correspondre un nom de domaine personnalisé que vous possédez à un service Knative. Vous pouvez utiliser la CLI Knative (kn
) pour créer une ressource personnalisée (CR) DomainMapping
qui correspond à une CR cible adressable, telle qu'un service Knative ou une route Knative.
4.7.3.1. Créer un mappage de domaine personnalisé en utilisant le CLI Knative
Conditions préalables
- L'opérateur OpenShift Serverless et Knative Serving sont installés sur votre cluster.
Vous avez créé un service ou une route Knative, et vous contrôlez un domaine personnalisé que vous souhaitez associer à ce CR.
NoteVotre domaine personnalisé doit pointer vers le DNS du cluster OpenShift Container Platform.
-
Vous avez installé le CLI Knative (
kn
). - Vous avez créé un projet ou avez accès à un projet avec les rôles et autorisations appropriés pour créer des applications et d'autres charges de travail dans OpenShift Container Platform.
Procédure
Associe un domaine à un CR dans l'espace de noms actuel :
kn domain create <domain_mapping_name> --ref <target_name>
Example command
$ kn domain create example-domain-map --ref example-service
L'indicateur
--ref
spécifie un CR cible adressable pour le mappage de domaine.Si aucun préfixe n'est fourni lors de l'utilisation de l'indicateur
--ref
, il est supposé que la cible est un service Knative dans l'espace de noms actuel.Associer un domaine à un service Knative dans un espace de noms spécifié :
kn domain create <domain_mapping_name> --ref <ksvc:service_name:service_namespace>
Example command
$ kn domain create example-domain-map --ref ksvc:example-service:example-namespace
Associer un domaine à une route Knative :
$ kn domain create <domain_mapping_name> --ref <kroute:route_name>
Example command
$ kn domain create example-domain-map --ref kroute:example-route
4.7.4. Cartographie des domaines selon la perspective du développeur
Vous pouvez personnaliser le domaine de votre service Knative en mappant un nom de domaine personnalisé que vous possédez à un service Knative. Vous pouvez utiliser la perspective Developer de la console web OpenShift Container Platform pour mapper une ressource personnalisée (CR) DomainMapping
à un service Knative.
4.7.4.1. Mapper un domaine personnalisé à un service en utilisant la perspective du développeur
Conditions préalables
- Vous vous êtes connecté à la console web.
- Vous êtes dans la perspective Developer.
- OpenShift Serverless Operator et Knative Serving sont installés sur votre cluster. Cette opération doit être réalisée par un administrateur de cluster.
- Vous avez créé un projet ou avez accès à un projet avec les rôles et autorisations appropriés pour créer des applications et d'autres charges de travail dans OpenShift Container Platform.
Vous avez créé un service Knative et contrôlé un domaine personnalisé que vous souhaitez associer à ce service.
NoteVotre domaine personnalisé doit pointer vers l'adresse IP du cluster OpenShift Container Platform.
Procédure
- Naviguez jusqu'à la page Topology.
-
Cliquez avec le bouton droit de la souris sur le service que vous voulez mapper à un domaine, et sélectionnez l'option Edit qui contient le nom du service. Par exemple, si le service s'appelle
example-service
, sélectionnez l'option Edit example-service. Dans la section Advanced options, cliquez sur Show advanced Routing options.
- Si le CR de mappage de domaine que vous souhaitez mapper au service existe déjà, vous pouvez le sélectionner dans la liste Domain mapping.
-
Si vous voulez créer un nouveau CR de mappage de domaine, tapez le nom de domaine dans la case et sélectionnez l'option Create. Par exemple, si vous tapez
example.com
, l'option Create est Create "example.com".
- Cliquez sur Save pour enregistrer les modifications apportées à votre service.
Vérification
- Naviguez jusqu'à la page Topology.
- Cliquez sur le service que vous avez créé.
- Dans l'onglet Resources de la fenêtre d'information sur le service, vous pouvez voir le domaine que vous avez mappé au service listé sous Domain mappings.
4.7.5. Mappage de domaines à l'aide de la perspective de l'administrateur
Si vous ne souhaitez pas passer à la perspective Developer dans la console web d'OpenShift Container Platform ou utiliser le CLI Knative (kn
) ou les fichiers YAML, vous pouvez utiliser la perspective Administator de la console web d'OpenShift Container Platform.
4.7.5.1. Mapper un domaine personnalisé à un service en utilisant la perspective de l'administrateur
Les services Knative se voient automatiquement attribuer un nom de domaine par défaut basé sur la configuration de votre cluster. Par exemple, <service_name>-<namespace>.example.com
. Vous pouvez personnaliser le domaine de votre service Knative en associant un nom de domaine personnalisé que vous possédez à un service Knative.
Pour ce faire, vous pouvez créer une ressource DomainMapping
pour le service. Vous pouvez également créer plusieurs ressources DomainMapping
pour associer plusieurs domaines et sous-domaines à un seul service.
Si vous disposez des droits d'administrateur de cluster, vous pouvez créer une ressource personnalisée (CR) DomainMapping
en utilisant la perspective Administrator dans la console Web d'OpenShift Container Platform.
Conditions préalables
- Vous vous êtes connecté à la console web.
- Vous êtes dans la perspective Administrator.
- Vous avez installé OpenShift Serverless Operator.
- Vous avez installé Knative Serving.
- Vous avez créé un projet ou avez accès à un projet avec les rôles et autorisations appropriés pour créer des applications et d'autres charges de travail dans OpenShift Container Platform.
Vous avez créé un service Knative et contrôlé un domaine personnalisé que vous souhaitez associer à ce service.
NoteVotre domaine personnalisé doit pointer vers l'adresse IP du cluster OpenShift Container Platform.
Procédure
- Naviguez jusqu'à CustomResourceDefinitions et utilisez la boîte de recherche pour trouver la définition de ressource personnalisée (CRD) DomainMapping.
- Cliquez sur le CRD DomainMapping, puis naviguez jusqu'à l'onglet Instances.
- Cliquez sur Create DomainMapping.
Modifiez le YAML pour le CR
DomainMapping
afin qu'il inclue les informations suivantes pour votre instance :apiVersion: serving.knative.dev/v1alpha1 kind: DomainMapping metadata: name: <domain_name> 1 namespace: <namespace> 2 spec: ref: name: <target_name> 3 kind: <target_type> 4 apiVersion: serving.knative.dev/v1
Exemple de mappage d'un domaine vers un service Knative
apiVersion: serving.knative.dev/v1alpha1 kind: DomainMapping metadata: name: custom-ksvc-domain.example.com namespace: default spec: ref: name: example-service kind: Service apiVersion: serving.knative.dev/v1
Vérification
Accédez au domaine personnalisé en utilisant une requête
curl
. Par exemple, il est possible d'accéder au domaine personnalisé en utilisant une requête :Example command
$ curl custom-ksvc-domain.example.com
Exemple de sortie
Hello OpenShift!
4.7.6. Sécurisation d'un service mappé à l'aide d'un certificat TLS
4.7.6.1. Sécuriser un service avec un domaine personnalisé en utilisant un certificat TLS
Après avoir configuré un domaine personnalisé pour un service Knative, vous pouvez utiliser un certificat TLS pour sécuriser le service mappé. Pour ce faire, vous devez créer un secret TLS Kubernetes, puis mettre à jour le CR DomainMapping
pour utiliser le secret TLS que vous avez créé.
Si vous utilisez net-istio
pour Ingress et activez mTLS via SMCP en utilisant security.dataPlane.mtls: true
, Service Mesh déploie DestinationRules
pour l'hôte *.local
, ce qui n'autorise pas DomainMapping
pour OpenShift Serverless.
Pour contourner ce problème, activez mTLS en déployant PeerAuthentication
au lieu d'utiliser security.dataPlane.mtls: true
.
Conditions préalables
-
Vous avez configuré un domaine personnalisé pour un service Knative et vous disposez d'un CR
DomainMapping
fonctionnel. - Vous disposez d'un certificat TLS délivré par votre autorité de certification ou d'un certificat auto-signé.
-
Vous avez obtenu les fichiers
cert
etkey
auprès du fournisseur de votre autorité de certification, ou un certificat auto-signé. -
Installez le CLI OpenShift (
oc
).
Procédure
Créez un secret TLS Kubernetes :
$ oc create secret tls <tls_secret_name> --cert=<path_to_certificate_file> --key=<path_to_key_file>
Ajoutez le label
networking.internal.knative.dev/certificate-uid: <id>`
au secret TLS de Kubernetes :$ oc label secret <tls_secret_name> networking.internal.knative.dev/certificate-uid="<id>"
Si vous utilisez un fournisseur de secret tiers tel que cert-manager, vous pouvez configurer votre gestionnaire de secret pour étiqueter automatiquement le secret TLS de Kubernetes. Les utilisateurs de Cert-manager peuvent utiliser le modèle de secret proposé pour générer automatiquement des secrets avec l'étiquette correcte. Dans ce cas, le filtrage des secrets est effectué sur la base de la clé uniquement, mais cette valeur peut contenir des informations utiles telles que l'ID du certificat que le secret contient.
NoteL'opérateur cert-manager pour Red Hat OpenShift est une fonctionnalité de l'aperçu technologique. Pour plus d'informations, consultez la documentation Installing the cert-manager Operator for Red Hat OpenShift.
Mettez à jour le CR
DomainMapping
pour utiliser le secret TLS que vous avez créé :apiVersion: serving.knative.dev/v1alpha1 kind: DomainMapping metadata: name: <domain_name> namespace: <namespace> spec: ref: name: <service_name> kind: Service apiVersion: serving.knative.dev/v1 # TLS block specifies the secret to be used tls: secretName: <tls_secret_name>
Vérification
Vérifiez que l'état de la CR
DomainMapping
estTrue
et que la colonneURL
de la sortie indique le domaine mappé avec le schémahttps
:oc get domainmapping <domain_name>
Exemple de sortie
NAME URL READY REASON example.com https://example.com True
Facultatif : si le service est exposé publiquement, vérifiez qu'il est disponible en exécutant la commande suivante :
$ curl https://<domain_name>
Si le certificat est auto-signé, passez la vérification en ajoutant le drapeau
-k
à la commandecurl
.
4.7.6.2. Amélioration de l'utilisation de la mémoire du net-kourier par l'utilisation du filtrage secret
Par défaut, l'implémentation des informateurs pour la bibliothèque Kubernetes client-go
récupère toutes les ressources d'un type particulier. Cela peut entraîner une surcharge substantielle lorsque de nombreuses ressources sont disponibles, ce qui peut faire échouer le contrôleur d'entrée Knative net-kourier
sur les grands clusters en raison de fuites de mémoire. Cependant, un mécanisme de filtrage est disponible pour le contrôleur d'entrée Knative net-kourier
, ce qui permet au contrôleur de ne récupérer que les secrets liés à Knative. Vous pouvez activer ce mécanisme en définissant une variable d'environnement pour la ressource personnalisée (CR) KnativeServing
.
Si vous activez le filtrage des secrets, tous vos secrets doivent être étiquetés avec networking.internal.knative.dev/certificate-uid: "<id>"
. Sinon, Knative Serving ne les détecte pas, ce qui entraîne des échecs. Vous devez étiqueter à la fois les nouveaux secrets et les secrets existants.
Conditions préalables
- Vous avez accès à un compte OpenShift Container Platform avec un accès administrateur de cluster.
- Un projet que vous avez créé ou pour lequel vous avez des rôles et des permissions afin de créer des applications et d'autres charges de travail dans OpenShift Container Platform.
- Installez OpenShift Serverless Operator et Knative Serving.
-
Installez le CLI OpenShift (
oc
).
Procédure
Définissez la variable
ENABLE_SECRET_INFORMER_FILTERING_BY_CERT_UID
àtrue
pournet-kourier-controller
dans le CRKnativeServing
:Exemple KnativeServing CR
apiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving namespace: knative-serving spec: deployments: - env: - container: controller envVars: - name: ENABLE_SECRET_INFORMER_FILTERING_BY_CERT_UID value: 'true' name: net-kourier-controller