Modify Firewall Options

StarlingX incorporates a default firewall for the platform networks (OAM, management, cluster-host, pxeboot, admin, and storage). You can configure additional Kubernetes Network Policies to augment or override the default rules.

The StarlingX firewall uses the Kubernetes Network Policies (using the Calico CNI) to implement a firewall on the desired platform network.

The available labels to place the new GlobalNetworkPolicy selectors are:

ifname

nodename.interface-name e.g.: controller-0.mgmt0

iftype

mgmt, admin, cluster-host, pxeboot, storage

nodetype

controller or worker

Since a single interface can receive one or more networks, the iftype label concatenates with “.” as a separator, e.g.: cluster-host.mgmt.pxeboot (for this case the host endpoint (HostEndpoint in the example below) will use the rules for all GNPs that contain those labels in the selector).

To get the installed labels check the host endpoints previously created:

$ kubectl get hostendpoints.crd.projectcalico.org
NAME                           AGE
controller-0-cluster0-if-hep   8h
controller-0-mgmt0-if-hep      8h
controller-0-oam-if-hep        8h
controller-0-pxeboot0-if-hep   8h
controller-1-cluster0-if-hep   7h58m
controller-1-mgmt0-if-hep      7h58m
controller-1-oam-if-hep        7h58m
controller-1-pxeboot0-if-hep   7h58m
$ kubectl get hostendpoints.crd.projectcalico.org controller-0-mgmt0-if-hep -o yaml
apiVersion: crd.projectcalico.org/v1
kind: HostEndpoint
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"crd.projectcalico.org/v1","kind":"HostEndpoint","metadata":{"annotations":{},"labels":{"ifname":"controller-0.mgmt0","iftype":"mgmt","nodetype":"controller"},"name":"controller-0-mgmt0-if-hep"},"spec":{"interfaceName":"vlan383","node":"controller-0"}}
  creationTimestamp: "2023-08-03T06:01:50Z"
  generation: 1
  labels:
    ifname: controller-0.mgmt0
    iftype: mgmt
    nodetype: controller
  name: controller-0-mgmt0-if-hep
  resourceVersion: "2861"
  uid: 591694b5-e0ef-4562-a050-000e9473103a
spec:
  interfaceName: vlan383
  node: controller-0

All platform interfaces have a HostEndpoint attached to it, hence all traffic is blocked by default. The GlobalNetworkPolicies associated with a particular HostEndpoint provide the permission rules. All GlobalNetworkPolicies provided by StarlingX are set with order 100.

You can introduce custom rules by creating and installing custom Kubernetes Network Policies.

The following example opens up default HTTPS port 443.

% cat <<EOF > gnp-oam-overrides.yaml
apiVersion: crd.projectcalico.org/v1
kind: GlobalNetworkPolicy
metadata:
  name: gnp-oam-overrides
spec:
  ingress:
  - action: Allow
    destination:
      ports:
    protocol: TCP
  order: 500
  selector: has(nodetype) && nodetype == 'controller' && has(iftype) && iftype contains 'oam'
  types:
  - Ingress
EOF

It can be applied using the kubectl apply command. For example:

$ kubectl apply -f gnp-oam-overrides.yaml

You can confirm the policy was applied properly using the kubectl describe command. For example:

$ kubectl describe globalnetworkpolicy gnp-oam-overrides
Name:         gnp-oam-overrides
Namespace:
Labels:       <none>
Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                {"apiVersion":"crd.projectcalico.org/v1","kind":"GlobalNetworkPolicy","metadata":{"annotations":{},"name":"gnp-openstack-oam"},"spec...
API Version:  crd.projectcalico.org/v1
Kind:         GlobalNetworkPolicy
Metadata:
  Creation Timestamp:  2019-05-16T13:07:45Z
  Generation:          1
  Resource Version:    296298
  Self Link:           /apis/crd.projectcalico.org/v1/globalnetworkpolicies/gnp-openstack-oam
  UID:                 98a324ab-77db-11e9-9f9f-a4bf010007e9
Spec:
  Ingress:
    Action:  Allow
    Destination:
      Ports:
        443
    Protocol:  TCP
  Order:       500
  Selector:    has(nodetype) && nodetype == 'controller' && has(iftype) && iftype contains 'oam'
  Types:
    Ingress
Events:  <none>

For the default rules used by StarlingX see StarlingX Security: Default Firewall Rules.

For a full description of GNP syntax, see https://docs.projectcalico.org/v3.6/reference/calicoctl/resources/globalnetwo rkpolicy.