IBM Cloud Docs
Verifica dell'accesso alle applicazioni con le NodePort

Verifica dell'accesso alle applicazioni con le NodePort

Virtual Private Cloud Infrastruttura classica Satellite

Rendere l'applicazione containerizzata disponibile per l'accesso a Internet utilizzando l'indirizzo IP pubblico di qualsiasi nodo worker in un cluster Red Hat OpenShift ed esponendo una 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 worker assegnato durante la creazione del cluster e la 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.

Expose an app in IBM Cloud Kubernetes Service by using NodePort
Expose an app by using 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

Esponi la tua applicazione come servizio Kubernetes NodePort.

Poiché i nodi worker nei cluster VPC non hanno un indirizzo IP pubblico, è possibile accedere a un'applicazione tramite una NodePort solo se si è connessi alla 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 avete già un'applicazione pronta, potete usare un'applicazione di esempio Kubernetes chiamata Guestbook.

Prima di iniziare

Per utilizzare una NodePort,

  1. Nel file di configurazione dell'applicazione, definire una sezione di servizio.

    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 Sostituire '<my-nodeport-service> con il nome del servizio NodePort. Ulteriori informazioni sulla protezione delle tue informazioni personali quando utilizzi le risorse Kubernetes.
    labels Sostituire " <my-label-key> e " <my-label-value> con l'etichetta che si desidera utilizzare per il servizio.
    selector Sostituire '<my-selector-key> e '<my-selector-value> con la coppia chiave/valore usata nella sezione 'spec.template.metadata.labels dello YAML di distribuzione. Per associare il servizio alla distribuzione, il selettore deve mettere in corrispondenza le etichette di distribuzione.
    port Sostituire '<8081> con la porta su cui il servizio è in ascolto.
    nodePort Opzionale: Sostituire '<31514> con una NodePort compresa 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 una NodePort e vedere quali NodePorts sono già in uso, eseguire il comando 'oc get svc. 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

      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.

      oc describe service <service_name>
      

      Output

      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 la sezione Endpoints visualizza '<none>, controllare i <selectorkey> e '<selectorvalue> utilizzati nella sezione 'spec.selector del servizio NodePort. Assicurarsi che sia uguale alla coppia chiave/valore usata nella sezione " spec.template.metadata.labels dello YAML di distribuzione.

    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 accedere all'indirizzo IP privato del nodo worker e alla NodePort.