Configuration du contrôleur d'entrée natif OCI sur le moteur Kubernetes OCI avec des noeuds virtuels

Introduction

Ce tutoriel parcourt le processus de configuration du contrôleur d'entrée natif Oracle Cloud Infrastructure (OCI) sur Oracle Cloud Infrastructure Kubernetes Engine (OKE) avec un pool de noeuds virtuels. Les noeuds virtuels sont différents des noeuds de processus actif standard basés sur une instance, car il s'agit d'une solution sans serveur qui élimine les instances de calcul sous-jacentes. Contrairement aux nœuds de travail traditionnels, qui reposent sur des instances de machine virtuelle spécifiques, les nœuds virtuels évoluent dynamiquement en fonction des demandes de charge de travail et ne nécessitent pas de gestion manuelle de l'infrastructure sous-jacente. Elles sont donc idéales pour les charges de travail nécessitant une mise à l'échelle automatique et une réduction de la surcharge opérationnelle.

Dans ce tutoriel, nous allons configurer le contrôleur d'entrée natif OCI sur OKE à l'aide de noeuds virtuels. Nous allons configurer des stratégies d'identité de charge globale, activer l'extension entrante et déployer des ressources entrantes avec des manifestes Kubernetes.

En suivant ces tâches, vous pouvez exposer vos applications et gérer le trafic entrant à l'aide des fonctionnalités d'OCI Load Balancer, le tout en tirant parti de la simplicité opérationnelle des noeuds virtuels. Cette configuration rationalise la gestion du trafic et prend en charge les charges de travail de production de manière évolutive et rentable.

Objectifs

Tâche 1 : créer une stratégie de principal d'identité de charge globale

Avant d'activer le contrôleur d'entrée natif OCI, créez une stratégie de principal d'identité de charge globale. Les noeuds virtuels sont sans serveur et n'utilisent pas les instances OCI Compute. Ils nécessitent donc une identité de charge globale au lieu des principaux d'instance. Cette stratégie permet au contrôleur entrant de gérer les ressources de votre compartiment.

  1. Accédez à la console OCI, accédez à Identité et sécurité, à Identité et cliquez sur Stratégies.

  2. Créez une stratégie et entrez son nom. Pour plus d'informations, reportez-vous à Création d'une stratégie à l'aide de la console OCI.

  3. Cliquez sur Afficher l'éditeur manuel et entrez les instructions de stratégie suivantes, en remplaçant location et cluster-ocid par vos valeurs spécifiques.

    Remarque :

    • <location> doit être remplacé par le compartiment dans lequel se trouvent vos ressources.
    • <cluster-ocid> doit être remplacé par l'OCID de votre cluster OKE.
    Allow any-user to manage load-balancers in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'}
    
    Allow any-user to use virtual-network-family in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'}
    
    Allow any-user to manage cabundles in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'}
    
    Allow any-user to manage cabundle-associations in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'}
    
    Allow any-user to manage leaf-certificates in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'}
    
    Allow any-user to read leaf-certificate-bundles in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'}
    
    Allow any-user to manage leaf-certificate-versions in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'}
    
    Allow any-user to manage certificate-associations in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'}
    
    Allow any-user to read certificate-authorities in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'}
    
    Allow any-user to manage certificate-authority-associations in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'}
    
    Allow any-user to read certificate-authority-bundles in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'}
    
    Allow any-user to read public-ips in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'}
    
    Allow any-user to manage floating-ips in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'}
    
    Allow any-user to manage waf-family in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'}
    
    Allow any-user to read cluster-family in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'}
    
    Allow any-user to use tag-namespaces in <location> where all {request.principal.type = 'workload', request.principal.namespace = 'native-ingress-controller-system', request.principal.service_account = 'oci-native-ingress-controller', request.principal.cluster_id = '<cluster-ocid>'}
    

Tâche 2 : activation de l'extension OCI Native Ingress Controller

Une fois la stratégie de principal d'identité de charge globale requise en place, vous pouvez activer l'extension de contrôleur d'entrée natif OCI pour votre cluster OKE. Ce module complémentaire permet d'utiliser un équilibreur de charge OCI pour gérer efficacement le trafic entrant.

  1. Accédez à votre cluster OKE dans la console OCI.

  2. Faites défiler la page vers le bas et cliquez sur Add-ons.

  3. Sur la page Extensions, cliquez sur Contrôleur entrant natif.

  4. Sur la page Modifier le contrôleur entrant natif, sélectionnez Activer le contrôleur entrant natif et entrez les informations suivantes sous Option.

    • compartmentId : entrez l'OCID du compartiment.
    • loadBalancerSubnetId : entrez l'OCID de sous-réseau de l'équilibreur de charge.
    • authType : entrez workloadIdentity.
  5. Cliquez sur Enregistrer les modifications pour appliquer les paramètres.

    Remarque : cette configuration est requise pour les pools de noeuds virtuels, comme indiqué précédemment, ils sont sans serveur et ne prennent pas en charge l'authentification du principal d'instance. L'identité de charge globale est la méthode d'authentification prise en charge dans ce cas.

    Module natif entrant

Tâche 3 : déploiement de ressources entrantes pour activer la fonctionnalité entrante native

