Configuring a Secondary Network Interface using Cloud-Network
When you add a secondary network interface to a linux instance in the cloud environment, you need to configure the network parameters for the secondary interface in the linux instance. The configuration ensures that you do not face any routing issues while using the secondary network interface. Configuring the secondary network interface involves several manual processes that include configuring a new routing table, setting up rules in the routing table and so on.
cloud-network automates the whole manual process of configuring the secondary network interface. It configures the network parameters required for any network interfaces that you create or add to the linux instance. In a cloud environment, instances are set to public IPs and private IPs. If you add more than one private IP for the secondary network interface, the IP other than the one provided by DHCP cannot be fetched and configured for your virtual machine. The
cloud-network project is designed to adapt the cloud-network environments such as Azure, GCP, and Amazon EC2.
cloud-network fetches the metadata from the metadata server endpoint, parses the metadata, and then assigns IPs and routes. When
cloud-network is installed, it automatically configures network interfaces in the cloud frameworks. It detects the available interfaces using netlink. Additionally, for all the interfaces, including the primary one, it looks for any secondary IP addresses from the metadata server endpoint and configures them on the interface, if any.
A local RESTful JSON server runs on the address 127.0.0.1:5209 and the instance metadata is saved on per link basis in the following directory:
The network parameters in the cloud framework are checked periodically for any changes, and in case of a change, the interface is reconfigured accordingly.
The image below illustrates the communication of
cloud-network and the instance metadata server:
Use Case: Making a secondary network interface work in a cloud instance.
This functionality is scattered across different scripts/tools that are cloud provider dependent.
cloud-network provides a cloud-agnostic mechanism to retrieve the metadata like network parameters, and configure the interfaces. This means that there is no need to manually edit and update the configuration when there are changes in the network parameters.
cloud-network automatically configures the interfaces since it has the metadata information.
The image below illustrates how
cloud-network fetches the network parameters to configure the secondary network interface (eth1) in a cloud instance:
Installing Cloud Network Setup
Type the following command to install
cloud network in your system:
tdnf install cloud-network-setup
To manage the configuration, use the configuration file named
cloud-network.toml located in the following directory:
You can set values for the following keys in the
Specifies the log level. The key takes one of the following values:
Specifies the log format. The key takes one of the following values: text or JSON. Takes one of
json, Default is
Specifies the time interval. The time interval indicates the amount of time taken to retrieve the data from the metadata endpoint.
You can set values for the following keys in the
Specifies the IP address and the port that the local REST API server listens. You can specify the IP address and the port in the following format
ip:port. Defaults is
A whitespace-separated list of interfaces matching the device name. Specifies the interfaces you want to configure with a default gateway and routing policy rules for each IP address including the primary IP address. No default value is set for this key.
Note When there are multiple interfaces, the secondary interface becomes unreachable. When you set a value for
Supplementary= key, the default route and routing policy rules are automatically configured.
The following example shows a sample configuration of the key values in the
> cat /etc/cloud-network/cloud-network.toml [System] RefreshTimer="300s" LogLevel="info" LogFormat="text" [Network] Listen="127.0.0.1:5209" Supplementary="eth0"
After you set the configuration, use the
sudo systemctl status cloud-network command to check the network status of the
Following example shows the command output of the
sudo systemctl status cloud-network command:
❯ > sudo systemctl status cloud-network ● cloud-network.service - Configures network in cloud enviroment Loaded: loaded (/usr/lib/systemd/system/cloud-network.service; disabled; vendor preset: enabled) Active: active (running) since Mon 2021-05-31 22:54:50 UTC; 3min 31s ago Main PID: 19754 (cloud-network) Tasks: 5 (limit: 4400) Memory: 8.7M CGroup: /system.slice/cloud-network.service └─19754 /usr/bin/cloud-network May 31 22:54:50 zeus-final-2 systemd: Started Configures network in cloud enviroment.
cnctl CLI tool to view the metadata that is retrieved from the endpoint metadata server.
The Following examples show the output of the
cnctl status command for the network and system:
❯ cnctl status system Cloud provider: aws AmiID: ami-005f15863xxxxxxxx Location: 0 BlockDeviceMapping: Ami:xvda Root:/dev/xvda Hostname: Zeus.us-west-2.compute.internal PublicHostname: Zeuspublic.us-west-2.compute.amazonaws.com LocalHostname: Zeus.us-west-2.compute.internal InstanceAction: none InstanceID: i-0c8c1test InstanceLifeCycle: on-demand InstanceType: t4g.micro Placement: AvailabilityZone:us-west-2d AvailabilityZoneID:usw2-az4 Region:us-west-2 Profile: default-hvm Mac Address: 0e:c5:3f:c5:33:a5 LocalIpv4: 188.8.131.52 PublicIpv4: 02:42:8d:4c:0c:cf Services Domain: amazonaws.com Services Partition: aws
❯ cnctl status network Name: ens33 MAC Address: 00:0c:29:5f:d1:39 Public IP: 184.108.40.206 Private IP: 10.0.0.4/24 10.0.0.6/24 10.0.0.7/24 Subnet: 10.0.0.0