4.3. Configuration des applications sans serveur


4.3.1. Remplacer les configurations de déploiement du système Knative Serving

Vous pouvez remplacer les configurations par défaut pour certains déploiements spécifiques en modifiant la spécification deployments dans les ressources personnalisées (CR) KnativeServing.

Note

Vous ne pouvez remplacer que les sondes définies par défaut dans le déploiement.

Tous les déploiements de Knative Serving définissent par défaut une sonde de préparation et une sonde de disponibilité, à ces exceptions près :

  • net-kourier-controller et 3scale-kourier-gateway ne définissent qu'une sonde de préparation.
  • net-istio-controller et net-istio-webhook ne définissent pas de sondes.

4.3.1.1. Remplacer les configurations de déploiement du système

Actuellement, le remplacement des paramètres de configuration par défaut est possible pour les champs resources, replicas, labels, annotations et nodeSelector, ainsi que pour les champs readiness et liveness pour les sondes.

Dans l'exemple suivant, une CR KnativeServing remplace le déploiement webhook de sorte que :

  • Le délai d'attente de la sonde readiness pour net-kourier-controller est fixé à 10 secondes.
  • Le déploiement a spécifié des limites de ressources de CPU et de mémoire.
  • Le déploiement comporte 3 répliques.
  • L'étiquette example-label: label est ajoutée.
  • L'annotation example-annotation: annotation est ajoutée.
  • Le champ nodeSelector est défini pour sélectionner les nœuds portant l'étiquette disktype: hdd.
Note

Les paramètres d'étiquetage et d'annotation de KnativeServing CR remplacent les étiquettes et les annotations du déploiement, tant pour le déploiement lui-même que pour les pods qui en résultent.

Exemple de CR KnativeServing

apiVersion: operator.knative.dev/v1beta1
kind: KnativeServing
metadata:
  name: ks
  namespace: knative-serving
spec:
  high-availability:
    replicas: 2
  deployments:
  - name: net-kourier-controller
    readinessProbes: 1
      - container: controller
        timeoutSeconds: 10
  - name: webhook
    resources:
    - container: webhook
      requests:
        cpu: 300m
        memory: 60Mi
      limits:
        cpu: 1000m
        memory: 1000Mi
    replicas: 3
    labels:
      example-label: label
    annotations:
      example-annotation: annotation
    nodeSelector:
      disktype: hdd

1
Vous pouvez utiliser les surcharges de sonde readiness et liveness pour remplacer tous les champs d'une sonde dans un conteneur d'un déploiement comme spécifié dans l'API Kubernetes, à l'exception des champs liés au gestionnaire de la sonde : exec, grpc, httpGet, et tcpSocket.

4.3.2. Prise en charge de plusieurs conteneurs pour le service

Vous pouvez déployer un pod multi-conteneurs en utilisant un seul service Knative. Cette méthode est utile pour séparer les responsabilités de l'application en parties plus petites et spécialisées.

Important

La prise en charge de plusieurs conteneurs pour Serving est une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes d'un point de vue fonctionnel. Red Hat ne recommande pas de les utiliser en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.

Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.

4.3.2.1. Configuration d'un service multi-conteneurs

La prise en charge de plusieurs conteneurs est activée par défaut. Vous pouvez créer un pod multi-conteneurs en spécifiant plusieurs conteneurs dans le service.

Procédure

  1. Modifiez votre service pour inclure des conteneurs supplémentaires. Un seul conteneur peut traiter les requêtes, il faut donc spécifier ports pour un seul conteneur. Voici un exemple de configuration avec deux conteneurs :

    Configuration de plusieurs conteneurs

    apiVersion: serving.knative.dev/v1
    kind: Service
    ...
    spec:
      template:
        spec:
          containers:
            - name: first-container 1
              image: gcr.io/knative-samples/helloworld-go
              ports:
                - containerPort: 8080 2
            - name: second-container 3
              image: gcr.io/knative-samples/helloworld-java

    1
    Première configuration du conteneur.
    2
    Spécification du port pour le premier conteneur.
    3
    Deuxième configuration du conteneur.

