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.
-
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-proxy
instrada 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
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
- Accedi al tuo cluster Red Hat OpenShift.
- Cluster VPC: consenti le richieste di traffico instradate a NodePorts sui tuoi nodi di lavoro.
Per utilizzare una NodePort,
-
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. -
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
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
-
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. -
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.
-