Requisitos para desplegar el controlador de entrada nativo de OCI como complemento de cluster

Descubra lo que debe hacer antes de desplegar el controlador de entrada nativo de OCI como complemento de cluster para equilibrar la carga y enrutar el tráfico entrante a pods de servicio que se ejecutan en nodos de trabajador en un cluster de Kubernetes.

Antes de desplegar el controlador de entrada nativo de OCI como complemento de cluster:

Configuración de un principal de instancia, un principal de usuario o un principal de identidad de carga de trabajo para permitir el acceso a los servicios y recursos de OCI

Para crear un equilibrador de carga y enrutar el tráfico entrante, el controlador de entrada nativo de OCI, ya sea instalado como programa independiente o como complemento de cluster, realiza acciones en otros recursos del servicio de Oracle Cloud Infrastructure (incluidos el servicio Load Balancer y el servicio Certificates). Para realizar esas acciones en los recursos del servicio OCI, el pod del controlador de entrada nativo de OCI utiliza las credenciales de un actor (o principal) autorizado. Actualmente puede configurar los siguientes tipos de principal para permitir que el controlador de entrada nativo de OCI realice acciones en los recursos del servicio OCI:

Nota:

  • El uso de principales de instancia para permitir que el controlador de entrada nativo de OCI acceda a servicios y recursos de OCI no está soportado en clusters con nodos virtuales.
  • El uso de principales de identidad de carga de trabajo para permitir que el controlador de entrada nativo de OCI acceda a los servicios y recursos de OCI está soportado con clusters mejorados, pero no con clusters básicos.

Uso de principales de instancia para permitir el acceso a los servicios y recursos de OCI

Puede configurar un principal de instancia para permitir que el controlador de entrada nativo de OCI realice acciones en los recursos del servicio OCI. Tenga en cuenta que solo puede utilizar principales de instancia con nodos gestionados.

Para configurar un principal de instancia:

  1. Cree un nuevo grupo dinámico que contenga las instancias informáticas que alojan los nodos de trabajador del cluster:
    1. Abra el menú de navegación y haga clic en Identidad y seguridad. En Identidad, haga clic en Dominios. En Dominio de identidad, haga clic en Grupos dinámicos.
    2. Seleccione el compartimento al que pertenecen las instancias informáticas.

    3. Siga las instrucciones en Para crear un grupo dinámico y asígnele un nombre al grupo dinámico (por ejemplo, acme-oke-native-ingress-controller-dyn-grp).

    4. Introduzca una regla que incluya las instancias informáticas en el compartimento, con el formato:
      ALL {instance.compartment.id = '<compartment-ocid>'}

      donde <compartment-ocid> es el OCID del compartimento en el que se crean los pools de nodos de cluster.

      Por ejemplo:

      ALL {instance.compartment.id = 'ocid1.compartment.oc1..aaaaaaaa23______smwa'}
    5. Haga clic en Crear grupo dinámico.

Antes de desplegar el controlador de entrada nativo de OCI, deberá:

Uso de principales de usuario para permitir el acceso a los servicios y recursos de OCI

Puede configurar un principal de usuario para permitir que el controlador de entrada nativo de OCI realice acciones en los recursos del servicio OCI.

Para configurar un principal de usuario:

  1. Si aún no existe un usuario adecuado, cree un usuario en IAM (consulte Para crear un usuario).
  2. Si aún no existe un grupo adecuado, cree un grupo en IAM (consulte Para crear un grupo).
  3. Agregue el usuario al grupo (consulte Para agregar un usuario a un grupo).
  4. Obtenga estos elementos:

  5. Cargue la clave pública del par de claves en la consola. Consulte Cómo cargar la clave pública.
  6. Cree un archivo de configuración como un archivo .yaml que contenga información de credenciales, con el siguiente formato:
    auth:
      region: <region-identifier>
      passphrase: <passphrase>
      user: <user-ocid>
      fingerprint: <fingerprint>
      tenancy: <tenancy-ocid>
    donde:
    • region: <region-identifier> es la región en la que reside el cluster. Por ejemplo, us-ashburn-1
    • passphrase: <passphrase> especifica la contraseña utilizada para la clave si está cifrada.
    • user: <user-ocid> es el OCID del usuario que va a utilizar el controlador de entrada nativo de OCI.
    • fingerprint: <fingerprint> es la huella de la clave pública.
    • tenancy: <tenancy-ocid> es el OCID del arrendamiento que contiene el cluster.

    Por ejemplo:

    auth:
      region: us-ashburn-1
      passphrase: examplepass
      user: ocid1.user.oc1..aaaaaaaa_example
      fingerprint: 67:d9:74:4b:21:example
      tenancy: ocid1.tenancy.oc1..aaaaaaaa_example
  7. Cree un recurso secreto de Kubernetes en el cluster introduciendo:
    
    kubectl create secret generic <secret-name> \
    --from-file=config=<config-file>.yaml \
    --from-file=private-key=<private-key-file-path>.pem \
    --namespace <namespace>
    donde:
    • <secret-name> especifica el nombre del secreto que se va a crear. Por ejemplo, oci-config
    • --from-file=config=<config-file>.yaml especifica el nombre y la ruta del archivo .yaml que contiene la información de credenciales que ha creado anteriormente. Por ejemplo, user-auth-config.yaml
    • --from-file=private-key=./oci/oci_api_key.pem especifica el nombre y la ruta de acceso del archivo de claves privadas descargado. Por ejemplo, ./oci/oci_api_key.pem
    • --namespace <namespace> especifica el espacio de nombres que contiene el controlador de entrada nativo de OCI

    Por ejemplo:

    
    kubectl create secret generic oci-config \
    --from-file=config=user-auth-config.yaml \
    --from-file=private-key=./oci/oci_api_key.pem \
    --namespace acme-namespace