4.3.3. Volumes EmptyDir

emptyDir les volumes emptyDir sont des volumes vides créés lors de la création d'un pod et utilisés pour fournir un espace disque de travail temporaire. Les volumes sont supprimés lorsque le pod pour lequel ils ont été créés est supprimé.

4.3.3.1. Configuration de l'extension EmptyDir

L'extension kubernetes.podspec-volumes-emptydir contrôle si les volumes emptyDir peuvent être utilisés avec Knative Serving. Pour permettre l'utilisation des volumes emptyDir, vous devez modifier la ressource personnalisée (CR) KnativeServing pour inclure le YAML suivant :

Exemple KnativeServing CR

apiVersion: operator.knative.dev/v1beta1
kind: KnativeServing
metadata:
  name: knative-serving
spec:
  config:
    features:
      kubernetes.podspec-volumes-emptydir: enabled
...

4.3.4. Réclamations de volumes persistants pour la mise en service

Certaines applications sans serveur ont besoin d'un stockage permanent des données. Pour y parvenir, vous pouvez configurer des réclamations de volumes persistants (PVC) pour vos services Knative.

4.3.4.1. Activation de la prise en charge du PVC

Procédure

  1. Pour permettre à Knative Serving d'utiliser les PVC et d'y écrire, modifiez la ressource personnalisée (CR) KnativeServing pour inclure le YAML suivant :

    Activation des PVC avec accès en écriture

    ...
    spec:
      config:
        features:
          "kubernetes.podspec-persistent-volume-claim": enabled
          "kubernetes.podspec-persistent-volume-write": enabled
    ...

    • L'extension kubernetes.podspec-persistent-volume-claim détermine si les volumes persistants (PV) peuvent être utilisés avec Knative Serving.
    • L'extension kubernetes.podspec-persistent-volume-write détermine si les PV sont disponibles pour Knative Serving avec l'accès en écriture.
  2. Pour réclamer un PV, modifiez votre service pour inclure la configuration du PV. Par exemple, vous pouvez avoir une demande de volume persistant avec la configuration suivante :

    Note

    Utilisez la classe de stockage qui prend en charge le mode d'accès que vous demandez. Par exemple, vous pouvez utiliser la classe ocs-storagecluster-cephfs pour le mode d'accès ReadWriteMany.

    Configuration de PersistentVolumeClaim

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: example-pv-claim
      namespace: my-ns
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: ocs-storagecluster-cephfs
      resources:
        requests:
          storage: 1Gi

    Dans ce cas, pour réclamer un PV avec accès en écriture, modifiez votre service comme suit :

    Configuration du service Knative PVC

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      namespace: my-ns
    ...
    spec:
     template:
       spec:
         containers:
             ...
             volumeMounts: 1
               - mountPath: /data
                 name: mydata
                 readOnly: false
         volumes:
           - name: mydata
             persistentVolumeClaim: 2
               claimName: example-pv-claim
               readOnly: false 3

    1
    Spécification de montage de volume.
    2
    Spécification de la demande de volume persistant.
    3
    Indicateur permettant l'accès en lecture seule.
    Note

    Pour utiliser avec succès le stockage persistant dans les services Knative, vous avez besoin d'une configuration supplémentaire, telle que les autorisations de l'utilisateur du conteneur Knative.

4.3.4.2. Ressources supplémentaires

4.3.5. Init containers

Les conteneurs d'initialisation sont des conteneurs spécialisés qui sont exécutés avant les conteneurs d'application dans un pod. Ils sont généralement utilisés pour mettre en œuvre la logique d'initialisation d'une application, ce qui peut inclure l'exécution de scripts d'installation ou le téléchargement des configurations requises. Vous pouvez activer l'utilisation de conteneurs d'initialisation pour les services Knative en modifiant la ressource personnalisée (CR) KnativeServing.

Note

Les conteneurs Init peuvent entraîner des temps de démarrage d'application plus longs et doivent être utilisés avec prudence pour les applications sans serveur, qui sont censées évoluer fréquemment à la hausse et à la baisse.

