Configuración del controlador de entrada nativo de OCI en OCI Kubernetes Engine con nodos virtuales

Introducción

En este tutorial se describe el proceso de configuración del controlador de entrada nativo de Oracle Cloud Infrastructure (OCI) en Oracle Cloud Infrastructure Kubernetes Engine (OKE) con un pool de nodos de nodos virtuales. Los nodos virtuales son diferentes de los nodos de trabajador normales basados en instancias porque son una solución sin servidor que abstrae las instancias informáticas subyacentes. A diferencia de los nodos de trabajador tradicionales, que se basan en instancias de máquina virtual específicas, los nodos virtuales se escalan dinámicamente en función de las demandas de carga de trabajo y no requieren la gestión manual de la infraestructura subyacente. Esto los hace ideales para cargas de trabajo que necesitan ampliación automática y una reducción de la sobrecarga operativa.

En este tutorial, configuraremos el controlador de entrada nativo de OCI en OKE mediante nodos virtuales. Configuraremos políticas de identidad de carga de trabajo, activaremos el complemento de entrada y desplegaremos recursos de entrada con manifiestos de Kubernetes.

Si sigues estas tareas, puedes exponer tus aplicaciones y gestionar el tráfico de entrada mediante las capacidades del equilibrador de carga de OCI, todo ello aprovechando la simplicidad operativa de los nodos virtuales. Esta configuración optimiza la gestión del tráfico y admite cargas de trabajo de producción de una manera escalable y rentable.

Objetivos

Tarea 1: Crear política de entidad de identidad de carga de trabajo

Antes de activar el controlador de entrada nativo de OCI, cree una política de principal de identidad de carga de trabajo. Los nodos virtuales no tienen servidor y no utilizan instancias de OCI Compute, por lo que necesitan identidad de carga de trabajo en lugar de principales de instancia. Esta política permite al controlador de entrada gestionar recursos en el compartimento.

  1. Vaya a la consola de OCI, vaya a Identidad y seguridad, Identidad y haga clic en Políticas.

  2. Cree una política e introduzca un Nombre de Política. Para obtener más información, consulte Creación de una política mediante la consola de OCI.

  3. Haga clic en Mostrar editor manual e introduzca las siguientes sentencias de política, sustituyendo location y cluster-ocid por sus valores específicos.

    Nota:

    • <location> se debe sustituir por el compartimento en el que se encuentran los recursos.
    • <cluster-ocid> se debe sustituir por el OCID del cluster de 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>'}
    

Tarea 2: Activación del complemento OCI Native Ingress Controller

Una vez que se haya establecido la política de principal de identidad de carga de trabajo necesaria, puede continuar activando el complemento de controlador de entrada nativo de OCI para el cluster de OKE. Este complemento permite el uso de un equilibrador de carga de OCI para gestionar el tráfico de entrada de forma eficiente.

  1. Navegue al cluster de OKE en la consola de OCI.

  2. Desplácese hacia abajo y haga clic en Complementos.

  3. En la página Complementos, haga clic en Controlador de entrada nativo.

  4. En la página Editar controlador de entrada nativo, seleccione Activar controlador de entrada nativo e introduzca la siguiente información en Opción.

    • compartmentId: introduzca el OCID del compartimento.
    • loadBalancerSubnetId: introduzca el OCID de subred del equilibrador de carga.
    • authType: introduzca workloadIdentity.
  5. Haga clic en Guardar cambios para aplicar la configuración.

    Nota: Esta configuración es necesaria para los pools de nodos virtuales, como se ha mencionado anteriormente, no tienen servidor y no soportan la autenticación de principal de instancia. La identidad de carga de trabajo es el método de autenticación soportado en este caso.

    Complemento de entrada nativo

Tarea 3: Despliegue de recursos de entrada para activar la funcionalidad de entrada nativa

En esta tarea, cree los recursos de Kubernetes necesarios para activar la funcionalidad de entrada mediante el controlador de entrada nativo de OCI. Estos incluyen el objeto IngressClassParameters, IngressClass y el objeto Ingress real.

  1. Revise la finalidad de cada recurso.

    • IngressClassParameters: especifica la configuración específica de OCI, como el OCID del compartimento, la subred y el ancho de banda.
    • IngressClass: enlaza la funcionalidad de entrada de Kubernetes al controlador de entrada de OCI.
    • Entrada: define cómo se enruta el tráfico a los servicios.
  2. Sustituya los valores de marcador de posición en el YAML.

    • Sustituya <your compartment ocid> por el OCID de compartimento real.
    • Sustituya <your load balancer subnet ocid> por el OCID de la subred del equilibrador de carga.
  3. Aplique el manifiesto YAML. Guarde el siguiente código YAML en un archivo, por ejemplo 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. Ejecute el siguiente comando para aplicar el manifiesto.

    kubectl apply -f native-ingress.yaml
    
  5. Verifique la creación del recurso.

    kubectl get ingressclassparameters
    kubectl get ingressclass
    kubectl get ingress
    

Tarea 4: Prueba del equilibrador de carga del controlador de entrada nativo de OCI

Nota: Asegúrese de que los puertos necesarios (por ejemplo, 80 y/o 443) estén abiertos en la lista de seguridad de la VCN y/o el grupo de seguridad de red (NSG) antes de probar la dirección IP del equilibrador de carga de OCI.

Para verificar que el controlador de entrada nativo de OCI funciona correctamente, siga estos pasos:

  1. Utilice kubectl para recuperar la dirección IP del recurso de entrada.

    kubectl get ingress
    
  2. Copie la dirección IP mostrada en la salida.

    kubectl

  3. Abra el explorador web y pegue la dirección IP en la barra de direcciones.

    Nginx

  4. Si la configuración es correcta, debería ver la respuesta por defecto del servicio desplegado.

    También puede verificar que el equilibrador de carga de OCI se ha creado correctamente en la consola de OCI; para ello, vaya al menú de navegación, seleccione Red y haga clic en Equilibrador de carga.

    Equilibrador de carga

Pasos Siguientes

Con este tutorial, ha configurado correctamente el controlador de entrada nativo en OKE mediante nodos virtuales. Esta configuración permite gestionar el tráfico de entrada con el servicio OCI Load Balancer, al tiempo que se beneficia de la escalabilidad y la simplicidad de un entorno de Kubernetes sin servidor. Ya está listo para desplegar cargas de trabajo de producción con una gestión de tráfico optimizada y una mínima sobrecarga de infraestructura.

Acuses de recibo

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.

Para obtener documentación sobre el producto, visite Oracle Help Center.