Configurer le contrôleur de trafic entrant natif OCI dans OCI Kubernetes Engine avec des noeuds virtuels

Présentation

Ce tutoriel présente le processus de configuration du contrôleur de trafic entrant natif d'Oracle Cloud Infrastructure (OCI) sur Oracle Cloud Infrastructure Kubernetes Engine (OKE) avec un groupe de noeuds de noeud virtuel. Les noeuds virtuels sont différents des noeuds de travail standard basés sur des instances car ils constituent une solution sans serveur qui élimine les instances de calcul sous-jacentes. Contrairement aux nœuds de travail traditionnels, qui s'appuient sur des instances de machine virtuelle spécifiques, les nœuds virtuels s'adaptent 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 des frais généraux opérationnels.

Dans ce tutoriel, nous configurerons le contrôleur de trafic entrant natif OCI sur OKE à l'aide de noeuds virtuels. Nous allons configurer des politiques d'identité de charge de travail, activer le module complémentaire entrant 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 capacités de l'équilibreur de charge d'OCI, tout en tirant parti de la simplicité opérationnelle des noeuds virtuels. Cette configuration simplifie 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 politique de principal d'identité de charge de travail

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

  1. Allez à la console OCI, naviguez jusqu'à Identité et sécurité, Identité et cliquez sur Politiques.

  2. Créez une politique et entrez son nom. Pour plus d'informations, voir Créer une politique à l'aide de la console OCI.

  3. Cliquez sur Afficher l'éditeur manuel et entrez les énoncés de politique suivants, en remplaçant location et cluster-ocid par vos valeurs spécifiques.

    Note :

    • <location> doit être remplacé par le compartiment où se trouvent vos ressources.
    • <cluster-ocid> doit être remplacé par l'OCID de votre grappe 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 : Activer le module complémentaire de contrôleur de trafic entrant natif OCI

Une fois la politique de principal d'identité de charge de travail requise en place, vous pouvez activer le module complémentaire de contrôleur de trafic entrant natif OCI pour votre grappe OKE. Ce module complémentaire permet d'utiliser un équilibreur de charge OCI pour gérer efficacement le trafic entrant.

  1. Naviguez jusqu'à votre grappe OKE dans la console OCI.

  2. Faites défiler vers le bas et cliquez sur Modules complémentaires.

  3. Dans la page Modules complémentaires, cliquez sur Contrôleur de trafic entrant natif.

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

    • compartmentId : Entrez l'OCID de votre compartiment.
    • loadBalancerSubnetId : Entrez l'OCID de votre sous-réseau d'équilibreurs de charge.
    • authType : Entrez workloadIdentity.
  5. Cliquez sur enregistrer les modifications pour appliquer les paramètres.

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

    Module complémentaire entrant natif

Tâche 3 : Déployer les ressources entrantes pour activer la fonctionnalité de trafic entrant natif

Dans cette tâche, créez les ressources Kubernetes requises pour activer la fonctionnalité de trafic entrant à l'aide du contrôleur de trafic entrant natif OCI. Il s'agit notamment de l'objet IngressClassParameters, IngressClass et de l'objet Ingress réel.

  1. Examinez l'objectif de chaque ressource.

    • IngressClassParameters : Spécifie une configuration OCI spécifique, telle que l'OCID du compartiment, le sous-réseau et la bande passante.
    • IngressClass : Lie la fonctionnalité de trafic entrant Kubernetes au contrôleur de trafic entrant d'OCI.
    • Trafic entrant : Définit la façon dont le trafic est acheminé vers vos services.
  2. Remplacez les valeurs de paramètre fictif dans YAML.

    • Remplacez <your compartment ocid> par votre OCID de compartiment réel.
    • Remplacez <your load balancer subnet ocid> par l'OCID de votre sous-réseau d'équilibreurs 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 : Tester l'équilibreur de charge du contrôleur de trafic entrant natif OCI

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

Pour vérifier que votre contrôleur de trafic entrant 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 indiqué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 devriez voir la réponse par défaut de votre service déployé.

    Vous pouvez également vérifier que l'équilibreur de charge OCI a été correctement créé dans la console OCI en naviguant jusqu'au menu de navigation, sélectionnez Réseau et cliquez sur Équilibreur de charge.

    Livre numérique

Étapes suivantes

Avec ce tutoriel, vous avez configuré avec succès le contrôleur de trafic entrant natif sur OKE à l'aide de noeuds virtuels. Cette configuration vous permet de gérer le trafic entrant avec le service d'équilibreur de charge OCI tout en bénéficiant de l'extensibilité 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 rationalisée du trafic et une surcharge minimale de l'infrastructure.

Remerciements

Ressources d'apprentissage supplémentaires

Explorez d'autres laboratoires sur le site docs.oracle.com/learn ou accédez à plus de contenu d'apprentissage gratuit sur le canal Oracle Learning YouTube. De plus, visitez education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

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