4.3.5.1. Activation des conteneurs init

Conditions préalables

  • Vous avez installé OpenShift Serverless Operator et Knative Serving sur votre cluster.
  • Vous avez des droits d'administrateur de cluster.

Procédure

  • Activez l'utilisation des conteneurs init en ajoutant le drapeau kubernetes.podspec-init-containers au CR KnativeServing:

    Exemple KnativeServing CR

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeServing
    metadata:
      name: knative-serving
    spec:
      config:
        features:
          kubernetes.podspec-init-containers: enabled
    ...

4.3.6. Transformer les balises d'images en condensés

Si le contrôleur Knative Serving a accès au registre des conteneurs, Knative Serving résout les balises d'image en un condensé lorsque vous créez une révision d'un service. Ceci est connu sous le nom de tag-to-digest resolution, et permet d'assurer la cohérence des déploiements.

4.3.6.1. Résolution Tag-to-digest

Pour donner au contrôleur l'accès au registre des conteneurs sur OpenShift Container Platform, vous devez créer un secret et ensuite configurer les certificats personnalisés du contrôleur. Vous pouvez configurer les certificats personnalisés du contrôleur en modifiant la spécification controller-custom-certs dans la ressource personnalisée (CR) KnativeServing. Le secret doit résider dans le même espace de noms que la CR KnativeServing.

Si un secret n'est pas inclus dans le CR KnativeServing, ce paramètre utilise par défaut l'infrastructure à clé publique (PKI). Lors de l'utilisation de l'ICP, les certificats de l'ensemble du cluster sont automatiquement injectés dans le contrôleur Knative Serving à l'aide de la carte de configuration config-service-sa. L'OpenShift Serverless Operator remplit la carte de configuration config-service-sa avec les certificats de l'ensemble du cluster et monte la carte de configuration en tant que volume sur le contrôleur.

4.3.6.1.1. Configuration de la résolution tag-to-digest par l'utilisation d'un secret

Si la spécification controller-custom-certs utilise le type Secret, le secret est monté en tant que volume secret. Les composants Knative consomment le secret directement, en supposant que le secret possède les certificats requis.

Conditions préalables

  • Vous disposez des droits d'administrateur de cluster sur OpenShift Container Platform.
  • Vous avez installé OpenShift Serverless Operator et Knative Serving sur votre cluster.

Procédure

  1. Créez un secret :

    Example command

    oc -n knative-serving create secret generic custom-secret --from-file=<secret_name>.crt=<path_to_certificate>

  2. Configurez la spécification controller-custom-certs dans la ressource personnalisée (CR) KnativeServing pour utiliser le type Secret:

    Exemple KnativeServing CR

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeServing
    metadata:
      name: knative-serving
      namespace: knative-serving
    spec:
      controller-custom-certs:
        name: custom-secret
        type: Secret

4.3.7. Configuration de l'authentification TLS

Vous pouvez utiliser Transport Layer Security (TLS) pour crypter le trafic Knative et pour l'authentification.

TLS est la seule méthode de cryptage du trafic prise en charge pour Knative Kafka. Red Hat recommande d'utiliser à la fois SASL et TLS pour le courtier Knative pour les ressources Apache Kafka.

Note

Si vous souhaitez activer TLS interne avec une intégration Red Hat OpenShift Service Mesh, vous devez activer Service Mesh avec mTLS au lieu du chiffrement interne expliqué dans la procédure suivante. Voir la documentation pour l'activation des métriques Knative Serving lors de l'utilisation de Service Mesh avec mTLS.

4.3.7.1. Activation de l'authentification TLS pour le trafic interne

OpenShift Serverless prend en charge la terminaison TLS par défaut, de sorte que le trafic HTTPS des utilisateurs finaux est chiffré. Cependant, le trafic interne derrière la route OpenShift est transmis aux applications en utilisant des données en clair. En activant TLS pour le trafic interne, le trafic envoyé entre les composants est chiffré, ce qui rend ce trafic plus sûr.

Note

