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.

Nota

  • È 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 (non sottoposto a prova) (non sottoposto a prova) (non sottoposto a prova)
3.28.2 (non sottoposto a prova) (non sottoposto a prova) (non sottoposto a prova)
3.29.2 (non sottoposto a prova) (non sottoposto a prova) (non sottoposto a test)
3.30.0 (non sottoposto a test) (non sottoposto a test) (non sottoposto a test)

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.

  1. Disabilita il componente aggiuntivo cluster plugin CNI flannel. Vedere Disabilitazione (e rimozione) di un componente aggiuntivo del cluster.

  2. 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.
  3. Rimuovere il daemon set flanella dallo spazio di nomi kube-system immettendo:
    kubectl delete -n kube-system daemonset kube-flannel-ds
  4. 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.

  5. 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.
    1. Aprire il file calico.yaml in un editor di testo a scelta.
    2. Aggiungere la variabile di ambiente seguente alla sezione env per il contenitore calico-node nel file manifesto del file manifesto calico-node DaemonSet:

                  - name: FELIX_IPTABLESBACKEND
                    value: "NFT"
    3. Salvare e chiudere il file calico.yaml modificato.
  6. 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.

  1. 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.
  2. 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.

  3. 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.
    1. Aprire il file calico-policy-only.yaml in un editor di testo a scelta.
    2. Rimuovere la sezione initContainers dal file manifesto di calico-node DaemonSet.
    3. Rimuovere quanto segue dalla sezione env per il contenitore calico-node dal file manifesto del file calico-node DaemonSet:
                # Typha support: controlled by the ConfigMap.
                - name: FELIX_TYPHAK8SSERVICENAME
                    valueFrom:
                        configMapKeyRef:
                            name: calico-config
                            key: typha_service_name
    4. Rimuovere la sezione envFrom seguente per il contenitore calico-node dal file manifesto del file calico-node DaemonSet:
                envFrom:
                - configMapRef:
                    # Allow KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT to be overridden for eBPF mode.
                    name: kubernetes-services-endpoint
                    optional: true
    5. Rimuovere i seguenti volumi dalla sezione volumes del file manifesto del file calico-node DaemonSet:
      • cni-bin-dir
      • cni-net-dir
      • cni-log-dir

      Prima di apportare la modifica, la sezione volumes del file manifesto calico-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 manifesto calico-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
                ...
    6. Rimuovere i seguenti accessi al volume dalla sezione volumeMounts per il contenitore calico-node nel file manifesto del file calico-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
                    ...
    7. Aggiungere le seguenti variabili di ambiente per il contenitore calico-node nel file manifesto del file calico-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 manifesto calico-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 manifesto calico-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"         
                  ...
    8. Salvare e chiudere il file calico-policy-only.yaml modificato.
  4. Installare e configurare Calico immettendo il seguente comando:

    kubectl apply -f calico-policy-only.yaml