Dans cette tâche, créez les ressources Kubernetes requises pour activer la fonctionnalité entrante à l'aide du contrôleur d'entrée natif OCI. Il s'agit notamment des objets IngressClassParameters, IngressClass et Ingress réels.

  1. Examinez l'objectif de chaque ressource.

    • IngressClassParameters : indique une configuration spécifique à OCI, comme l'OCID de compartiment, le sous-réseau et la bande passante.
    • IngressClass : lie la fonctionnalité d'entrée Kubernetes au contrôleur d'entrée d'OCI.
    • Entrée : définit la manière dont le trafic est acheminé vers vos services.
  2. Remplacez les valeurs d'espace réservé dans le YAML.

    • Remplacez <your compartment ocid> par l'OCID de compartiment réel.
    • Remplacez <your load balancer subnet ocid> par l'OCID de votre sous-réseau d'équilibreur de charge.
  3. Appliquez le manifeste YAML. Enregistrez le code YAML suivant dans un fichier, par exemple native-ingress.yaml.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: test-web-app
      namespace: default
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: test-web
      template:
        metadata:
          labels:
            app: test-web
        spec:
          containers:
          - name: nginx
            image: nginx:latest
            ports:
            - containerPort: 80
            readinessProbe:
              httpGet:
                path: /
                port: 80
              initialDelaySeconds: 3
              periodSeconds: 5
            resources:
              requests:
                cpu: "100m"
                memory: "128Mi"
              limits:
                cpu: "500m"
                memory: "256Mi"
    
    apiVersion: v1
    kind: Service
    metadata:
      name: test-web-service
      namespace: default
    spec:
      selector:
        app: test-web
      ports:
        - protocol: TCP
          port: 80
          targetPort: 80
    
    apiVersion: ingress.oraclecloud.com/v1beta1
    kind: IngressClassParameters
    metadata:
      name: native-ic-params
      namespace: native-ingress-controller-system
    spec:
      compartmentId: "ocid1.compartment.oc1..aaaaaaaa2eimxxxxxxxxxxz4lkcety52hfdg6wdoff6744yn4hrshofla"
      subnetId: "ocid1.subnet.oc1.iad.aaaaaaaaa72ie4xxxxxxxxxrxxrly6nmkb77qxt6mi2t5pvrdhge32q"
      loadBalancerName: "test-web-ingress"
      isPrivate: false
      maxBandwidthMbps: 400
      minBandwidthMbps: 100
    
    apiVersion: networking.k8s.io/v1
    kind: IngressClass
    metadata:
      name: native-ic-ingress-class
      annotations:
        ingressclass.kubernetes.io/is-default-class: "true"
    spec:
      controller: oci.oraclecloud.com/native-ingress-controller
      parameters:
        apiGroup: ingress.oraclecloud.com
        kind: IngressClassParameters
        name: native-ic-params
        scope: Namespace
        namespace: native-ingress-controller-system
    
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: test-web-ingress-quickstart
      namespace: default
      annotations:
        oci.oraclecloud.com/load-balancer-type: "lb"
        oci.oraclecloud.com/healthcheck-protocol: "HTTP"
        oci.oraclecloud.com/healthcheck-port: "80"
        oci.oraclecloud.com/healthcheck-path: "/"
        oci.oraclecloud.com/healthcheck-return-code: "200"
    spec:
      ingressClassName: native-ic-ingress-class
      rules:
      - host: test.example.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: test-web-service
                port:
                  number: 80
      - http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: test-web-service
                port:
                  number: 80
    
  4. Exécutez la commande suivante pour appliquer le manifeste.

    kubectl apply -f native-ingress.yaml
    
  5. Vérifiez la création de la ressource.

    kubectl get ingressclassparameters
    kubectl get ingressclass
    kubectl get ingress
    

Tâche 4 : test de l'équilibreur de charge du contrôleur d'entrée natif OCI

Remarque : assurez-vous que les ports requis (par exemple, 80 et/ou 443) sont ouverts dans votre liste de sécurité du VCN et/ou votre groupe de sécurité réseau avant de tester l'adresse IP de l'équilibreur de charge OCI.

Pour vérifier que le contrôleur d'entrée natif OCI fonctionne correctement, procédez comme suit :

  1. Utilisez kubectl pour extraire l'adresse IP de la ressource entrante.

    kubectl get ingress
    
  2. Copiez l'adresse IP affichée dans la sortie.

    kubectl

  3. Ouvrez votre navigateur Web et collez l'adresse IP dans la barre d'adresse.

    Nginx

  4. Si votre configuration est correcte, vous devez voir la réponse par défaut du service déployé.

    Vous pouvez également vérifier que l'équilibreur de charge OCI a été créé correctement dans la console OCI en accédant au menu de navigation, en sélectionnant Fonctions de réseau et en cliquant sur Equilibreur de charge.

    EC

Etapes suivantes

Avec ce tutoriel, vous avez configuré le contrôleur d'entrée natif sur OKE à l'aide de noeuds virtuels. Cette configuration vous permet de gérer le trafic entrant avec le service OCI Load Balancer tout en bénéficiant de l'évolutivité et de la simplicité d'un environnement Kubernetes sans serveur. Vous êtes maintenant prêt à déployer des charges de travail de production avec une gestion du trafic rationalisée et une surcharge minimale de l'infrastructure.

Accusés de réception

Ressources de formation supplémentaires

Explorez d'autres ateliers sur le site docs.oracle.com/learn ou accédez à d'autres contenus d'apprentissage gratuits sur le canal Oracle Learning YouTube. En outre, visitez le site education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour obtenir de la documentation sur le produit, consultez Oracle Help Center.