Skip to main content

Illumio Segmentation for Containers

Prepare Your Environment

You need to do these steps before creating clusters or pairing profiles in the PCE, or subsequent deployment.

Caution

If the prerequisite steps are not done before deployment, then containerized environments and Kubelink can get disrupted.

Unique Machine ID

Some of the functionality and services provided by the Illumio C-VEN and Kubelink depend on the Linux machine ID of each Kubernetes cluster node. Each machine ID must be unique in order to take advantage of the functionality. By default, the Linux operating system generates a random machine IDto give each Linux host uniqueness. However, there are cases when machine IDs can be duplicated across machines. This is common across deployments that clone machines from a golden image, for example, spinning up virtual machines from VMware templates, creating compute instances from a reference image, or from a template from a Public Cloud source.

Important

Illumio Core requires a unique machine ID on all nodes. This issue is more likely to occur with on-premises or IaaS deployments, rather than with Managed Kubernetes Services (from Cloud Service Providers). For more information, see "Troubleshooting".

Create Labels

For details on creating labels, see "Labels and Label Groups" in Security Policy Guide. The labels shown below are used in examples throughout this document. You are not required to use the same labels.

Name

Label Type

Kubernetes Cluster

Application

OpenShift Cluster

Application

Production

Environment

Development

Environment

Data Center

Location

Cloud

Location

Kubelink

Role

Node

Role

Control Plane Node (formerly Master)

Role

Worker

Role

Note

Starting in Illumio Core for Kubernetes 4.2.0, you can map Kubernetes labels to Illumio labels by using a Container Resource Definition in your illumio-values.yaml with the Helm Chart deployment. See Map Kubernetes Labels to Illumio Labels.

Resource Allocation Guidelines

New resource allocation guidelines have been developed to help configure deployments to achieve optimal performance and cost-efficiency.

These guidelines are grouped into the following general deployment sizes:

  • Small-scale: Customers with limited Kubernetes deployments and moderate workloads.

  • Medium-scale: Customers with moderate-sized Kubernetes environments and growing workloads.

  • Large-scale: Customers with extensive Kubernetes deployments and high-performance requirements.

The following variables determine the deployment sizes listed above:

  • Number of nodes per cluster

  • Total number of workloads per cluster

  • Total policy size per cluster

Set the resources values in the appropriate pod spec (Kubelink or C-VEN) yaml file under the storage section, as shown in the following example:

storage:
  sizeGi: 1
  resources:
    limits:
      memory: 600Mi
    requests:
      memory: 500Mi
      cpu: 500m

If you have two parameters that match one category, and a third parameter that matches another, it’s important to select the category based on the highest value among them.

For instance, if the number of nodes per cluster is 8, and the total number of Kubernetes workloads is 500, but the average size of the policy is 1 Gi, the resource allocation should align with the large-scale resource allocation. This ensures that your resources are appropriately scaled to meet the demands of your workloads, optimizing performance and stability.

In practice, monitor these resources, and if usage is at 80% of these limits, then consider increasing.

NOTE that amounts are expressed in mebibytes (Mi) and gibibytes (Gi) and not in megabytes (MB) or gigabytes (GB).

Small-scale resource allocation

Customer Category

Nodes per Cluster

Total K8s Workloads

Total Policy Size

Small-scale

1 - 10

0 - 1000

0 - 1.5 Mi

Resources 

C-VEN 

Kubelink 

Storage 

Requests

CPU

0.5

0.5

0.5

Requests

memory

600 Mi

500 Mi

500 Mi

Limits

CPU

1

1

1

Limits

memory

700 Mi

600 Mi

600 Mi

Volumes

size limits

n/a

n/a

1 Gi

Medium-scale resource allocation

Customer Category

Nodes per Cluster

Total K8s Workloads

Total Policy Size

Medium-scale

10 - 20

1000 - 5000

1.5 Mi - 500 Mi

Resources 

C-VEN 

Kubelink 

Storage 

Requests

CPU

