Prerequisiti per la distribuzione del controller di entrata nativo OCI come componente aggiuntivo cluster

Scopri cosa devi fare prima di poter distribuire il controller in entrata nativo OCI come componente aggiuntivo cluster per bilanciare il carico e instradare il traffico in entrata ai pod del servizio in esecuzione sui nodi di lavoro in un cluster Kubernetes.

Prima di distribuire il controller di entrata nativo OCI come componente aggiuntivo cluster:

Impostazione di un principal dell'istanza, di un principal utente o di un principal del carico di lavoro per abilitare l'accesso ai servizi e alle risorse OCI

Per creare un load balancer e instradare il traffico in entrata, il controller di entrata nativo OCI, installato come programma standalone o come componente aggiuntivo cluster, esegue azioni su altre risorse del servizio Oracle Cloud Infrastructure (inclusi il servizio Load Balancer e il servizio Certificati). Per eseguire tali azioni sulle risorse del servizio OCI, il pod del controller di entrata nativo OCI utilizza le credenziali di un attore (o principal) autorizzato. Al momento, puoi impostare i seguenti tipi di principal per consentire al controller in entrata nativo OCI di eseguire azioni sulle risorse del servizio OCI:

Nota:

  • L'uso dei principal dell'istanza per consentire al controller in entrata nativo OCI di accedere ai servizi e alle risorse OCI non è supportato nei cluster con nodi virtuali.
  • L'uso delle identità dei carichi di lavoro per consentire al controller in entrata nativo OCI di accedere ai servizi e alle risorse OCI è supportato con cluster avanzati, ma non con cluster di base.

Utilizzo dei principal delle istanze per abilitare l'accesso ai servizi e alle risorse OCI

Puoi impostare un principal dell'istanza per consentire al controller in entrata nativo OCI di eseguire azioni sulle risorse del servizio OCI. Tenere presente che è possibile utilizzare solo principal delle istanze con nodi gestiti.

Per impostare un principal istanza:

  1. Creare un nuovo gruppo dinamico per contenere le istanze di computazione che ospitano i nodi di lavoro del cluster:
    1. Aprire il menu di navigazione e selezionare Identità e sicurezza. In Identità, selezionare Domini. In Dominio di Identity, selezionare Gruppi dinamici.
    2. Selezionare il compartimento a cui appartengono le istanze di computazione.

    3. Seguire le istruzioni in Per creare un gruppo dinamico e assegnare al gruppo dinamico un nome (ad esempio, acme-oke-native-ingress-controller-dyn-grp).

    4. Immettere una regola che includa le istanze di computazione nel compartimento, nel formato seguente:
      ALL {instance.compartment.id = '<compartment-ocid>'}

      dove <compartment-ocid> è l'OCID del compartimento in cui vengono creati i pool di nodi cluster.

      Ad esempio:

      ALL {instance.compartment.id = 'ocid1.compartment.oc1..aaaaaaaa23______smwa'}
    5. Fare clic su Crea gruppo dinamico.

Prima di distribuire il controller in entrata nativo OCI, dovrai:

Utilizzo delle principal utente per abilitare l'accesso ai servizi e alle risorse OCI

È possibile impostare un principal utente per consentire al controller in entrata nativo OCI di eseguire azioni sulle risorse del servizio OCI.

Per impostare un principal utente:

  1. Se non esiste già un utente appropriato, crearne uno in IAM (vedere Per creare un utente).
  2. Se non esiste già un gruppo appropriato, crearne uno in IAM (vedere Per creare un gruppo).
  3. Aggiungere l'utente al gruppo (vedere Per aggiungere un utente a un gruppo).
  4. Recupera questi elementi:

  5. Caricare la chiave pubblica dalla coppia di chiavi nella console. Vedere Come caricare la chiave pubblica.
  6. Creare un file di configurazione come file .yaml contenente le informazioni sulle credenziali, nel seguente formato:
    auth:
      region: <region-identifier>
      passphrase: <passphrase>
      user: <user-ocid>
      fingerprint: <fingerprint>
      tenancy: <tenancy-ocid>
    Dove:
    • region: <region-identifier> è l'area in cui risiede il cluster. Ad esempio, us-ashburn-1
    • passphrase: <passphrase> specifica la password utilizzata per la chiave se è cifrata.
    • user: <user-ocid> è l'OCID dell'utente che deve essere utilizzato dal controller in entrata nativo OCI.
    • fingerprint: <fingerprint> è l'impronta della chiave pubblica.
    • tenancy: <tenancy-ocid> è l'OCID della tenancy che contiene il cluster.

    Ad esempio:

    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. Creare una risorsa segreta Kubernetes nel cluster immettendo:
    
    kubectl create secret generic <secret-name> \
    --from-file=config=<config-file>.yaml \
    --from-file=private-key=<private-key-file-path>.pem \
    --namespace <namespace>
    Dove:
    • <secret-name> specifica il nome del segreto da creare. Ad esempio, oci-config
    • --from-file=config=<config-file>.yaml specifica il nome e il percorso del file .yaml che contiene le informazioni sulle credenziali create in precedenza. Ad esempio, user-auth-config.yaml
    • --from-file=private-key=./oci/oci_api_key.pem specifica il nome e il percorso del file di chiave privata scaricato. Ad esempio, ./oci/oci_api_key.pem
    • --namespace <namespace> specifica lo spazio di nomi che contiene il controller di ingresso nativo OCI

    Ad esempio:

    
    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

