Create subnets¶
After creating the MetalLB configuration as described in Configure MetalLB
and before creating an L2 template, ensure that you have the required subnets
that can be used in the L2 template to allocate IP addresses for the
MOSK cluster nodes.
Where required, create a number of subnets for a particular project
using the Subnet
CR. A subnet has three logical scopes:
global - CR uses the
default
namespace. A subnet can be used for any cluster located in any project.namespaced - CR uses the namespace that corresponds to a particular project where MOSK clusters are located. A subnet can be used for any cluster located in the same project.
cluster - CR uses the namespace where the referenced cluster is located. A subnet is only accessible to the cluster that
L2Template.metadata.labels:cluster.sigs.k8s.io/cluster-name
(mandatory since MOSK 23.3) orL2Template.spec.clusterRef
(deprecated since MOSK 23.3) refers to. TheSubnet
objects with thecluster
scope will be created for every new cluster.
You can have subnets with the same name in different projects. In this case, the subnet that has the same project as the cluster will be used. One L2 template may often reference several subnets, those subnets may have different scopes in this case.
The IP address objects (IPaddr
CR) that are allocated from subnets
always have the same project as their corresponding IpamHost
objects,
regardless of the subnet scope.
To create subnets for a cluster:
Log in to a local machine where your management cluster
kubeconfig
is located and wherekubectl
is installed.Note
The management cluster
kubeconfig
is created during the last stage of the management cluster bootstrap.Create the
subnet.yaml
file with a number of global or namespaced subnets depending on the configuration of your cluster:kubectl --kubeconfig <pathToManagementClusterKubeconfig> apply -f <SubnetFileName.yaml>
Note
In the command above and in the steps below, substitute the parameters enclosed in angle brackets with the corresponding values.
Example of a
subnet.yaml
file:apiVersion: ipam.mirantis.com/v1alpha1 kind: Subnet metadata: name: demo namespace: demo-namespace labels: kaas.mirantis.com/provider: baremetal kaas.mirantis.com/region: region-one spec: cidr: 10.11.0.0/24 gateway: 10.11.0.9 includeRanges: - 10.11.0.5-10.11.0.70 nameservers: - 172.18.176.6
Note
The
kaas.mirantis.com/region
label is removed from all Container Cloud and MOSK objects in 24.1.Therefore, do not add the label starting with these releases. On existing clusters updated to these releases, or if added manually, Container Cloud ignores this label.
¶ Parameter
Description
cidr
(singular)A valid IPv4 CIDR, for example, 10.11.0.0/24.
includeRanges
(list)A list of IP address ranges within the given CIDR that should be used in the allocation of IPs for nodes. If the
includeRanges
parameter is not set, the entire address range within the given CIDR is used in the allocation of IPs for nodes. The gateway, network, broadcast, and DNS addresses will be excluded (protected) automatically if they intersect with one IP in the range. The IPs outside the given ranges will not be used in the allocation. Each element of the list can be either an interval10.11.0.5-10.11.0.70
or a single address10.11.0.77
. In the example above, the addresses10.11.0.5-10.11.0.70
(excluding the gateway address 10.11.0.9) will be allocated for nodes. TheincludeRanges
parameter is mutually exclusive withexcludeRanges
.excludeRanges
(list)A list of IP address ranges within the given CIDR that should not be used in the allocation of IPs for nodes. The IPs within the given CIDR but outside the given ranges will be used in the allocation. The gateway, network, broadcast, and DNS addresses will be excluded (protected) automatically if they are included in the CIDR. Each element of the list can be either an interval
10.11.0.5-10.11.0.70
or a single address10.11.0.77
. TheexcludeRanges
parameter is mutually exclusive withincludeRanges
.useWholeCidr
(boolean)If set to
true
, the subnet address (10.11.0.0 in the example above) and the broadcast address (10.11.0.255 in the example above) are included into the address allocation for nodes. Otherwise, (false
by default), the subnet address and broadcast address are excluded from the address allocation.gateway
(singular)A valid gateway address, for example, 10.11.0.9.
nameservers
(list)A list of the IP addresses of name servers. Each element of the list is a single address, for example, 172.18.176.6.
Note
You may use different subnets to allocate IP addresses to different Container Cloud components in your cluster. Add a label with the
ipam/SVC-
prefix to each subnet that is used to configure a Container Cloud service. For details, see Service labels and their life cycle and the optional steps below.Caution
Use of a dedicated network for Kubernetes pods traffic, for external connection to the Kubernetes services exposed by the cluster, and for the Ceph cluster access and replication traffic is available as Technology Preview. Use such configurations for testing and evaluation purposes only. For the Technology Preview feature definition, refer to Technology Preview features.
Add one or more subnets for the LCM network:
Set the
ipam/SVC-k8s-lcm
label with the value"1"
to create a subnet that will be used to assign IP addresses in the LCM network.Optional. Set the
cluster.sigs.k8s.io/cluster-name
label to the name of the target cluster during the subnet creation.Use this subnet in the L2 template for all cluster nodes.
Assign this subnet to the interface connected to your LCM network.
Precautions for the LCM network usage
Each cluster must use at least one subnet for its LCM network. Every node must have the address allocated in the LCM network using such subnet(s).
Each node of every cluster must have one and only IP address in the LCM network that is allocated from one of the
Subnet
objects having theipam/SVC-k8s-lcm
label defined. Therefore, allSubnet
objects used for LCM networks must have theipam/SVC-k8s-lcm
label defined.You can use any interface name for the LCM network traffic. The
Subnet
objects for the LCM network must have theipam/SVC-k8s-lcm
label. For details, see Service labels and their life cycle.
Optional. Technology Preview. Add a subnet for the externally accessible API endpoint of the MOSK cluster.
Make sure that
loadBalancerHost
is set to""
(empty string) in theCluster
spec.spec: providerSpec: value: apiVersion: baremetal.k8s.io/v1alpha1 kind: BaremetalClusterProviderSpec ... loadBalancerHost: ""
Create a subnet with the
ipam/SVC-LBhost
label having the"1"
value to make thebaremetal-provider
use this subnet for allocation of addresses for cluster API endpoints.
One IP address will be allocated for each cluster to serve its Kubernetes/MKE API endpoint.
Caution
Make sure that master nodes have host local-link addresses in the same subnet as the cluster API endpoint address. These host IP addresses will be used for VRRP traffic. The cluster API endpoint address will be assigned to the same interface on one of the master nodes where these host IPs are assigned.
Note
We highly recommend that you assign the cluster API endpoint address from the LCM network. For details on cluster networks types, refer to MOSK cluster networking. See also the Single MOSK cluster use case example in the following table.
You can use several options of addresses allocation scope of API endpoints using subnets:
Use case
Example configuration
Several MOSK clusters with one management cluster
Create a subnet in the
default
namespace with no reference to any cluster.apiVersion: ipam.mirantis.com/v1alpha1 kind: Subnet metadata: name: lbhost-per-mgmt-cluster namespace: default labels: kaas.mirantis.com/provider: baremetal kaas.mirantis.com/region: region-one ipam/SVC-LBhost: "1" spec: cidr: 191.11.0.0/24 includeRanges: - 191.11.0.6-191.11.0.20
Warning
Combining the
ipam/SVC-LBhost
label with any other service labels on a single subnet is not supported. Use a dedicated subnet for addresses allocation for cluster API endpoints.Several MOSK clusters in a project
Create a subnet in a namespace corresponding to your project with no reference to any cluster. Such subnet has priority over the one described above.
apiVersion: ipam.mirantis.com/v1alpha1 kind: Subnet metadata: name: lbhost-per-cluster namespace: my-project labels: kaas.mirantis.com/provider: baremetal kaas.mirantis.com/region: region-one ipam/SVC-LBhost: "1" spec: cidr: 191.11.0.0/24 includeRanges: - 191.11.0.6-191.11.0.20
Warning
Combining the
ipam/SVC-LBhost
label with any other service labels on a single subnet is not supported. Use a dedicated subnet for addresses allocation for cluster API endpoints.Single MOSK cluster
Create a subnet in a namespace corresponding to your project with a reference to the target cluster using the
cluster.sigs.k8s.io/cluster-name
label. Such subnet has priority over the ones described above. In this case, it is not obligatory to use a dedicated subnet for addresses allocation of API endpoints. You can add theipam/SVC-LBhost
label to the LCM subnet, and one of the addresses from this subnet will be allocated for an API endpoint:apiVersion: ipam.mirantis.com/v1alpha1 kind: Subnet metadata: name: lbhost-per-namespace namespace: my-project labels: kaas.mirantis.com/provider: baremetal kaas.mirantis.com/region: region-one ipam/SVC-LBhost: "1" ipam/SVC-k8s-lcm: "1" cluster.sigs.k8s.io/cluster-name: my-cluster spec: cidr: 10.11.0.0/24 includeRanges: - 10.11.0.6-10.11.0.50
Warning
You can combine the
ipam/SVC-LBhost
label only with the following service labels on a single subnet:ipam/SVC-k8s-lcm
ipam/SVC-ceph-cluster
ipam/SVC-ceph-public
Otherwise, use a dedicated subnet for address allocation for the cluster API endpoint. Other combinations are not supported and can lead to unexpected results.
Note
The
kaas.mirantis.com/region
label is removed from all Container Cloud and MOSK objects in 24.1.Therefore, do not add the label starting with these releases. On existing clusters updated to these releases, or if added manually, Container Cloud ignores this label.
The above options can be used in conjunction. For example, you can define a subnet for all managed clusters within one management cluster, a number of subnets within this management cluster defined for particular namespaces, and a number of subnets within the same management cluster and namespaces defined for particular clusters.
Optional. Add a subnet(s) for the storage access network.
Set the
ipam/SVC-ceph-public
label with the value"1"
to create a subnet that will be used to configure the Ceph public network.Set the
cluster.sigs.k8s.io/cluster-name
label to the name of the target cluster during the subnet creation.Use this subnet in the L2 template for all cluster nodes except Kubernetes manager nodes.
Assign this subnet to the interface connected to your Storage access network.
Ceph will automatically use this subnet for its external connections.
A Ceph OSD will look for and bind to an address from this subnet when it is started on a machine.
Optional. Add a subnet(s) for the storage replication network.
Set the
ipam/SVC-ceph-cluster
label with the value"1"
to create a subnet that will be used to configure the Ceph cluster network.Set the
cluster.sigs.k8s.io/cluster-name
label to the name of the target cluster during the subnet creation.Use this subnet in the L2 template for storage nodes.
Assign this subnet to the interface connected to your storage replication network.
Ceph will automatically use this subnet for its internal replication traffic.
Optional. Add a subnet for the Kubernetes Pods traffic.
Use this subnet in the L2 template for all nodes in the cluster.
Assign this subnet to the interface connected to your Kubernetes workloads network.
Use the
npTemplate.bridges.k8s-pods
bridge name in the L2 template. This bridge name is reserved for the Kubernetes workloads network. When thek8s-pods
bridge is defined in an L2 template, Calico CNI uses that network for routing the Pods traffic between nodes.
Optional. Add a subnet for the MOSK overlay network:
Use this subnet in the L2 template for the compute and gateway (controller) nodes in the MOSK cluster.
Assign this subnet to the interface connected to your MOSK overlay network.
This network is used to provide denied and secure tenant networks with the help of the tunneling mechanism (VLAN/GRE/VXLAN). If the VXLAN and GRE encapsulation takes place, the IP address assignment is required on interfaces at the node level. On the Tungsten Fabric deployments, this network is used for MPLS over UDP+GRE traffic.
Optional. Add a subnet for the MOSK live migration network:
Use this subnet in the L2 template for compute nodes in the MOSK cluster.
Assign this subnet to the interface connected to your MOSK overlay network.
This subnet is used by the Compute service (OpenStack Nova) to transfer data during live migration. Depending on the cloud needs, you can place it on a dedicated physical network not to affect other networks during live migration. The IP address assignment is required on interfaces at the node level.
Verify that the subnet is successfully created:
kubectl get subnet kaas-mgmt -oyaml
In the system output, verify the
status
fields of thesubnet.yaml
file using the table below.¶ Parameter
Description
state
Since 23.1Contains a short state description and a more detailed one if applicable. The short status values are as follows:
OK
- object is operational.ERR
- object is non-operational. This status has a detailed description in themessages
list.TERM
- object was deleted and is terminating.
messages
Since 23.1Contains error or warning messages if the object state is
ERR
. For example,ERR: Wrong includeRange for CIDR…
.statusMessage
Deprecated since MOSK 23.1 and will be removed in one of the following releases in favor of
state
andmessages
. Since MOSK 23.2, this field is not set for the objects of newly created clusters.cidr
Reflects the actual CIDR, has the same meaning as
spec.cidr
.gateway
Reflects the actual gateway, has the same meaning as
spec.gateway
.nameservers
Reflects the actual name servers, has same meaning as
spec.nameservers
.ranges
Specifies the address ranges that are calculated using the fields from
spec: cidr, includeRanges, excludeRanges, gateway, useWholeCidr
. These ranges are directly used for nodes IP allocation.allocatable
Includes the number of currently available IP addresses that can be allocated for nodes from the subnet.
allocatedIPs
Specifies the list of IPv4 addresses with the corresponding
IPaddr
object IDs that were already allocated from the subnet.capacity
Contains the total number of IP addresses being held by ranges that equals to a sum of the
allocatable
andallocatedIPs
parameters values.objCreated
Date, time, and IPAM version of the
Subnet
CR creation.objStatusUpdated
Date, time, and IPAM version of the last update of the
status
field in theSubnet
CR.objUpdated
Date, time, and IPAM version of the last
Subnet
CR update bykaas-ipam
.Example of a successfully created subnet:
apiVersion: ipam.mirantis.com/v1alpha1 kind: Subnet metadata: labels: ipam/UID: 6039758f-23ee-40ba-8c0f-61c01b0ac863 kaas.mirantis.com/provider: baremetal kaas.mirantis.com/region: region-one ipam/SVC-k8s-lcm: "1" name: kaas-mgmt namespace: default spec: cidr: 10.0.0.0/24 excludeRanges: - 10.0.0.100 - 10.0.0.101-10.0.0.120 gateway: 10.0.0.1 includeRanges: - 10.0.0.50-10.0.0.90 nameservers: - 172.18.176.6 status: allocatable: 38 allocatedIPs: - 10.0.0.50:0b50774f-ffed-11ea-84c7-0242c0a85b02 - 10.0.0.51:1422e651-ffed-11ea-84c7-0242c0a85b02 - 10.0.0.52:1d19912c-ffed-11ea-84c7-0242c0a85b02 capacity: 41 cidr: 10.0.0.0/24 gateway: 10.0.0.1 objCreated: 2021-10-21T19:09:32Z by v5.1.0-20210930-121522-f5b2af8 objStatusUpdated: 2021-10-21T19:14:18.748114886Z by v5.1.0-20210930-121522-f5b2af8 objUpdated: 2021-10-21T19:09:32.606968024Z by v5.1.0-20210930-121522-f5b2af8 nameservers: - 172.18.176.6 ranges: - 10.0.0.50-10.0.0.90
Note
The
kaas.mirantis.com/region
label is removed from all Container Cloud and MOSK objects in 24.1.Therefore, do not add the label starting with these releases. On existing clusters updated to these releases, or if added manually, Container Cloud ignores this label.
Create other subnets for your MOSK cluster:
If you plan to create a multi-rack MOSK cluster, proceed to Create subnets for a multi-rack MOSK cluster.
If you plan to create a single-rack MOSK cluster, proceed to Create subnets for a MOSK cluster.
Proceed to creating L2 templates as described in Create L2 templates.