Si vous souhaitez activer TLS interne avec une intégration Red Hat OpenShift Service Mesh, vous devez activer Service Mesh avec mTLS au lieu du chiffrement interne expliqué dans la procédure suivante.

Important

La prise en charge du cryptage TLS interne est une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas de les utiliser en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.

Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.

Conditions préalables

  • Vous avez installé OpenShift Serverless Operator et Knative Serving.
  • Vous avez installé le CLI OpenShift (oc).

Procédure

  1. Créer un service Knative qui inclut le champ internal-encryption: "true" dans la spécification :

    ...
    spec:
      config:
        network:
          internal-encryption: "true"
    ...
  2. Redémarrez les pods activateurs dans l'espace de noms knative-serving pour charger les certificats :

    $ oc delete pod -n knative-serving --selector app=activator

4.3.8. Politiques de réseau restrictives

4.3.8.1. Clusters avec des politiques de réseau restrictives

Si vous utilisez un cluster auquel plusieurs utilisateurs ont accès, votre cluster peut utiliser des stratégies de réseau pour contrôler quels pods, services et espaces de noms peuvent communiquer les uns avec les autres sur le réseau. Si votre cluster utilise des stratégies de réseau restrictives, il est possible que les pods du système Knative ne puissent pas accéder à votre application Knative. Par exemple, si votre espace de noms a la politique de réseau suivante, qui refuse toutes les demandes, les pods du système Knative ne peuvent pas accéder à votre application Knative :

Exemple d'objet NetworkPolicy qui refuse toutes les demandes d'accès à l'espace de noms

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: deny-by-default
  namespace: example-namespace
spec:
  podSelector:
  ingress: []

4.3.8.2. Permettre la communication avec les applications Knative sur un cluster avec des politiques de réseau restrictives

Pour permettre l'accès à vos applications à partir des pods du système Knative, vous devez ajouter un label à chacun des espaces de noms du système Knative, puis créer un objet NetworkPolicy dans l'espace de noms de votre application qui autorise l'accès à l'espace de noms pour d'autres espaces de noms qui ont ce label.

Important

Une politique de réseau qui refuse les demandes de services non Knative sur votre cluster empêche toujours l'accès à ces services. Cependant, en autorisant l'accès à votre application Knative à partir des espaces de noms du système Knative, vous autorisez l'accès à votre application Knative à partir de tous les espaces de noms du cluster.

Si vous ne souhaitez pas autoriser l'accès à votre application Knative à partir de tous les espaces de noms du cluster, vous pouvez utiliser JSON Web Token authentication for Knative services à la place. L'authentification par jeton Web JSON pour les services Knative nécessite Service Mesh.

Conditions préalables

  • Installez le CLI OpenShift (oc).
  • OpenShift Serverless Operator et Knative Serving sont installés sur votre cluster.

Procédure

  1. Ajoutez l'étiquette knative.openshift.io/system-namespace=true à chaque espace de noms du système Knative qui nécessite un accès à votre application :

    1. Étiqueter l'espace de noms knative-serving:

      $ oc label namespace knative-serving knative.openshift.io/system-namespace=true
    2. Étiqueter l'espace de noms knative-serving-ingress:

      $ oc label namespace knative-serving-ingress knative.openshift.io/system-namespace=true
    3. Étiqueter l'espace de noms knative-eventing:

      $ oc label namespace knative-eventing knative.openshift.io/system-namespace=true
    4. Étiqueter l'espace de noms knative-kafka:

      $ oc label namespace knative-kafka knative.openshift.io/system-namespace=true
  2. Créez un objet NetworkPolicy dans l'espace de noms de votre application afin d'autoriser l'accès à partir des espaces de noms portant l'étiquette knative.openshift.io/system-namespace:

    Exemple d'objet NetworkPolicy

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: <network_policy_name> 1
      namespace: <namespace> 2
    spec:
      ingress:
      - from:
        - namespaceSelector:
            matchLabels:
              knative.openshift.io/system-namespace: "true"
      podSelector: {}
      policyTypes:
      - Ingress

    1
    Donnez un nom à votre politique de réseau.
    2
    L'espace de noms dans lequel votre application existe.
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.