Esempio: installazione di Calico e configurazione di criteri di rete
Scopri come installare Calico e impostare i criteri di rete su un cluster creato utilizzando Kubernetes Engine (OKE).
Il modello di rete Kubernetes presuppone che i container (pod) abbiano indirizzi IP univoci e instradabili all'interno di un cluster. Nel modello di rete Kubernetes, i container comunicano tra loro utilizzando tali indirizzi IP, indipendentemente dal fatto che i container vengano distribuiti sullo stesso nodo in un cluster o su un nodo diverso. Kubernetes ha adottato la specifica CNI (Container Network Interface) per la gestione delle risorse di rete. Il CNI è costituito da una specifica e librerie per la scrittura di plugin per configurare interfacce di rete in contenitori Linux, insieme a una serie di plugin supportati.
Per impostazione predefinita, i pod accettano il traffico da qualsiasi origine. Per migliorare la sicurezza del cluster, i pod possono essere 'isolati' selezionandoli in un criterio di rete (la risorsa NetworkPolicy Kubernetes). Un criterio di rete è una specifica di come i gruppi di pod possono comunicare tra loro e con altri endpoint di rete. Le risorse NetworkPolicy utilizzano le etichette per selezionare i pod e definire regole che specificano il traffico consentito ai pod selezionati. Se un NetworkPolicy in uno spazio di nomi cluster seleziona un pod specifico, tale pod rifiuterà tutte le connessioni non consentite da alcun NetworkPolicy. Altri pod nello spazio dei nomi non selezionati da un NetworkPolicy continueranno ad accettare tutto il traffico. Per ulteriori informazioni sui criteri di rete, consulta la documentazione di Kubernetes.
I criteri di rete vengono implementati dal provider di rete CNI. La semplice creazione della risorsa NetworkPolicy senza un provider di rete CNI per l'implementazione non avrà alcun effetto. Tenere presente che non tutti i provider di rete CNI implementano la risorsa NetworkPolicy.
Quando si creano cluster con Kubernetes Engine, si seleziona un tipo di rete. Il tipo di rete selezionato determina il provider di rete CNI e il plugin CNI associato utilizzato per il pod networking, come indicato di seguito.
- Networking di pod VCN nativo: utilizza il plugin CNI di networking pod VCN nativo OCI per connettere i nodi di lavoro alle subnet pod in una VCN di Oracle Cloud Infrastructure. Di conseguenza, gli indirizzi IP dei pod all'interno di una VCN vengono instradati direttamente da altre VCN connesse (con peer) a tale VCN e dalle reti on premise. Vedere Uso del plugin CNI Networking pod VCN nativo OCI per il networking pod.
- Overlay multicanale: utilizza il plugin CNI flannel per incapsulare la comunicazione tra pod nella rete di overlay flannel, una semplice rete virtuale di overlay privata che collega gli indirizzi IP ai container. I pod nella rete di overlay privata sono accessibili solo da altri pod nello stesso cluster. Vedere Utilizzo del plugin CNI flannel per il pod networking.
Sebbene sia il plugin CNI Pod Networking VCN nativo OCI che il plugin CNI flannel soddisfino i requisiti del modello di rete Kubernetes, nessuno dei due supporta le risorse NetworkPolicy Kubernetes. Se si desidera migliorare la sicurezza dei cluster creati con Kubernetes Engine implementando i criteri di rete, è necessario installare e configurare un provider di rete che supporti le risorse NetworkPolicy nel cluster. Uno di questi provider è Calico (per un elenco di altri provider di rete, fare riferimento alla documentazione di Kubernetes).
Calico è una soluzione di rete e sicurezza di rete open source per container, virtual machine e carichi di lavoro nativi basati su host. Per ulteriori informazioni su Calico, consulta la documentazione di Calico.
- È possibile utilizzare Calico con pool di nodi gestiti, ma non con pool di nodi virtuali.
-
È supportato solo l'uso di Calico open source. L'utilizzo di Calico Enterprise non è supportato.
-
Se è stato creato un cluster e come tipo di rete è stato selezionato Overlay in flannel, è possibile installare Calico al posto del plugin CNI in flannel (vedere Installing Calico in place of the flannel CNI plugin). Tuttavia, si noti che la modifica del plugin CNI da flannel a Calico si applica solo ai nuovi nodi che vengono successivamente creati nel cluster. Pertanto, si consiglia di non sostituire la flanella con Calico su cluster che hanno già nodi di lavoro esistenti.
Compatibilità Calico
La tabella elenca le versioni del plugin di rete Calico che Oracle ha testato correttamente sui cluster creati utilizzando Kubernetes Engine. Oracle supporta solo le versioni Calico che sono state testate con successo. Per ogni versione di Calico, la tabella mostra la versione di Kubernetes in esecuzione sui cluster nei test riusciti.
Si noti che è supportato solo l'uso di Calico open source. L'utilizzo di Calico Enterprise non è supportato.
Per ulteriori informazioni, vedere Esempio: installazione di Calico e configurazione di criteri di rete.
Versione Calico | Testato (e supportato) sui cluster su cui è in esecuzione Kubernetes 1.30? | Testato (e supportato) sui cluster su cui è in esecuzione Kubernetes 1.31? | Testato (e supportato) sui cluster su cui è in esecuzione Kubernetes 1.32? | Testato (e supportato) sui cluster in cui è in esecuzione Kubernetes 1.33? |
---|---|---|---|---|
3.25.1 |
(non sottoposto a prova) | (non sottoposto a prova) | (non sottoposto a prova) | (non sottoposto a prova) |
3.26.1 |
(non sottoposto a prova) | (non sottoposto a prova) | (non sottoposto a prova) | (non sottoposto a prova) |
3.26.4 |
(non sottoposto a prova) | (non sottoposto a prova) | (non sottoposto a prova) | (non sottoposto a prova) |
3.27.2 |
(non sottoposto a prova) | (non sottoposto a prova) | (non sottoposto a prova) | (non sottoposto a prova) |
3.28.0 |
Sì | (non sottoposto a prova) | (non sottoposto a prova) | (non sottoposto a prova) |
3.28.2 |
(non sottoposto a prova) | Sì | (non sottoposto a prova) | (non sottoposto a prova) |
3.29.2 |
(non sottoposto a prova) | (non sottoposto a prova) | Sì | (non sottoposto a test) |
3.30.0 |
(non sottoposto a test) | (non sottoposto a test) | (non sottoposto a test) | Sì |
Installazione di Calico al posto del plugin CNI flanella
Dopo aver creato un cluster avanzato utilizzando il motore Kubernetes (mediante la console o l'API) e aver selezionato overlay multicanale come tipo di rete, è possibile installare successivamente Calico nel cluster per supportare i criteri di rete.
Prima di installare Calico al posto del plugin CNI flanella, è necessario prima disabilitare il plugin CNI flanella. Si noti che la modifica del plugin CNI da flannel a Calico si applica solo ai nuovi nodi creati successivamente nel cluster. Pertanto, si consiglia di non sostituire la flanella con Calico su cluster che hanno già nodi di lavoro esistenti.
Per comodità, le istruzioni di installazione di Calico sono incluse di seguito. Si noti che le istruzioni di installazione di Calico variano tra le versioni di Calico. Per informazioni sull'installazione di versioni diverse di Calico, fare sempre riferimento alla documentazione di installazione di Calico.
-
Disabilita il componente aggiuntivo cluster plugin CNI flannel. Vedere Disabilitazione (e rimozione) di un componente aggiuntivo del cluster.
-
Se non è già stato fatto, attenersi alla procedura per impostare il file di configurazione kubeconfig del cluster e (se necessario) impostare la variabile di ambiente KUBECONFIG in modo che punti al file. Si noti che è necessario impostare il proprio file kubeconfig. Non è possibile accedere a un cluster utilizzando un file kubeconfig impostato da un altro utente. Vedere Impostazione dell'accesso al cluster.
- Rimuovere il daemon set flanella dallo spazio di nomi kube-system immettendo:
kubectl delete -n kube-system daemonset kube-flannel-ds
-
In una finestra terminale, scaricare il file manifesto Calico per il datastore API Kubernetes immettendo:
curl https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/calico.yaml -o calico.yaml
Si noti che l'URL differisce, a seconda della versione di Calico che si desidera installare.
- Se è stata selezionata un'immagine Oracle Linux 8 per i nodi di lavoro nel cluster, impostare una variabile di ambiente aggiuntiva nel file
calico.yaml
come indicato di seguito.- Aprire il file
calico.yaml
in un editor di testo a scelta. -
Aggiungere la variabile di ambiente seguente alla sezione
env
per il contenitorecalico-node
nel file manifesto del file manifestocalico-node
DaemonSet:- name: FELIX_IPTABLESBACKEND value: "NFT"
- Salvare e chiudere il file
calico.yaml
modificato.
- Aprire il file
-
Installare e configurare Calico immettendo il seguente comando:
kubectl apply -f calico.yaml
Installazione di Calico insieme al plugin CNI Networking pod nativo VCN OCI
Dopo aver creato un cluster utilizzando Kubernetes Engine (mediante la console o l'API) e aver selezionato VCN-native pod networking come tipo di rete, è possibile installare successivamente Calico nel cluster insieme al plugin CNI VCN-Native Pod Networking OCI per supportare i criteri di rete.
Per comodità, le istruzioni di installazione di Calico sono incluse di seguito. Si noti che le istruzioni di installazione di Calico variano tra le versioni di Calico. Per informazioni sull'installazione di versioni diverse di Calico, fare sempre riferimento alla documentazione di installazione di Calico.
-
Se non è già stato fatto, attenersi alla procedura per impostare il file di configurazione kubeconfig del cluster e (se necessario) impostare la variabile di ambiente KUBECONFIG in modo che punti al file. Si noti che è necessario impostare il proprio file kubeconfig. Non è possibile accedere a un cluster utilizzando un file kubeconfig impostato da un altro utente. Vedere Impostazione dell'accesso al cluster.
-
In una finestra di terminale, scaricare il file manifesto solo per i criteri Calico per il datastore API Kubernetes immettendo:
curl https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/calico-policy-only.yaml -o calico-policy-only.yaml
Si noti che l'URL differisce, a seconda della versione di Calico che si desidera installare.
- Il file
calico-policy-only.yaml
include componenti Calico non necessari quando si utilizza Calico insieme al plugin CNI di networking pod VCN nativo OCI, quindi è necessario rimuovere questi componenti. È inoltre necessario impostare alcune variabili di ambiente aggiuntive.- Aprire il file
calico-policy-only.yaml
in un editor di testo a scelta. - Rimuovere la sezione
initContainers
dal file manifesto dicalico-node
DaemonSet. - Rimuovere quanto segue dalla sezione
env
per il contenitorecalico-node
dal file manifesto del filecalico-node
DaemonSet:# Typha support: controlled by the ConfigMap. - name: FELIX_TYPHAK8SSERVICENAME valueFrom: configMapKeyRef: name: calico-config key: typha_service_name
- Rimuovere la sezione
envFrom
seguente per il contenitorecalico-node
dal file manifesto del filecalico-node
DaemonSet:envFrom: - configMapRef: # Allow KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT to be overridden for eBPF mode. name: kubernetes-services-endpoint optional: true
- Rimuovere i seguenti volumi dalla sezione
volumes
del file manifesto del filecalico-node
DaemonSet:cni-bin-dir
cni-net-dir
cni-log-dir
Prima di apportare la modifica, la sezione
volumes
del file manifestocalico-node
DaemonSet è simile alla seguente:... volumes: # Used by calico-node. - name: lib-modules hostPath: path: /lib/modules - name: var-run-calico hostPath: path: /var/run/calico - name: var-lib-calico hostPath: path: /var/lib/calico - name: xtables-lock hostPath: path: /run/xtables.lock type: FileOrCreate - name: sys-fs hostPath: path: /sys/fs/ type: DirectoryOrCreate - name: bpffs hostPath: path: /sys/fs/bpf type: Directory # mount /proc at /nodeproc to be used by mount-bpffs initContainer to mount root cgroup2 fs. - name: nodeproc hostPath: path: /proc # Used to install CNI. - name: cni-bin-dir hostPath: path: /opt/cni/bin - name: cni-net-dir hostPath: path: /etc/cni/net.d # Used to access CNI logs. - name: cni-log-dir hostPath: path: /var/log/calico/cni # Used to create per-pod Unix Domain Sockets - name: policysync hostPath: type: DirectoryOrCreate path: /var/run/nodeagent ...
Dopo aver apportato la modifica, controllare che la sezione
volumes
del file manifestocalico-node
DaemonSet sia simile alla seguente:... volumes: # Used by calico-node. - name: lib-modules hostPath: path: /lib/modules - name: var-run-calico hostPath: path: /var/run/calico - name: var-lib-calico hostPath: path: /var/lib/calico - name: xtables-lock hostPath: path: /run/xtables.lock type: FileOrCreate - name: sys-fs hostPath: path: /sys/fs/ type: DirectoryOrCreate - name: bpffs hostPath: path: /sys/fs/bpf type: Directory # mount /proc at /nodeproc to be used by mount-bpffs initContainer to mount root cgroup2 fs. - name: nodeproc hostPath: path: /proc # Used to create per-pod Unix Domain Sockets - name: policysync hostPath: type: DirectoryOrCreate path: /var/run/nodeagent ...
- Rimuovere i seguenti accessi al volume dalla sezione
volumeMounts
per il contenitorecalico-node
nel file manifesto del filecalico-node
DaemonSet:cni-net-dir
, incluso il commento associato# For maintaining CNI plugin API credentials.
cni-log-dir
Prima di apportare la modifica, la sezione
volumeMounts
è simile alla seguente:... volumeMounts: # For maintaining CNI plugin API credentials. - mountPath: /host/etc/cni/net.d name: cni-net-dir readOnly: false - mountPath: /lib/modules name: lib-modules readOnly: true - mountPath: /run/xtables.lock name: xtables-lock readOnly: false - mountPath: /var/run/calico name: var-run-calico readOnly: false - mountPath: /var/lib/calico name: var-lib-calico readOnly: false - name: policysync mountPath: /var/run/nodeagent # For eBPF mode, we need to be able to mount the BPF filesystem at /sys/fs/bpf so we mount in the # parent directory. - name: bpffs mountPath: /sys/fs/bpf - name: cni-log-dir mountPath: /var/log/calico/cni readOnly: true ...
Dopo aver apportato la modifica, verificare che la sezione
volumeMounts
sia simile alla seguente:... volumeMounts: - mountPath: /lib/modules name: lib-modules readOnly: true - mountPath: /run/xtables.lock name: xtables-lock readOnly: false - mountPath: /var/run/calico name: var-run-calico readOnly: false - mountPath: /var/lib/calico name: var-lib-calico readOnly: false - name: policysync mountPath: /var/run/nodeagent # For eBPF mode, we need to be able to mount the BPF filesystem at /sys/fs/bpf so we mount in the # parent directory. - name: bpffs mountPath: /sys/fs/bpf ...
- Aggiungere le seguenti variabili di ambiente per il contenitore
calico-node
nel file manifesto del filecalico-node
DaemonSet:FELIX_INTERFACEPREFIX="oci"
NO_DEFAULT_POOLS="true"
FELIX_CHAININSERTMODE="Append"
FELIX_IPTABLESMANGLEALLOWACTION="Return"
FELIX_IPTABLESBACKEND="NFT"
Nota: aggiungere questa variabile di ambiente solo se è stata selezionata un'immagine Oracle Linux 8 per i nodi di lavoro nel cluster.
Prima di apportare la modifica, la sezione delle variabili di ambiente del contenitore
calico-node
(env:
) del file manifestocalico-node
DaemonSet è simile alla seguente:... containers: # Runs calico-node container on each Kubernetes node. This # container programs network policy and routes on each # host. - name: calico-node image: docker.io/calico/node:v3.28.0 imagePullPolicy: IfNotPresent env: # Use Kubernetes API as the backing datastore. - name: DATASTORE_TYPE value: "kubernetes" # Configure route aggregation based on pod CIDR. - name: USE_POD_CIDR value: "true" # Wait for the datastore. - name: WAIT_FOR_DATASTORE value: "true" # Set based on the k8s node name. - name: NODENAME valueFrom: fieldRef: fieldPath: spec.nodeName # Don't enable BGP. - name: CALICO_NETWORKING_BACKEND value: "none" # Cluster type to identify the deployment type - name: CLUSTER_TYPE value: "k8s" # Non-calico CNI, disable credential management. - name: CALICO_MANAGE_CNI value: "false" # The default IPv4 pool to create on startup if none exists. Pod IPs will be # chosen from this range. Changing this value after installation will have # no effect. This should fall within `--cluster-cidr`. # - name: CALICO_IPV4POOL_CIDR # value: "192.168.0.0/16" # Disable file logging so `kubectl logs` works. - name: CALICO_DISABLE_FILE_LOGGING value: "true" # Set Felix endpoint to host default action to ACCEPT. - name: FELIX_DEFAULTENDPOINTTOHOSTACTION value: "ACCEPT" # Disable IPv6 on Kubernetes. - name: FELIX_IPV6SUPPORT value: "false" - name: FELIX_HEALTHENABLED value: "true" ...
Dopo aver apportato la modifica, verificare che la sezione delle variabili di ambiente del contenitore
calico-node
(env:
) del file manifestocalico-node
DaemonSet sia simile alla seguente:... containers: # Runs calico-node container on each Kubernetes node. This # container programs network policy and routes on each # host. - name: calico-node image: docker.io/calico/node:v3.28.0 imagePullPolicy: IfNotPresent env: # Use Kubernetes API as the backing datastore. - name: DATASTORE_TYPE value: "kubernetes" # Configure route aggregation based on pod CIDR. - name: USE_POD_CIDR value: "true" # Wait for the datastore. - name: WAIT_FOR_DATASTORE value: "true" # Set based on the k8s node name. - name: NODENAME valueFrom: fieldRef: fieldPath: spec.nodeName # Don't enable BGP. - name: CALICO_NETWORKING_BACKEND value: "none" # Cluster type to identify the deployment type - name: CLUSTER_TYPE value: "k8s" # Non-calico CNI, disable credential management. - name: CALICO_MANAGE_CNI value: "false" # The default IPv4 pool to create on startup if none exists. Pod IPs will be # chosen from this range. Changing this value after installation will have # no effect. This should fall within `--cluster-cidr`. # - name: CALICO_IPV4POOL_CIDR # value: "192.168.0.0/16" # Disable file logging so `kubectl logs` works. - name: CALICO_DISABLE_FILE_LOGGING value: "true" # Set Felix endpoint to host default action to ACCEPT. - name: FELIX_DEFAULTENDPOINTTOHOSTACTION value: "ACCEPT" # Disable IPv6 on Kubernetes. - name: FELIX_IPV6SUPPORT value: "false" - name: FELIX_HEALTHENABLED value: "true" - name: FELIX_INTERFACEPREFIX value: "oci" - name: NO_DEFAULT_POOLS value: "true" - name: FELIX_CHAININSERTMODE value: "Append" - name: FELIX_IPTABLESMANGLEALLOWACTION value: "Return" - name: FELIX_IPTABLESBACKEND value: "NFT" ...
- Salvare e chiudere il file
calico-policy-only.yaml
modificato.
- Aprire il file
-
Installare e configurare Calico immettendo il seguente comando:
kubectl apply -f calico-policy-only.yaml
Impostazione dei criteri di rete
Dopo aver installato Calico su un cluster creato con Kubernetes Engine, puoi creare risorse NetworkPolicy Kubernetes per isolare i pod in base alle esigenze.
Per esempi di NetworkPolicy e come utilizzarli, consultare la documentazione di Calico e in particolare:
- Policy Kubernetes, demo
- Criterio Kubernetes, esercitazione di base
- Criterio Kubernetes, esercitazione avanzata
Si noti che gli esempi variano in base alla versione Calico installata.