Verifica dell'accesso alle applicazioni con le NodePort

Virtual Private Cloud Infrastruttura classica Satellite

Rendi la tua applicazione containerizzata accessibile da Internet utilizzando l'indirizzo IP pubblico di un qualsiasi nodo worker all'interno di un cluster Red Hat OpenShift ed esponendo un NodePort. Utilizza questa opzione per la verifica in Red Hat® OpenShift® on IBM Cloud® e per l'accesso pubblico a breve termine.

Informazioni su NodePort

Esponi una porta pubblica sul tuo nodo di lavoro e utilizza l'indirizzo IP pubblico del nodo di lavoro per accedere al tuo servizio nel cluster pubblicamente da Internet.

Quando esponi la tua applicazione creando un servizio Kubernetes del tipo NodePort, vengono assegnati al servizio una NodePort nell'intervallo 30000 - 32767 e un indirizzo IP del cluster interno. Il servizio NodePort funge da punto di ingresso per le richieste in entrata per la tua applicazione. La NodePort assegnata è pubblicamente esposta nelle impostazioni kubeproxy di ogni nodo di lavoro nel cluster. Ogni nodo di lavoro inizia ad ascoltare dalla NodePort assegnata per le richieste in entrata per il servizio. Per accedere al servizio da Internet, è possibile utilizzare l'indirizzo IP pubblico di qualsiasi nodo di lavoro assegnato durante la creazione del cluster e l' NodePort, nel formato <IP_address>:<nodeport>. Se vuoi accedere al servizio sulla rete privata, usa l'indirizzo IP privato di qualsiasi nodo di lavoro invece dell'indirizzo IP pubblico.

Il seguente diagramma mostra come viene diretta la comunicazione da Internet a un'applicazione quando è configurato un servizio NodePort.

Esporre un'applicazione in IBM Cloud Kubernetes Service utilizzando NodePort
Esporre un'applicazione utilizzando NodePort

  1. Viene inviata una richiesta alla tua applicazione utilizzando l'indirizzo IP pubblico del tuo nodo di lavoro e la NodePort sul nodo di lavoro.

  2. La richiesta viene inoltrata automaticamente alla porta e all'indirizzo IP del cluster interno del servizio NodePort. L'indirizzo IP del cluster interno è accessibile solo all'interno del cluster.

  3. kube-proxy instrada la richiesta al servizio NodePort Kubernetes per l'applicazione.

  4. La richiesta viene inoltrata all'indirizzo IP privato del pod in cui è distribuita l'applicazione. Se nel cluster vengono distribuite più istanze dell'applicazione, il servizio NodePort instrada le richieste tra i pod dell'applicazione.

L'indirizzo IP pubblico del nodo di lavoro non è permanente. Quando un nodo di lavoro viene rimosso o ricreato, a tale nodo viene assegnato un nuovo indirizzo IP pubblico. Puoi utilizzare NodePort per testare l'accesso pubblico per la tua applicazione o se l'accesso pubblico è richiesto solo per un breve periodo. Quando hai bisogno di un indirizzo IP pubblico stabile e di una maggiore disponibilità per il tuo servizio, esponi la tua applicazione utilizzando un Servizio NLB (network load balancer) o Ingress.

Abilitazione dell'accesso a un'applicazione utilizzando un servizio NodePort

Rendi accessibile la tua app come servizio " Kubernetes " NodePort.

Poiché i nodi di lavoro nei cluster VPC non dispongono di un indirizzo IP pubblico, è possibile accedere a un'applicazione tramite un' NodePort e solo se si è connessi alla propria rete VPC privata, ad esempio tramite una connessione VPN. Per accedere a un'applicazione da internet, devi utilizzare invece un servizio programma di bilanciamento del carico VPC o Ingress.

Se non hai già un'app pronta, puoi utilizzare un'app di esempio disponibile su Kubernetes chiamata Guestbook.

Prima di iniziare