Prima di distribuire il controller in entrata nativo OCI, dovrai:

Utilizzo delle identità del carico di lavoro per abilitare l'accesso ai servizi e alle risorse OCI

Puoi impostare un principal di identità del carico di lavoro per consentire al controller in entrata nativo OCI di eseguire azioni sulle risorse del servizio OCI. Tenere presente che è possibile utilizzare solo le identità dei carichi di lavoro con cluster avanzati.

Per impostare un principal di identità del carico di lavoro, effettuare le operazioni riportate di seguito.

  1. Ottenere l'OCID del cluster (ad esempio, utilizzando la scheda Dettagli cluster nella console).

Prima di distribuire il controller in entrata nativo OCI, dovrai:

Concessione delle autorizzazioni al componente aggiuntivo cluster del controller di entrata nativo OCI

Il controller di entrata nativo OCI richiede le autorizzazioni per accedere alle risorse create da altri servizi Oracle Cloud Infrastructure (ad esempio, il servizio Load Balancer e il servizio Certificati). Le autorizzazioni concesse sono le stesse, indipendentemente dal fatto che si installi il controller di entrata nativo OCI come programma standalone o come componente aggiuntivo cluster. Inoltre, le autorizzazioni sono le stesse, indipendentemente dal fatto che tu abbia impostato un principal dell'istanza, un principal utente o un principal dell'identità del carico di lavoro per il controller in entrata nativo OCI. Tuttavia, il modo in cui si concedono tali autorizzazioni dipende dal tipo di principal impostato:

Per impostare le autorizzazioni per il controller in entrata nativo OCI, creare un criterio per il gruppo (nel caso di principal utente), per il gruppo dinamico (nel caso di principal istanza) o per il carico di lavoro (nel caso di principal identità del carico di lavoro), con istruzioni dei criteri per accedere ai servizi e alle risorse OCI:

  1. Aprire il menu di navigazione e selezionare Identità e sicurezza. In Identità, selezionare Criteri.
  2. Seguire le istruzioni in Per creare un criterio e assegnare un nome al criterio, ad esempio acme-oke-native-ingress-controller-policy.
  3. Se si utilizzano principal dell'istanza o principal utente, immettere le istruzioni dei criteri per consentire l'accesso ai servizi e alle risorse OCI utilizzati dal controller di entrata nativo OCI, nel formato riportato di seguito.

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

    Dove:

    • <group|dynamic-group> è group (nel caso dei principal utente) o dynamic-group (nel caso dei principal istanza)
    • <subject-name> è il nome del gruppo (nel caso dei principal utente) o il nome del gruppo dinamico (nel caso dei principal istanza). Ad esempio, acme-oke-nat-ing-cont-dyn-grp. Se un gruppo o un gruppo dinamico non si trova nel dominio di identità predefinito, inserire il nome del gruppo o del gruppo dinamico prima del nome del dominio di identità nel formato <group|dynamic-group> '<identity-domain-name>'/'<group-name|dynamic-group-name>'. È inoltre possibile specificare un gruppo o un gruppo dinamico utilizzando il relativo OCID, nel formato group id <group-ocid> o dynamic-group id <dynamic-group-ocid>.
    • <verb> <resource> è una delle seguenti opzioni (tutte queste sono obbligatorie, in istruzioni dei criteri separate):
      • manage load-balancers
      • use virtual-network-family
      • manage cabundles
      • manage cabundle-associations
      • manage leaf-certificates
      • read leaf-certificate-bundles
      • manage leaf-certificate-versions
      • 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
      • use tag-namespaces (obbligatorio solo se si desidera che il controller di entrata nativo OCI applichi le tag definite ai load balancer; vedere Applicazione delle tag definite al load balancer)
    • <location> è uno dei seguenti:
      • tenancy, se desideri che il controller di entrata nativo OCI abbia accesso alle risorse nell'intera tenancy.
      • compartment <compartment-name> se si desidera che il controller di entrata nativo OCI abbia accesso alle risorse nel compartimento con il nome specificato come compartment <compartment-name>.

    Ad esempio:

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

    La sintassi per l'elenco completo delle istruzioni dei criteri è la seguente:

    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 leaf-certificate-versions 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>
    Allow <group|dynamic-group> <subject-name> to use tag-namespaces in <location>

    Esempio della lista completa delle istruzioni dei criteri:

    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 leaf-certificate-versions 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
    Allow dynamic-group acme-oke-nat-ing-cont-dyn-grp to use tag-namespaces in compartment acme-oke-cluster-compartment
  4. Se si utilizzano principal delle identità del carico di lavoro, immettere le istruzioni dei criteri per consentire l'accesso ai servizi e alle risorse OCI utilizzati dal controller di entrata nativo OCI, nel formato seguente:
    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>'}

    Dove:

    • <verb> <resource> è una delle seguenti opzioni (tutte queste sono obbligatorie, in istruzioni dei criteri separate):
      • manage load-balancers
      • use virtual-network-family
      • manage cabundles
      • manage cabundle-associations
      • manage leaf-certificates
      • read leaf-certificate-bundles
      • manage leaf-certificate-versions
      • 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
      • use tag-namespaces (obbligatorio solo se si desidera che il controller di entrata nativo OCI applichi le tag definite ai load balancer; vedere Applicazione delle tag definite al load balancer)
    • <location> è uno dei seguenti:
      • tenancy, se desideri che il controller di entrata nativo OCI abbia accesso alle risorse nell'intera tenancy.
      • compartment <compartment-name> se si desidera che il controller di entrata nativo OCI abbia accesso alle risorse nel compartimento con il nome specificato come compartment <compartment-name>.
    • request.principal.namespace = 'native-ingress-controller-system' è il nome dello spazio di nomi creato per il controller di entrata nativo OCI durante l'installazione.
    • request.principal.service_account = 'oci-native-ingress-controller' è il nome dell'account di servizio creato per il controller di entrata nativo OCI durante l'installazione.
    • <cluster-ocid> è l'OCID del cluster ottenuto in precedenza.

    Ad esempio:

    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 sintassi per l'elenco completo delle istruzioni dei criteri è la seguente:

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

Installazione di cert-manager

Il controller di ingresso nativo OCI, installato come programma standalone o come componente aggiuntivo cluster, utilizza i webhook per inserire i gate di idoneità dei pod nelle specifiche dei pod. Per garantire la sicurezza, il server webhook deve essere eseguito in modalità HTTPS, che richiede la coppia di certificati e chiavi. Il controller di ingresso nativo OCI utilizza Certificate Manager (noto anche come cert-manager) per generare e gestire i certificati e le chiavi per il server webhook, quindi è necessario installare cert-manager sul cluster per utilizzare i gate di idoneità dei pod.

Indipendentemente dal fatto che tu installi il controller di ingresso nativo OCI come programma standalone o come componente aggiuntivo cluster, puoi installare ed eseguire cert-manager in due modi:

  • È possibile installare ed eseguire cert-manager come prodotto open source, inserendo:

    kubectl apply -f https://github.com/jetstack/cert-manager/releases/latest/download/cert-manager.yaml
  • È possibile installare ed eseguire cert-manager come componente aggiuntivo cluster. Per ulteriori informazioni sull'installazione di cert-manager come componente aggiuntivo cluster, vedere Installazione di un componente aggiuntivo cluster.

Per ulteriori informazioni su cert-manager, consultare la documentazione di cert-manager.io.

Tenere presente che l'installazione del controller di ingresso nativo OCI come componente aggiuntivo cluster non riesce se cert-manager non è già stato installato come prodotto open source o come componente aggiuntivo cluster.