Ejemplo: instalación de Calico y configuración de políticas de red
Descubra cómo instalar Calico y configurar políticas de red en un cluster creado mediante Container Engine for Kubernetes (OKE).
El modelo de red de Kubernetes asume que los contenedores (pods) tienen direcciones IP únicas y enrutables dentro de un cluster. En el modelo de red de Kubernetes, los contenedores se comunican entre sí utilizando esas direcciones IP, independientemente de si los contenedores se despliegan en el mismo nodo de un cluster o en un nodo diferente. Kubernetes ha adoptado la especificación de la interfaz de red de contenedor (CNI) para la gestión de recursos de red. El CNI consta de una especificación y bibliotecas para escribir plugins para configurar interfaces de red en contenedores Linux, junto con una serie de plugins admitidos.
Por defecto, los pods aceptan tráfico de cualquier origen. Para mejorar la seguridad del cluster, los pods se pueden "aislar" seleccionándolos en una política de red (el recurso NetworkPolicy de Kubernetes). Una política de red es una especificación de cómo se permite a los grupos de pods comunicarse entre sí y con otros puntos finales de red. Los recursos NetworkPolicy utilizan etiquetas para seleccionar pods y definir reglas que especifiquen el tráfico permitido para los pods seleccionados. Si un NetworkPolicy en un espacio de nombre de cluster selecciona un pod concreto, ese pod rechazará las conexiones que no estén permitidas por ningún NetworkPolicy. Otros pods del espacio de nombre que no estén seleccionados en NetworkPolicy seguirán aceptando todo el tráfico. Para obtener más información sobre las políticas de red, consulte la documentación de Kubernetes.
Las políticas de red se implementan mediante el proveedor de red CNI. Simplemente crear el recurso NetworkPolicy sin un proveedor de red CNI para implementarlo no tendrá ningún efecto. Tenga en cuenta que no todos los proveedores de red CNI implementan el recurso NetworkPolicy.
Al crear clusters con Container Engine for Kubernetes, seleccione un tipo de red. El tipo de red que seleccione determina el proveedor de red CNI y el plugin CNI asociado que se utiliza para redes de pod, de la siguiente manera:
- Red de pods nativos de VCN: utiliza el plugin CNI de red de pods nativos de OCI para conectar nodos de trabajador a subredes de pod en una VCN de Oracle Cloud Infrastructure. Como resultado, las direcciones IP de los pods de una VCN pueden enrutarse directamente desde otras VCN conectadas (conexión por intercambio de tráfico) a esa VCN, desde redes locales e Internet. Consulte Using the OCI VCN-Native Pod Networking CNI plugin for pod network.
- Superposición de franela: utiliza el plugin CNI de franela para encapsular la comunicación entre pods en la red de superposición de franela, una red virtual de superposición privada simple que asocia direcciones IP a contenedores. Solo se puede acceder a los pods de la red de superposición privada desde otros pods del mismo cluster. Consulte Uso del plugin de canal CNI para redes de pod.
Aunque tanto el plugin CNI de red de pod nativo de VCN de OCI como el plugin CNI de canal satisfacen los requisitos del modelo de red de Kubernetes, ninguno de ellos soporta los recursos NetworkPolicy de Kubernetes. Si desea mejorar la seguridad de los clusters creados con Container Engine for Kubernetes implementando políticas de red, debe instalar y configurar un proveedor de red que soporte recursos NetworkPolicy junto con el plugin de CNI utilizado en el cluster. Uno de estos proveedores es Calico (consulte la documentación de Kubernetes para obtener una lista de otros proveedores de red).
Calico es una solución de seguridad de red y red de código abierto para contenedores, máquinas virtuales y cargas de trabajo nativas basadas en host. Para obtener más información sobre Calico, consulte la documentación de Calico.
- Puede utilizar Calico con pools de nodos gestionados, pero no con pools de nodos virtuales.
-
Solo está soportado el uso de Calico de código abierto. El uso de Calico Enterprise no está soportado.
- En el caso del canal, si instala Calico en un cluster que tiene pools de nodos existentes en los que los pods ya se están ejecutando, tendrá que reiniciar los pods cuando finalice la instalación de Calico. Por ejemplo, ejecutando el comando
kubectl rollout restart
. Si instala Calico en un cluster antes de crear pools de nodos en el cluster (recomendado), se asegurará de que no tendrá que reiniciar.
Compatibilidad con Calico
En la tabla se muestran las versiones del plugin de red de Calico que Oracle ha probado correctamente en clusters creados mediante Container Engine for Kubernetes. Oracle solo admite versiones de Calico que se hayan probado correctamente. Para cada versión de Calico, la tabla muestra la versión de Kubernetes que se estaba ejecutando en clusters en pruebas correctas.
Tenga en cuenta que solo está soportado el uso de Calico de código abierto. El uso de Calico Enterprise no está soportado.
Para obtener más información, consulte Ejemplo: instalación de Calico y configuración de políticas de red.
Versión de Calico | ¿Está probado (y soportado) en clusters que ejecutan Kubernetes 1.27? | ¿Está probado (y soportado) en clusters que ejecutan Kubernetes 1.28? | ¿Está probado (y soportado) en clusters que ejecutan Kubernetes 1.29? | ¿Está probado (y soportado) en clusters que ejecutan Kubernetes 1.30? |
---|---|---|---|---|
3,25 | (no se ha probado) | (no se ha probado) | (no se ha probado) | (no se ha probado) |
3,26 | Sí | (no se ha probado) | (no se ha probado) | (no se ha probado) |
3,26 | (no se ha probado) | Sí | (no se ha probado) | (no se ha probado) |
3,27 | (no se ha probado) | (no se ha probado) | Sí | (no se ha probado) |
3,28 | (no se ha probado) | (no se ha probado) | (no se ha probado) | Sí |
Instalación de Calico junto con el plugin CNI de franela
Una vez que haya creado un cluster mediante Container Engine for Kubernetes (con la Consola o la API) y haya seleccionado flannel overlay como Network type, puede instalar posteriormente Calico en el cluster junto con el plugin de CNI de flannel para soportar políticas de red.
Para su comodidad, las instrucciones de instalación de Calico se incluyen a continuación. Tenga en cuenta que las instrucciones de instalación de Calico varían según la versión de Calico. Para obtener información sobre la instalación de diferentes versiones de Calico, consulte siempre la documentación de instalación de Calico.
-
Si todavía no lo ha hecho, siga los pasos para configurar el archivo de configuración kubeconfig del cluster y (si es necesario) defina la variable de entorno KUBECONFIG para que apunte al archivo. Tenga en cuenta que debe configurar su propio archivo kubeconfig. No puede acceder a un cluster utilizando un archivo kubeconfig que haya configurado un usuario diferente. Consulte Configuración del acceso a los clusters.
-
En una ventana de terminal, descargue el manifiesto solo de políticas de Calico para el almacén de datos de API de Kubernetes introduciendo:
curl https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/calico-policy-only.yaml -o calico.yaml
Tenga en cuenta que la URL difiere según la versión de Calico que desee instalar.
- Debe definir una o más variables de entorno adicionales en el archivo calico-policy-only.yaml.
- Abra el archivo calico-policy-only.yaml en un editor de texto de su elección.
- Agregue las siguientes variables de entorno para el contenedor
calico-node
en el manifiesto decalico-node
DaemonSet:CALICO_MANAGE_CNI="true"
FELIX_IPTABLESBACKEND="NFT"
Nota: solo agregue esta variable de entorno si ha seleccionado una imagen de Oracle Linux 8 para nodos de trabajador en el cluster.
Antes de realizar el cambio, la sección de variables de entorno de contenedor
calico-node
(env:
) del manifiestocalico-node
DaemonSet tiene el siguiente aspecto:... 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.25.1 env: # Use Kubernetes API as the backing datastore. - name: DATASTORE_TYPE value: "kubernetes" # 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" - name: CLUSTER_TYPE value: "k8s" - name: FELIX_HEALTHENABLED value: "true" - name: FELIX_LOGSEVERITYSCREEN value: "Info" # Disable file logging so `kubectl logs` works. - name: CALICO_DISABLE_FILE_LOGGING value: "true" # Disable IPv6 on Kubernetes. - name: FELIX_IPV6SUPPORT value: "false"
Después de realizar el cambio, compruebe que la sección de variables de entorno de contenedor
calico-node
(env:
) del manifiestocalico-node
DaemonSet tenga el siguiente aspecto:... 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.25.1 env: # Use Kubernetes API as the backing datastore. - name: DATASTORE_TYPE value: "kubernetes" # 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" - name: CLUSTER_TYPE value: "k8s" - name: FELIX_HEALTHENABLED value: "true" - name: FELIX_LOGSEVERITYSCREEN value: "Info" # Disable file logging so `kubectl logs` works. - name: CALICO_DISABLE_FILE_LOGGING value: "true" # Disable IPv6 on Kubernetes. - name: FELIX_IPV6SUPPORT value: "false" - name: CALICO_MANAGE_CNI value: "true" - name: FELIX_IPTABLESBACKEND value: "NFT" ...
- Guarde y cierre el archivo
calico-policy-only.yaml
modificado.
-
Instale y configure Calico introduciendo el siguiente comando:
kubectl apply -f calico.yaml
Instalación de Calico junto con el plugin de CNI de red de pod nativos de VCN de OCI
Después de crear un cluster mediante Container Engine for Kubernetes (mediante la consola o la API) y seleccionar redes de pods nativas de VCN como tipo de red, puede instalar posteriormente Calico en el cluster junto con el plugin CNI de red de pod nativo de VCN de OCI para soportar políticas de red.
Para su comodidad, las instrucciones de instalación de Calico se incluyen a continuación. Tenga en cuenta que las instrucciones de instalación de Calico varían según la versión de Calico. Para obtener información sobre la instalación de diferentes versiones de Calico, consulte siempre la documentación de instalación de Calico.
-
Si todavía no lo ha hecho, siga los pasos para configurar el archivo de configuración kubeconfig del cluster y (si es necesario) defina la variable de entorno KUBECONFIG para que apunte al archivo. Tenga en cuenta que debe configurar su propio archivo kubeconfig. No puede acceder a un cluster utilizando un archivo kubeconfig que haya configurado un usuario diferente. Consulte Configuración del acceso a los clusters.
-
En una ventana de terminal, descargue el manifiesto solo de políticas de Calico para el almacén de datos de API de Kubernetes introduciendo:
curl https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/calico-policy-only.yaml -o calico.yaml
Tenga en cuenta que la URL difiere según la versión de Calico que desee instalar.
- El archivo calico-policy-only.yaml incluye componentes de Calico que no son necesarios al utilizar Calico junto con el plugin CNI de redes de pod nativo de VCN de OCI, por lo que debe eliminar estos componentes. También debe definir algunas variables de entorno adicionales.
- Abra el archivo calico-policy-only.yaml en un editor de texto de su elección.
- Elimine la sección
initContainers
del manifiesto decalico-node
DaemonSet. - Elimine lo siguiente de la sección
env
para el contenedorcalico-node
del manifiesto decalico-node
DaemonSet:# Typha support: controlled by the ConfigMap. - name: FELIX_TYPHAK8SSERVICENAME valueFrom: configMapKeyRef: name: calico-config key: typha_service_name
- Elimine la siguiente sección
envFrom
para el contenedorcalico-node
del manifiesto decalico-node
DaemonSet:envFrom: - configMapRef: # Allow KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT to be overridden for eBPF mode. name: kubernetes-services-endpoint optional: true
- Elimine los siguientes volúmenes de la sección
volumes
del manifiesto decalico-node
DaemonSet:cni-bin-dir
cni-net-dir
cni-log-dir
Antes de realizar el cambio, la sección
volumes
del manifiestocalico-node
DaemonSet tiene el siguiente aspecto:... 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: sysfs hostPath: path: /sys/fs/ type: DirectoryOrCreate # 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 ...
Después de realizar el cambio, compruebe que la sección
volumes
del manifiestocalico-node
DaemonSet tenga el siguiente aspecto:... 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: sysfs hostPath: path: /sys/fs/ type: DirectoryOrCreate # Used to create per-pod Unix Domain Sockets - name: policysync hostPath: type: DirectoryOrCreate path: /var/run/nodeagent ...
- Elimine los siguientes montajes de volumen de la sección
volumeMounts
para el contenedorcalico-node
en el manifiesto decalico-node
DaemonSet:cni-net-dir
, incluido el comentario asociado# For maintaining CNI plugin API credentials.
cni-log-dir
Antes de realizar el cambio, la sección
volumeMounts
tiene el siguiente aspecto:... 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 ...
Después de realizar el cambio, compruebe que la sección
volumeMounts
tiene el siguiente aspecto:... 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 ...
- Agregue las siguientes variables de entorno para el contenedor
calico-node
en el manifiesto decalico-node
DaemonSet:FELIX_INTERFACEPREFIX="oci"
NO_DEFAULT_POOLS="true"
FELIX_CHAININSERTMODE="Append"
FELIX_IPTABLESMANGLEALLOWACTION="Return"
FELIX_IPTABLESBACKEND="NFT"
Nota: solo agregue esta variable de entorno si ha seleccionado una imagen de Oracle Linux 8 para nodos de trabajador en el cluster.
Antes de realizar el cambio, la sección de variables de entorno de contenedor
calico-node
(env:
) del manifiestocalico-node
DaemonSet tiene el siguiente aspecto:... 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.25.1 env: # Use Kubernetes API as the backing datastore. - name: DATASTORE_TYPE value: "kubernetes" # 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" - name: CLUSTER_TYPE value: "k8s" - name: FELIX_HEALTHENABLED value: "true" - name: FELIX_LOGSEVERITYSCREEN value: "Info" # Disable file logging so `kubectl logs` works. - name: CALICO_DISABLE_FILE_LOGGING value: "true" # Disable IPv6 on Kubernetes. - name: FELIX_IPV6SUPPORT value: "false"
Después de realizar el cambio, compruebe que la sección de variables de entorno de contenedor
calico-node
(env:
) del manifiestocalico-node
DaemonSet tenga el siguiente aspecto:... 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.25.1 env: # Use Kubernetes API as the backing datastore. - name: DATASTORE_TYPE value: "kubernetes" # 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" - name: CLUSTER_TYPE value: "k8s" - name: FELIX_HEALTHENABLED value: "true" - name: FELIX_LOGSEVERITYSCREEN value: "Info" # Disable file logging so `kubectl logs` works. - name: CALICO_DISABLE_FILE_LOGGING value: "true" # Disable IPv6 on Kubernetes. - name: FELIX_IPV6SUPPORT value: "false" # Configuration for Native Pod Networking - 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" ...
- Guarde y cierre el archivo
calico-policy-only.yaml
modificado.
-
Instale y configure Calico introduciendo el siguiente comando:
kubectl apply -f calico.yaml
Configuración de políticas de red
Una vez haya instalado Calico en un cluster creado con Container Engine for Kubernetes, puede crear recursos NetworkPolicy de Kubernetes para aislar pods según sea necesario.
Para ver ejemplos de NetworkPolicy y cómo usarlos, consulte la documentación de Calico y concretamente:
- Política de Kubernetes, demostración
- Política de Kubernetes, tutorial básico
- Política de Kubernetes, tutorial avanzado
Tenga en cuenta que los ejemplos varían según la versión de Calico que haya instalado.