Per utilizzare un NodePort,

  1. Nel file di configurazione della tua app, definisci una sezione " service".

    Per l'esempio Guestbook, esiste una sezione del servizio di front-end nel file di configurazione. Per rendere l'applicazione Guestbook disponibile all'esterno, aggiungi il tipo di NodePort e una NodePort compresa nell'intervallo 30000 - 32767 alla sezione del servizio di frontend.

    Esempio

    apiVersion: v1
    kind: Service
    metadata:
      name: <my-nodeport-service>
      labels:
        <my-label-key>: <my-label-value>
    spec:
      selector:
        <my-selector-key>: <my-selector-value>
      type: NodePort
      ports:
       - port: <8081>
         # nodePort: <31514>
    
    Descrizione dei componenti del servizio NodePort
    Componente Descrizione
    name Sostituisci " <my-nodeport-service> " con il nome del tuo servizio NodePort. Ulteriori informazioni sulla protezione delle tue informazioni personali quando utilizzi le risorse Kubernetes.
    labels Sostituisci <my-label-key> e <my-label-value> con l'etichetta che desideri utilizzare per il tuo servizio.
    selector Sostituisci <my-selector-key> e <my-selector-value> con la coppia chiave/valore che hai utilizzato nella sezione spec.template.metadata.labels del tuo file YAML di distribuzione. Per associare il servizio alla distribuzione, il selettore deve mettere in corrispondenza le etichette di distribuzione.
    port Sostituisci <8081> con la porta su cui è in ascolto il tuo servizio.
    nodePort Facoltativo: sostituire <31514> con un indirizzo NodePort compreso nell'intervallo 30000 - 32767. Non specificare una NodePort già utilizzata da un altro servizio. Se non assegni una NodePort, ne verrà assegnata una casuale automaticamente.
    Per specificare un’ NodePort e e verificare quali NodePorts sono già in uso, eseguire il oc get svc comando. Ogni NodePort in utilizzo viene visualizzata nel campo Porte.
  2. Salva il file di configurazione aggiornato.

  3. Quando l'applicazione viene distribuita, puoi utilizzare l'indirizzo IP pubblico di qualsiasi nodo di lavoro e la NodePort per formare l'URL pubblico per accedere all'applicazione da un browser. Se i tuoi nodi di lavoro sono connessi solo a una VLAN privata, è stato creato un servizio NodePort privato ed è possibile accedervi tramite l'indirizzo IP privato di un nodo di lavoro.

    1. Ottieni l'indirizzo IP pubblico per un nodo di lavoro nel cluster. Se vuoi accedere al nodo di lavoro su una rete privata o se hai un cluster VPC, ottieni invece l'indirizzo IP privato.
        ibmcloud oc worker ls --cluster CLUSTER_NAME
        ```
        Output
    
        ```sh {: screen}
        ID                                                Public IP   Private IP    Size     State    Status
        prod-dal10-pa215dcf5bbc0844a990fa6b0fcdbff286-w1  192.0.2.23  10.100.10.10  u3c.2x4  normal   Ready
        prod-dal10-pa215dcf5bbc0844a990fa6b0fcdbff286-w2  192.0.2.27  10.100.10.15  u3c.2x4  normal   Ready
        ```
    2. Se è stato assegnato un NodePort casuale, scopri quale è stato assegnato.
    
    ```sh {: pre}
        oc describe service <service_name>
        ```
        Output
    
        ```sh {: screen}
        NAME:                   <service_name>
        Namespace:              default
        Labels:                 run=<deployment_name>
        Selector:               run=<deployment_name>
        Type:                   NodePort
        IP:                     10.10.10.8
        Port:                   <unset> 8080/TCP
        NodePort:               <unset> 30872/TCP
        Endpoints:              172.30.171.87:8080
        Session Affinity:       None
        No events.
        ```
        In questo esempio, la NodePort è `30872`.
    
        Se nella sezione "**Endpoint** " viene visualizzato " `<none>`", controlla gli indirizzi " `<selectorkey>` " e " `<selectorvalue>` " che utilizzi nella sezione " `spec.selector` " del servizio " NodePort ". Assicurati che corrisponda alla coppia _chiave/valore_ che hai utilizzato nella sezione “ `spec.template.metadata.labels` ” del file YAML di distribuzione.
        {: note}
    
    3. Forma l'URL con uno degli indirizzi IP del nodo di lavoro e la NodePort. Esempio: `http://192.0.2.23:30872`.
            Per i cluster VPC, è necessario essere connessi alla rete privata, ad esempio tramite una connessione VPN, per poter accedere all'indirizzo IP privato del nodo di lavoro e a NodePort.
    {: note}