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.

    Note

    Votre domaine personnalisé doit pointer vers l'adresse IP du cluster OpenShift Container Platform.

Procédure

  1. 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
    1
    Le nom de domaine personnalisé que vous souhaitez associer au CR cible.
    2
    L'espace de noms du CR DomainMapping et du CR cible.
    3
    Le nom du CR cible à mettre en correspondance avec le domaine personnalisé.
    4
    Le type de CR mappé au domaine personnalisé.

    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

  2. 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.

    Note

    Votre 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.

    Note

    Votre domaine personnalisé doit pointer vers l'adresse IP du cluster OpenShift Container Platform.

Procédure

  1. Naviguez jusqu'à la page Topology.
  2. 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.
  3. Dans la section Advanced options, cliquez sur Show advanced Routing options.

    1. 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.
    2. 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".
  4. Cliquez sur Save pour enregistrer les modifications apportées à votre service.

Vérification

  1. Naviguez jusqu'à la page Topology.
  2. Cliquez sur le service que vous avez créé.
  3. 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.

    Note

    Votre domaine personnalisé doit pointer vers l'adresse IP du cluster OpenShift Container Platform.

Procédure

  1. Naviguez jusqu'à CustomResourceDefinitions et utilisez la boîte de recherche pour trouver la définition de ressource personnalisée (CRD) DomainMapping.
  2. Cliquez sur le CRD DomainMapping, puis naviguez jusqu'à l'onglet Instances.
  3. Cliquez sur Create DomainMapping.
  4. 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
    1
    Le nom de domaine personnalisé que vous souhaitez associer au CR cible.
    2
    L'espace de noms du CR DomainMapping et du CR cible.
    3
    Le nom du CR cible à mettre en correspondance avec le domaine personnalisé.
    4
    Le type de CR mappé au domaine personnalisé.

    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éé.

Note

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 et key auprès du fournisseur de votre autorité de certification, ou un certificat auto-signé.
  • Installez le CLI OpenShift (oc).

Procédure

  1. Créez un secret TLS Kubernetes :

    $ oc create secret tls <tls_secret_name> --cert=<path_to_certificate_file> --key=<path_to_key_file>
  2. 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.

    Note

    L'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.

  3. 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

  1. Vérifiez que l'état de la CR DomainMapping est True et que la colonne URL de la sortie indique le domaine mappé avec le schéma https:

    oc get domainmapping <domain_name>

    Exemple de sortie

    NAME                      URL                               READY   REASON
    example.com               https://example.com               True

  2. 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 commande curl.

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.

Important

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 pour net-kourier-controller dans le CR KnativeServing:

    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

Red Hat logoGithubRedditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez leBlog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

© 2024 Red Hat, Inc.