Antes de desplegar el controlador de entrada nativo de OCI:

Uso de entidades de identidad de carga de trabajo para permitir el acceso a los servicios y recursos de OCI

Puede configurar un principal de identidad de carga de trabajo para permitir que el controlador de entrada nativo de OCI realice acciones en los recursos del servicio OCI. Tenga en cuenta que solo puede utilizar principales de identidad de carga de trabajo con clusters mejorados.

Para configurar un principal de identidad de carga de trabajo:

  1. Obtenga el OCID del cluster (por ejemplo, mediante el separador Detalles de cluster de la consola).

Antes de desplegar el controlador de entrada nativo de OCI, deberá:

Asignación de permisos al complemento de cluster de controlador de entrada nativo de OCI

El controlador de entrada nativo de OCI necesita permisos para acceder a los recursos creados por otros servicios de Oracle Cloud Infrastructure (como el servicio Load Balancer y el servicio Certificates). Los permisos que otorga son los mismos, independientemente de si instala el controlador de entrada nativo de OCI como un programa independiente o como un complemento de cluster. Además, los permisos son los mismos, independientemente de si ha configurado un principal de instancia, un principal de usuario o un principal de identidad de carga de trabajo para el controlador de entrada nativo de OCI. Sin embargo, la forma en que otorga esos permisos depende del tipo de principal que haya configurado:

Para configurar permisos para el controlador de entrada nativo de OCI, cree una política para el grupo (en el caso de los principales de usuario), para el grupo dinámico (en el caso de los principales de instancia) o para la carga de trabajo (en el caso de los principales de identidad de carga de trabajo), con sentencias de política para acceder a los servicios y recursos de OCI:

  1. Abra el menú de navegación y haga clic en Identidad y seguridad. En Identidad, haga clic en Políticas.
  2. Siga las instrucciones de Para crear una política y asigne un nombre a la política (por ejemplo, acme-oke-native-ingress-controller-policy).
  3. Si utiliza principales de instancia o principales de usuario, introduzca sentencias de política para permitir el acceso a los servicios y recursos de OCI utilizados por el controlador de entrada nativo de OCI, con el formato:

    Allow <group|dynamic-group> <subject-name> to <verb> <resource> in <location>   
    

    donde:

    • <group|dynamic-group> es group (en el caso de los principales de usuario) o dynamic-group (en el caso de los principales de instancia)
    • <subject-name> es el nombre del grupo (en el caso de los principales de usuario) o el nombre del grupo dinámico (en el caso de los principales de instancia). Por ejemplo, acme-oke-nat-ing-cont-dyn-grp. Tenga en cuenta que si un grupo o grupo dinámico no está en el dominio de identidad por defecto, agregue un prefijo al nombre de grupo o grupo dinámico con el nombre de dominio de identidad, con el formato <group|dynamic-group> '<identity-domain-name>'/'<group-name|dynamic-group-name>'. También puede especificar un grupo o grupo dinámico mediante su OCID, con el formato group id <group-ocid> o dynamic-group id <dynamic-group-ocid>.
    • <verb> <resource> es uno de los siguientes (todos estos son necesarios en sentencias de política independientes):
      • manage load-balancers
      • use virtual-network-family
      • manage cabundles
      • manage cabundle-associations
      • manage leaf-certificates
      • read leaf-certificate-bundles
      • manage certificate-associations
      • read certificate-authorities
      • manage certificate-authority-associations
      • read certificate-authority-bundles
      • read public-ips
      • manage floating-ips
      • manage waf-family
      • read cluster-family
    • <location> es uno de los siguientes:
      • tenancy, si desea que el controlador de entrada nativo de OCI tenga acceso a los recursos de todo el arrendamiento.
      • compartment <compartment-name> si solo desea que el controlador de entrada nativo de OCI tenga acceso a los recursos del compartimento con el nombre que especifique como compartment <compartment-name>.

    Por ejemplo:

    Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to manage load-balancers in compartment acme-oke-cluster-compartment

    La sintaxis para la lista completa de sentencias de política es la siguiente:

    Allow <group|dynamic-group> <subject-name> to manage load-balancers in <location>   
    Allow <group|dynamic-group> <subject-name> to use virtual-network-family in <location>
    Allow <group|dynamic-group> <subject-name> to manage cabundles in <location>
    Allow <group|dynamic-group> <subject-name> to manage cabundle-associations in <location>
    Allow <group|dynamic-group> <subject-name> to manage leaf-certificates in <location>
    Allow <group|dynamic-group> <subject-name> to read leaf-certificate-bundles in <location>
    Allow <group|dynamic-group> <subject-name> to manage certificate-associations in <location>
    Allow <group|dynamic-group> <subject-name> to read certificate-authorities in <location>
    Allow <group|dynamic-group> <subject-name> to manage certificate-authority-associations in <location>
    Allow <group|dynamic-group> <subject-name> to read certificate-authority-bundles in <location>
    Allow <group|dynamic-group> <subject-name> to read public-ips in <location>
    Allow <group|dynamic-group> <subject-name> to manage floating-ips in <location>
    Allow <group|dynamic-group> <subject-name> to manage waf-family in <location>
    Allow <group|dynamic-group> <subject-name> to read cluster-family in <location>

    Ejemplo de la lista completa de sentencias de política:

    Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to manage load-balancers in compartment acme-oke-cluster-compartment   
    Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to use virtual-network-family in compartment acme-oke-cluster-compartment
    Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to manage cabundles in compartment acme-oke-cluster-compartment
    Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to manage cabundle-associations in compartment acme-oke-cluster-compartment
    Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to manage leaf-certificates in compartment acme-oke-cluster-compartment
    Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to read leaf-certificate-bundles in compartment acme-oke-cluster-compartment
    Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to manage certificate-associations in compartment acme-oke-cluster-compartment
    Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to read certificate-authorities in compartment acme-oke-cluster-compartment
    Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to manage certificate-authority-associations in compartment acme-oke-cluster-compartment
    Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to read certificate-authority-bundles in compartment acme-oke-cluster-compartment
    Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to read public-ips in compartment acme-oke-cluster-compartment
    Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to manage floating-ips in compartment acme-oke-cluster-compartment
    Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to manage waf-family in compartment acme-oke-cluster-compartment
    Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to read cluster-family in compartment acme-oke-cluster-compartment
    
  4. Si utiliza principales de identidad de carga de trabajo, introduzca sentencias de política para permitir el acceso a los servicios y recursos de OCI utilizados por el controlador de entrada nativo de OCI, con el formato:
    Allow any-user to <verb> <resource> 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>'}

    donde:

    • <verb> <resource> es uno de los siguientes (todos estos son necesarios en sentencias de política independientes):
      • manage load-balancers
      • use virtual-network-family
      • manage cabundles
      • manage cabundle-associations
      • manage leaf-certificates
      • read leaf-certificate-bundles
      • manage certificate-associations
      • read certificate-authorities
      • manage certificate-authority-associations
      • read certificate-authority-bundles
      • read public-ips
      • manage floating-ips
      • manage waf-family
      • read cluster-family
    • <location> es uno de los siguientes:
      • tenancy, si desea que el controlador de entrada nativo de OCI tenga acceso a los recursos de todo el arrendamiento.
      • compartment <compartment-name> si solo desea que el controlador de entrada nativo de OCI tenga acceso a los recursos del compartimento con el nombre que especifique como compartment <compartment-name>.
    • request.principal.namespace = 'native-ingress-controller-system' es el nombre del espacio de nombres creado para el controlador de entrada nativo de OCI durante la instalación.
    • request.principal.service_account = 'oci-native-ingress-controller' es el nombre de la cuenta de servicio creada para el controlador de entrada nativo de OCI durante la instalación.
    • <cluster-ocid> es el OCID del cluster que ha obtenido anteriormente.

    Por ejemplo:

    Allow any-user to manage load-balancers in tenancy 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 = 'ocid1.cluster.oc1.iad.aaaaaaaa______ska'}

    La sintaxis para la lista completa de sentencias de política es:

    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 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>'}

Instalación de cert-manager

El controlador de entrada nativo de OCI, ya sea instalado como un programa independiente o como un complemento de cluster, utiliza webhooks para inyectar puertas de preparación de pod en las especificaciones de pod. Para garantizar la seguridad, el servidor de webhooks debe ejecutarse en modo HTTPS, que requiere un par de certificados y claves. El controlador de entrada nativo de OCI utiliza Certificate Manager (también conocido como cert-manager) para generar y gestionar los certificados y las claves para el servidor de webhook, por lo que debe instalar cert-manager en el cluster para utilizar las puertas de preparación de pod.

Independientemente de si instala el controlador de entrada nativo de OCI como un programa independiente o como un complemento de cluster, puede instalar y ejecutar el gestor de cert de dos formas:

  • Puede instalar y ejecutar cert-manager como un producto de código abierto, introduciendo:

    kubectl apply -f https://github.com/jetstack/cert-manager/releases/latest/download/cert-manager.yaml
  • Puede instalar y ejecutar cert-manager como un complemento de cluster. Para obtener más información sobre la instalación de cert-manager como complemento de cluster, consulte Installing a Cluster Add-on.

Para obtener más información sobre cert-manager, consulte la documentación de cert-manager.io.

Tenga en cuenta que la instalación del controlador de entrada nativo de OCI como complemento de cluster falla si aún no ha instalado cert-manager, ya sea como producto de código abierto o como complemento de cluster.