Nota
- Questa esercitazione richiede l'accesso a Oracle Cloud. Per iscriverti a un account gratuito, consulta Inizia a utilizzare Oracle Cloud Infrastructure Free Tier.
- Utilizza valori di esempio per le credenziali, la tenancy e i compartimenti di Oracle Cloud Infrastructure. Al termine del laboratorio, sostituisci questi valori con quelli specifici del tuo ambiente cloud.
Utilizza il plugin CNI di networking pod nativi VCN OCI per fornire servizi di networking a Oracle Cloud Infrastructure Container Engine for Kubernetes
Introduzione
Per impostazione predefinita, Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE) utilizza il plugin CNI (VCN-Native Container Network Interface) di Oracle Cloud Infrastructure (OCI) per fornire funzioni di rete o di sicurezza per le applicazioni containerizzate. In questa esercitazione viene descritto come verificare il plugin CNI utilizzato e come utilizzare questo plugin CNI predefinito (plugin CNI nativo VCN OCI) per configurare un servizio OCI Load Balancer e collegarlo a un'applicazione in esecuzione all'interno di un contenitore.
Il vantaggio dell'utilizzo del plugin CNI di networking pod nativi VCN OCI è che i pod o i container riceveranno un indirizzo IP dalla subnet privata nella VCN. Ciò significa che i pod Kubernetes si trovano nella stessa rete delle VM (istanze) o dei nodi baremetal o di altri carichi di lavoro.
Obiettivi
- Vedremo come possiamo verificare il plugin CNI predefinito utilizzato da OKE. Distribuiremo una nuova applicazione in container Nginx per eseguire il test di alcune funzioni di rete di base del plugin CNI nativo VCN OCI predefinito e sfruttare il plugin CNI di networking pod VCN nativo OCI per creare un nuovo servizio di rete di tipo load balancer ed esporre tale servizio alla nostra applicazione Nginx distribuita. Alla fine, cancelleremo l'applicazione e il servizio di load balancer.
Task 1: distribuire un cluster Kubernetes utilizzando OKE
Per ulteriori informazioni sui diversi modelli di distribuzione OKE che è possibile scegliere, vedere Esempio di configurazioni delle risorse di rete.
Di seguito sono riportati i modelli di distribuzione OKE di esempio.
-
Esempio 1: cluster con plugin CNI Flannel, endpoint dell'API Kubernetes pubblico, nodi di lavoro privati e load balancer pubblici.
-
Esempio 2: cluster con plugin CNI Flannel, endpoint dell'API Kubernetes privato, nodi di lavoro privati e load balancer pubblici.
-
Esempio 3: cluster con plugin CNI OCI, endpoint API Kubernetes pubblico, nodi di lavoro privati e load balancer pubblici.
-
Esempio 4: cluster con plugin CNI OCI, endpoint API Kubernetes privato, nodi di lavoro privati e load balancer pubblici.
Verrà selezionato il modello di distribuzione Esempio 3. Per ulteriori informazioni, consulta la sezione relativa all'impostazione di Oracle Cloud Infrastructure Container Engine for Kubernetes con tre nodi di lavoro.
Task 2: verificare il plugin CNI installato
Quando il cluster Kubernetes che utilizza OKE è completamente distribuito ed è possibile accedervi, è possibile eseguire il comando seguente.
-
eseguire il comando seguente.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ **kubectl get all -n kube-system** NAME READY STATUS RESTARTS AGE pod/coredns-64ffdf5cf7-lvrhq 1/1 Running 0 2d pod/coredns-64ffdf5cf7-rmxt8 1/1 Running 0 2d pod/coredns-64ffdf5cf7-vq76p 1/1 Running 0 2d pod/csi-oci-node-ghff6 1/1 Running 0 2d pod/csi-oci-node-jrjpr 1/1 Running 0 2d pod/csi-oci-node-r68qz 1/1 Running 1 (2d ago) 2d pod/kube-dns-autoscaler-5bb955d5c-r2j2q 1/1 Running 0 2d pod/kube-proxy-5cznp 1/1 Running 0 2d pod/kube-proxy-fddrd 1/1 Running 0 2d pod/kube-proxy-sb769 1/1 Running 0 2d pod/proxymux-client-7s7f9 1/1 Running 0 2d pod/proxymux-client-lngrm 1/1 Running 0 2d pod/proxymux-client-qxlf2 1/1 Running 0 2d **pod/vcn-native-ip-cni-hkfjz 1/1 Running 0 2d pod/vcn-native-ip-cni-pdv4c 1/1 Running 0 2d pod/vcn-native-ip-cni-qfvk8 1/1 Running 0 2d** NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kube-dns ClusterIP 10.96.5.5 <none> 53/UDP,53/TCP,9153/TCP 2d NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/csi-oci-node 3 3 3 3 3 <none> 2d daemonset.apps/kube-proxy 3 3 3 3 3 beta.kubernetes.io/os=linux 2d daemonset.apps/node-termination-handler 0 0 0 0 0 oci.oraclecloud.com/oke-is-preemptible=true 2d daemonset.apps/nvidia-gpu-device-plugin 0 0 0 0 0 <none> 2d daemonset.apps/proxymux-client 3 3 3 3 3 node.info.ds_proxymux_client=true 2d **daemonset.apps/vcn-native-ip-cni 3 3 3 3 3 <none> 2d** NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/coredns 3/3 3 3 2d deployment.apps/kube-dns-autoscaler 1/1 1 1 2d NAME DESIRED CURRENT READY AGE replicaset.apps/coredns-64ffdf5cf7 3 3 3 2d replicaset.apps/kube-dns-autoscaler-5bb955d5c 1 1 1 2d iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Si noti che il nome è
vcn-native
nell'output nella sezione pod. -
Si noti che il nome è
vcn-native
nell'output della sezione del daemonet.
Verrà visualizzato che il plugin CNI di networking pod VCN nativi OCI è attualmente utilizzato per questa distribuzione OKE distribuita.
Task 3: Distribuzione di un'applicazione di esempio
Questa applicazione di esempio verrà utilizzata insieme al plugin CNI di networking pod VCN nativi OCI e abiliterà il tipo di servizio OCI Load Balancer nel task successivo.
-
Eseguire il comando seguente per distribuire un'applicazione Nginx di esempio in OKE.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl apply -f https://k8s.io/examples/application/deployment.yaml deployment.apps/nginx-deployment created
-
Eseguire il comando seguente per verificare i dettagli dell'applicazione Nginx di esempio distribuita.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl describe deployment nginx-deployment Name: nginx-deployment Namespace: default CreationTimestamp: Fri, 08 Mar 2024 07:57:02 +0000 Labels: <none> Annotations: deployment.kubernetes.io/revision: 1 Selector: app=nginx Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 25% max unavailable, 25% max surge Pod Template: Labels: app=nginx Containers: nginx: Image: nginx:1.14.2 Port: 80/TCP Host Port: 0/TCP Environment: <none> Mounts: <none> Volumes: <none> Conditions: Type Status Reason ---- ------ ------ Available True MinimumReplicasAvailable Progressing True NewReplicaSetAvailable OldReplicaSets: <none> NewReplicaSet: nginx-deployment-86dcfdf4c6 (2/2 replicas created) Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 14s deployment-controller Scaled up replica set nginx-deployment-86dcfdf4c6 to 2 iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Si noti che l'applicazione viene distribuita utilizzando due pod.
-
Eseguire il comando seguente per esaminare più da vicino i pod distribuiti.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-deployment-86dcfdf4c6-fdxgz 1/1 Running 0 3m46s nginx-deployment-86dcfdf4c6-fqrkh 1/1 Running 0 3m46s iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Si noti che esistono due istanze, due pod o repliche dell'applicazione Nginx e che lo stato è impostato su RUNNING.
Nel diagramma seguente è possibile trovare una rappresentazione visiva della distribuzione. Concentrati sui due pod distribuiti all'interno dei nodi di lavoro.
Il vantaggio di utilizzare il plugin CNI di networking pod nativi VCN OCI è che i pod o i container riceveranno un indirizzo IP dalla subnet privata nella VCN. Ciò significa che i pod Kubernetes si trovano nella stessa rete delle VM (istanze) o dei nodi baremetal o di altri carichi di lavoro.
Task 4: configurare i servizi Kubernetes del tipo di load balancer
Abbiamo la nostra applicazione di esempio in esecuzione all'interno di OKE, è il momento di esporre l'applicazione alla rete o a Internet collegando un servizio di rete di tipo load balancer all'applicazione.
-
Controllare i servizi in esecuzione esistenti nel cluster Kubernetes.
-
Eseguire il comando riportato di seguito per rivedere i servizi in esecuzione esistenti nel cluster Kubernetes.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP,12250/TCP 2d23h iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Si noti che l'unico servizio in esecuzione appartiene al piano di controllo Kubernetes.
-
-
Aggiungere un servizio di rete all'applicazione.
-
Eseguire il comando riportato di seguito per distribuire un nuovo servizio di rete plugin CNI VCN nativo OCI di tipo load balancer ed esporre questo nuovo servizio all'applicazione.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl expose deployment nginx-deployment --type=LoadBalancer --name=my-service service/my-service exposed iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Si noti che il servizio è stato esposto correttamente.
-
-
Controllare i servizi in esecuzione esistenti nel cluster Kubernetes.
-
Eseguire il comando riportato di seguito per rivedere i servizi in esecuzione esistenti nel cluster Kubernetes.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP,12250/TCP 2d23h my-service LoadBalancer 10.96.209.132 xxx.xxx.xxx.167 80:32291/TCP 53s iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Si noti che il servizio appena configurato è ora nell'elenco.
-
Prendere nota dell'indirizzo
EXTERNAL-IP
(indirizzo IP pubblico) assegnato al load balancer che termina con.167
. -
Fare clic sull'icona di riduzione per ridurre al minimo OCI Cloud Shell.
-
-
Copiare l'indirizzo IP pubblico e incollarlo nel browser Web. Ora è possibile accedere al server Web Nginx distribuito su un container all'interno di Oracle Cloud Infrastructure Container Engine for Kubernetes.
-
Possiamo anche dare un'occhiata più da vicino a ciò che sta accadendo in background utilizzando OCI Console.
-
Fare clic su Networking.
-
Fare clic su Load balancer.
-
-
Fare clic su Load balancer.
- Si noti che è stato distribuito un nuovo load balancer con l'indirizzo IP pubblico che termina con
.167
. - Fare clic sul load balancer.
- Si noti che il load balancer è ACTIVE.
- Scorri in basso.
- Rivedere i dettagli di configurazione del load balancer distribuito.
- Fare clic su Ripristina per ripristinare OCI Cloud Shell.
- Si noti che è stato distribuito un nuovo load balancer con l'indirizzo IP pubblico che termina con
Nel diagramma riportato di seguito è possibile trovare una rappresentazione visiva della distribuzione del load balancer. Concentrati sul load balancer.
Task 5: rimuovere l'applicazione di esempio e i servizi Kubernetes del tipo di load balancer
Abbiamo distribuito un'applicazione di esempio e creato un nuovo servizio di rete Kubernetes di tipo load balancer. È ora di eseguire il cleanup dell'applicazione e del servizio.
-
Rimuovere il servizio load balancer.
-
Eseguire il comando riportato di seguito per eliminare il servizio del load balancer.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl delete service my-service -n default service "my-service" deleted
-
Si noti che il servizio load balancer è stato eliminato correttamente.
-
Eseguire il comando riportato di seguito per verificare che il servizio load balancer sia stato eliminato.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP,12250/TCP 2d23h iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Si noti che il servizio load balancer viene eliminato.
-
-
Rimuovere l'applicazione di esempio.
-
Eseguire il comando riportato di seguito per recuperare i pod esistenti.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-deployment-86dcfdf4c6-fdxgz 1/1 Running 0 36m nginx-deployment-86dcfdf4c6-fqrkh 1/1 Running 0 36m
-
Si noti che l'applicazione Nginx è ancora in esecuzione.
-
Eseguire il comando seguente per eliminare la distribuzione dell'applicazione Nginx.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl delete deployment nginx-deployment --namespace default deployment.apps "nginx-deployment" deleted
-
Eseguire il comando seguente per recuperare di nuovo i pod esistenti e verificare che la distribuzione sia stata eliminata.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get pods No resources found in default namespace. iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Si noti che l'applicazione Nginx viene eliminata.
-
Fare clic sull'icona di riduzione per ridurre al minimo OCI Cloud Shell.
- Si noti che OCI Console visualizzerà un messaggio che informa l'eliminazione del load balancer.
- Fare clic su Chiudi.
-
Si noti che non è più distribuito alcun load balancer.
Nel diagramma riportato di seguito è possibile trovare una rappresentazione visiva dell'eliminazione del load balancer. Concentrati sulla parte in cui il load balancer non viene più distribuito.
Collegamenti correlati
Conferme
- Autore - Iwan Hoogendoorn (esperto di rete OCI)
Altre risorse di apprendimento
Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti gratuiti sulla formazione su Oracle Learning YouTube channel. Inoltre, visita education.oracle.com/learning-explorer per diventare un Oracle Learning Explorer.
Per la documentazione del prodotto, visita l'Oracle Help Center.
Use OCI VCN-Native Pods Networking CNI Plugin to Provide Networking Services to Oracle Cloud Infrastructure Container Engine for Kubernetes
F95769-01
March 2024