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.
-
Viene inviata una richiesta alla tua applicazione utilizzando l'indirizzo IP pubblico del tuo nodo di lavoro e la NodePort sul nodo di lavoro.
-
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.
-
kube-proxyinstrada la richiesta al servizio NodePort Kubernetes per l'applicazione. -
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
- Accedi al tuo cluster Red Hat OpenShift.
- Cluster VPC: Consenti le richieste di traffico indirizzate a NodePorts sui nodi di lavoro. Per ulteriori informazioni, vedere Comprendere la rete VPC sicura per impostazione predefinita del cluster e Creare e gestire i gruppi di sicurezza VPC.
Per utilizzare un NodePort,
-
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 nameSostituisci " <my-nodeport-service>" con il nome del tuo servizio NodePort. Ulteriori informazioni sulla protezione delle tue informazioni personali quando utilizzi le risorse Kubernetes.labelsSostituisci <my-label-key>e<my-label-value>con l'etichetta che desideri utilizzare per il tuo servizio.selectorSostituisci <my-selector-key>e<my-selector-value>con la coppia chiave/valore che hai utilizzato nella sezionespec.template.metadata.labelsdel tuo file YAML di distribuzione. Per associare il servizio alla distribuzione, il selettore deve mettere in corrispondenza le etichette di distribuzione.portSostituisci <8081>con la porta su cui è in ascolto il tuo servizio.nodePortFacoltativo: 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 iloc get svccomando. Ogni NodePort in utilizzo viene visualizzata nel campo Porte. -
Salva il file di configurazione aggiornato.
-
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.
- 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}