You can specify an IP address range for a StatefulSet with the annotation ncp/ip_range. NCP will allocate persistent IP addresses from the range to pods in the StatefulSet based on the subnets of the namespace.

This feature is only supported in Policy mode. To enable this feature, set statefulset_ip_range to True in the [K8s] section in ncp.ini. The default is False. Once set to True, you must not set it back to False.

An example of specifyiing the ncp/ip_range annotation:
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: nginx # has to match .spec.template.metadata.labels
  serviceName: "nginx"
  replicas: 3 # by default is 1
  template:
    metadata:
      labels:
        app: nginx # has to match .spec.selector.matchLabels
      annotations:
        ncp/ip_range: 192.168.0.10-192.168.0.50
    spec:
      ...
If an error occurs when NCP checks the IP range or allocates an address from the range, the StatefulSet will be annotated with ncp/error.ip_range:<error>. The possible errors are:
  • INVALID_IP_RANGE - The IP range is not in any of the namespaces's subnet, or it is in more than one subnets, or an existing pod is already using an IP address in the range.
  • IP_RANGE_EXHAUSTED - ncp cannot allocate an IP address from the range because all addresses have been allocated.