2

2

1

Requests

memory

3 Gi

5 Gi

5 Gi

Limits

CPU

3

2

2

Limits

memory

5 Gi

7 Gi

7 Gi

Volumes

size limits

n/a

n/a

5 Gi

Large-scale resource allocation

Customer Category

Nodes per Cluster

Total K8s Workloads

Total Policy Size

Large-scale

20+

5000 - 8000

500 Mi - 1.5 Gi

Resources 

C-VEN 

Kubelink 

Storage 

Requests

CPU

2

3

1

Requests

memory

6 Gi

10 Gi

10 Gi

Limits

CPU

3

4

2

Limits

memory

8 Gi

12 Gi

12 Gi

Volumes

size limits

n/a

n/a

10 Gi

Configure Calico in Append Mode

In case your cluster is configured with Calico as the network plugin (usually for Kubernetes and not for OpenShift), both Calico and Illumio Core will write iptables or nftables rules on the cluster nodes.

  • Calico - Needs to write iptables or nftables rules to instruct the host how to forward packets (overlay, IPIP, NAT, and so on).

  • Illumio Core - Needs to write iptables or nftables rules to secure communications between nodes and/or Pods.

You should establish a hierarchy to make the firewall coexistence work smoothly because Illumio Core and Calico will write rules at the same time. By default, both solutions are configured to insert rules first in the iptables or nftables chains/tables and Illumio Core will remove other rules added by a third-party software (in the Exclusive mode).

To allow Calico to write rules along with Illumio without flushing rules from one another, you should:

  • Configure Illumio to work in Firewall Coexistence mode (default for workloads that are part of a container cluster).

  • Configure Calico to work in Append mode (default is Insert mode).

To configure Calico to work in Append mode with iptables or nftables:

  1. Edit the Calico DaemonSet:

    kubectl -n kube-system edit ds calico-node
  2. Locate the spec: > template: > spec: > containers: section inside the YAML file and change ChainInsertMode by adding the following code block:

    - name: FELIX_CHAININSERTMODE
      value: Append 
  3. Save your changes and exit.

  4. Kubernetes will restart all Calico Pods in a rolling update.

For more information on changing Calico ChainInsertMode, see Calico documentation.

Configure Cilium for Operability with C-VEN

For Illumio Segmentation for Kubernetes 5.10 and newer, C-VEN versions 23.4.12 and newer can operate seamlessly alongside Cilium as the Kubernetes CNI in supported environments.

Note

Illumio C-VEN does not configure or program Cilium for segmentation. Illumio enforces segmentation independently and operates alongside Cilium rather than through it. This is consistent with the enforcement architecture used across other supported Kubernetes CNIs.

Cilium C-VEN Operability Use Case Examples

Core segmentation, visibility, and enforcement use cases support environments where Cilium and C‑VEN operate together. Policy inspection and enforcement work across key Kubernetes traffic paths, including:

  • ClusterIP traffic

  • Node-to-node communication

  • Pod-to-pod communication

Unsupported Cilium C-VEN Operability Use Cases

Enforcement for NodePort and LoadBalancer services is not supported when Cilium is configured with kube-proxy-replacement=true. Support for NodePort and LoadBalancer services is in active development.

Prerequisites for Configuring Cilium for operability with C-VEN
  • Illumio Segmentation for Kubernetes 5.10 and above with C-VEN 23.4.12 and above.

  • CLAS mode is required for full Cilium support if Cilium is configured with kube-proxy-replacement=true.

  • Cilium uses both eBPF and iptables, and must be in append mode with --prepend-iptables-chains set as false.

Install or Upgrade Cilium for Operability with C-VEN

For Cilium operability with C-VEN, install or upgrade Cillium with --prepend-iptables-chains=false.

Installation example:

cilium install --version 1.19.1 --set='extraArgs={--prepend-iptables-chains=false}'

Upgrade example:

cilium upgrade --version 1.19.1 --set='extraArgs={--prepend-iptables-chains=false}'