diff --git a/content/cloud/network/images/attach_interface.png b/content/cloud/network/images/attach_interface.png new file mode 100644 index 0000000000000000000000000000000000000000..e870fe27ff30aff90c1c59deb1b3ff7899d6e7bf Binary files /dev/null and b/content/cloud/network/images/attach_interface.png differ diff --git a/content/cloud/network/images/ipv6_attach.png b/content/cloud/network/images/ipv6_attach.png new file mode 100644 index 0000000000000000000000000000000000000000..14a0c094ef5109d77ccf5eaa458f6ca39d61a580 Binary files /dev/null and b/content/cloud/network/images/ipv6_attach.png differ diff --git a/content/cloud/network/index.md b/content/cloud/network/index.md index 0c355a485747f5dadbf59e568b23be05ab168339..1367152b58f02fbbc7e0fc35d1b255074f5ad498 100644 --- a/content/cloud/network/index.md +++ b/content/cloud/network/index.md @@ -1,44 +1,54 @@ --- title: "Networking" -date: 2021-05-18T11:22:35+02:00 +date: 2022-02-02T11:22:35+02:00 draft: false --- +{{< hint danger >}} +**Please read the following rules:** +1. If you are using a [PERSONAL](/cloud/register/#personal-project) project you have to use either the `78-128-250-pers-proj-net` or `147-251-115-pers-proj-net` network to make your instance accessible from an external network (e.g. Internet). Use `public-cesnet-78-128-250-PERSONAL` and `public-muni-147-251-115-PERSONAL` for FIP allocation. +2. If you are using a [GROUP](/cloud/register/#group-project) project you may choose any of the [`-GROUP`](/cloud/network/#ipv4-group-networking) suffix networks for FIP allocation to make your instance accessible from external network (e.g. Internet). +3. Violation of network usage may lead to resource removal and reduction of the quotas assigned. +{{< /hint >}} -For networking in MetaCentrum Cloud, we need to distinguish following scenarios -* personal project -* group project. +## Public networking +In MetaCentrum Cloud (MCC) we support both IPv4 and IPv6. IPv4 allocation policies are based on Floating IPs (FIP). This type of networking requires the user to first connect virtual network containing specific VM to the public network before allocating a FIP for specific VM. Further information is available in section [virtual networking](/cloud/network/#virtual-networking). IPv6 allocation policy is based on common IPv6 public network, which can be directly attached to VMs. -{{< hint danger >}} -**WARNING:** - Please read the following rules: - - 1. If you are using a [PERSONAL](/cloud/register/#personal-project) project you have to use the `78-128-250-pers-proj-net` network to make your instance accessible from an external network (e.g. Internet). Use `public-cesnet-78-128-250-PERSONAL` for FIP allocation, FIPs from this pool will be periodically released. - 2. If you are using a [GROUP](/cloud/register/#group-project) project you may choose from the `public-cesnet-78-128-251-GROUP`, `public-muni-147-251-124-GROUP` or any other [GROUP](/cloud/register/#group-project) network for FIP allocation to make your instance accessible from external network (e.g. Internet). - 3. Violation of network usage may lead to resource removal and reduction of the quotas assigned. -{{< /hint >}} +If you decide to attach second interface to your VM, you should verify the interface is correctly set. Older VM images have secondary interfaces down by default and some images need further configuration to enable IPv6 SLAAC. +{{< hint info >}} +Don't forget to setup security groups accordingly. +{{< /hint >}} -## Networking in the personal vs. group projects +### IPv4 personal networking -### Personal Project networking +Is currently limited to the common internal networks. Use can start your machine in network `78-128-250-pers-proj-net` or `147-251-115-pers-proj-net` and allocate floating IP address from pools `public-cesnet-78-128-250-PERSONAL` and `public-muni-147-251-115-PERSONAL` respectively. All VMs need to be connected to same network. You cannot use virtual routers with personal project. We encourage users to use IPv6 addresses for long term use. Unassigned allocated addresses are released daily. -Is currently limited to the common internal network. The network in which you should start your machine is called `78-128-250-pers-proj-net` and is selected by default when using a dashboard to start a machine (if you do not have another network created). The floating IP address you need to access a virtual machine is located in`public-cesnet-78-128-250-PERSONAL` pool. Any other allocated floating IP address and `external gateway` will be deleted. You cannot use the router with the personal project and any previously created routers will be deleted. +### IPv4 group networking -### Group project +The situation is rather different for group projects. You cannot use the same approach as for personal projects. You should create a virtual network as described in section [virtual networking](/cloud/network/#virtual-networking) instead and select one of the pools with `-GROUP` suffix. Namely: +- `public-cesnet-78-128-251-GROUP` +- `public-muni-147-251-21-GROUP` +- `public-muni-147-251-124-GROUP` +- `public-muni-147-251-255-GROUP` -In a group, the project situation is rather different. You cannot use the same approach as a personal project (resources allocated in previously mentioned networks will be periodically released). For FIP you need to allocate from pools with `-GROUP` suffix (namely `public-cesnet-78-128-251-GROUP`, `public-muni-147-251-21-GROUP` or `public-muni-147-251-124-GROUP`). +{{< hint danger >}} +Addresses that are unassigned for longer than 3 months can be released. +{{< /hint >}} {{< hint info >}} -**NOTICE** - -If you use a MUNI account, you can use private-muni-10-16-116 and log into the network via MUNI VPN or you can set up Proxy networking, which is described -[here](/cloud/network/#proxy-networking) +If you use a MUNI account, you can use `private-muni-10-16-116` and log into the network via MUNI VPN or you can set up Proxy networking, which is described in section [proxy networking](/cloud/network/#proxy-networking). {{< /hint >}} -#### Virtual Networks +### IPv6 networking + +We have prepared an IPv6 prefix `public-muni-v6-432`, which is available for both personal and group projects. The network is available as an attachable network for VMs. If your VM does not receive the allocated address, check section [obtaining IPv6 address](/cloud/network/#obtaining-ipv6-address). + +*** + +## Virtual networking MetaCentrum Cloud offers software-defined networking as one of its services. Users can create their own networks and subnets, connect them with routers and set up tiered network topologies. @@ -49,10 +59,11 @@ Prerequisites: For details, refer to [the official documentation](https://docs.openstack.org/horizon/train/user/create-networks.html). - -#### Network creation +### Network creation For a group project, you need to create an internal network first, you may use auto allocated pool for subnet auto-creation. + +{{< expand "Configuration using Horizon GUI" >}} Navigate yourself towards **Network > Networks** in the left menu and click on the **Create Network** on the right side of the window. This will start an interactive dialog for network creation.   @@ -63,41 +74,31 @@ Inside the interactive dialog:  3. For the last tab **Subnet Details** just check that a DNS is present and the DHCP box is checked, alternatively you can create the allocation pool or specify static routes in here (for advanced users).  +{{< /expand >}} +{{< expand "Configuration using CLI" >}} +**Create network** +``` +openstack network create my-net1 +``` -{{< hint danger >}} -**NOTICE** - -If you want to use CLI to create network, please go [here](/cloud/cli/#create-network) -{{< /hint >}} - +Additional network configuration is available in [official CLI documentation](https://docs.openstack.org/python-openstackclient/train/cli/command-objects/network.html). -#### Proxy networking -In your OpenStack instances, you can you private or public networks. If you use a private network and you need to access the internet for updates etc., -you can visit following [link](/cloud/faq/#issues-with-proxy-in-private-networks), where it is explained, how to set up Proxy connection. +**Create subnet for the network (from auto-allocated pool)** +``` +openstack subnet create --network my-net1 --subnet-pool private-192-168 my-sub1 +``` +**Create subnet for the network (from auto-allocated pool)** +``` +openstack subnet create --network my-net1 --subnet-range 192.168.0.0/24 my-sub1 +``` +Additional subnet configuration is available in [official CLI documentation](https://docs.openstack.org/python-openstackclient/train/cli/command-objects/subnet.html). +{{< /expand >}} -#### Setup Router gateway (Required for Group projects) -Completing [Create Virtual Machine Instance](/cloud/quick-start/#create-virtual-machine-instance) created instance connected -to a software-defined network represented by the internal network, subnet, and router. The router has by default a gateway address -from External Network chosen by cloud administrators. You can change it to any External Network with [GROUP](/cloud/register/#group-project) suffix, that -is visible to you (e.g. **public-muni-147-251-124-GROUP** or **public-cesnet-78-128-251-GROUP**). Usage of External Networks -with suffix PERSONAL (e.g. **public-cesnet-78-128-250-PERSONAL**) is discouraged. IP addresses from -PERSONAL segments will be automatically released from Group projects. -For changing gateway IP address follow these steps: - -1. In **Network > Routers**, click the **Set Gateway** button next to the router. -If the router exists with other settings, then use the button Clear Gateway and then confirm Clear Gateway. -If the router isn't set then use the button Create router and choose the network. - -2. From list of External Network choose **public-cesnet-78-128-251-GROUP**, **public-muni-147-251-124-GROUP** or any other [GROUP](/cloud/register/#group-project) network you see. - -  - -The router is set up with the persistent gateway. - -#### Router creation +### Router creation +{{< expand "Configuration using Horizon GUI" >}} Navigate yourself towards **Network > Routers** in the left menu and click on the **Create Router** on the right side of the window. In the interactive dialog: 1. Enter router name and select external gateway with the `-GROUP` suffix. @@ -109,110 +110,293 @@ Now you need to attach your internal network to the router.  3. Select a previously created subnet and submit.  +{{< /expand >}} +{{< expand "Configuration using CLI" >}} -{{< hint info >}} -**NOTICE** +**Create router** +``` +openstack router create my-router1 +``` +The current router has no ports, which makes it pretty useless, we need to create at least 2 interfaces ([external](/cloud/network/#router-gateway-assign) and internal). -If you want to use CLI to manage routers, please go [here](/cloud/cli/#router-management) -{{< /hint >}} +**Assign router as a gateway for created internal network** +``` +openstack router add sub1 my-subnet my-router1 +``` +Additional router configuration is available in [official CLI documentation](https://docs.openstack.org/python-openstackclient/train/cli/command-objects/router.html). +{{< /expand >}} {{< hint info >}} -**NOTICE** - Routers can also be used to route traffic between internal networks. This is an advanced topic not covered in this guide. {{< /hint >}} +### Router external gateway assign +If you have no gateway on you router, you can assign a new one. -#### Associate Floating IP +{{< expand "Configuration using Horizon GUI" >}} +1. You can set your gateway by clicking **Set Gateway**. + +2. Choose the network you desire to use (e.g. **public-cesnet-78-128-251**) and confirm. + +{{< /expand >}} -{{< hint danger >}} -**WARNING** +{{< expand "Configuration using CLI" >}} -There is a limited number of Floating IP addresses. So please before you ask for more Floating IP address, visit and read [FAQ](/cloud/faq/#how-many-floating-ips-does-my-group-project-need) -{{< /hint >}} +**Set external network for the router (let us say public-muni-147-251-255-GROUP), and the external port will be created automatically** +``` +openstack router set --external-gateway public-muni-147-251-255-GROUP my-router1 +``` +Additional router configuration is available in [official CLI documentation](https://docs.openstack.org/python-openstackclient/train/cli/command-objects/router.html). +{{< /expand >}} -To make an instance accessible from external networks (e.g., The Internet), a so-called Floating IP Address has to be -associated with it. +### Router external gateway release +{{< expand "Configuration using Horizon GUI" >}} +Navigate to the **Project > Network > Routers**. Click on the action **Clear Gateway** of your router. This action will disassociate the external network from your router, so your machines will no longer be able to access the Internet. If you get an error you need to first **Disassociate Floating IPs**. + +{{< /expand >}} -1. In **Project > Network > Floating IPs**, select **Allocate IP to Project**. Pick an IP pool from which to allocate the address. Click on **Allocate IP**. -{{< hint info >}} -**NOTICE** +{{< expand "Configuration using CLI" >}} +**Release external gateway from router** +``` +openstack router unset --external-gateway my-router1 +``` -In the case of group projects when picking an IP pool from which to allocate a floating IP address, please, keep in mind that you have to allocate -an address in the pool connected to your virtual router. -{{< /hint >}} +Make sure to first [release FIPs](/cloud/network/#release-floating-ips) from the network. -{{< hint danger >}} -**WARNING** -Group projects can persistently allocate IPs only from External Network with GROUP suffix (e.g. public-muni-147-251-124-GROUP or public-cesnet-78-128-251-GROUP). -IPs from External Networks with suffix PERSONAL (e.g. public-cesnet-78-128-250-PERSONAL) will be released automatically. -{{< /hint >}} +Additional router configuration is available in [official CLI documentation](https://docs.openstack.org/python-openstackclient/train/cli/command-objects/router.html). +{{< /expand >}} -{{< hint info>}} -**NOTICE** -Please, keep an eye on the number of allocated IPs in <strong>Project > Network > Floating IPs</strong>. IPs -remain allocated to you until you explicitly release them in this tab. Detaching an IP from an instance is not sufficient -and the IP in question will remain allocated to you and consume your Floating IP quota. -{{< /hint >}} +### Associate Floating IPs -1. In **Project > Compute > Instances**, select **Associate Floating IP** from the **Actions** drop-down menu for the - given instance. +Floating IPs are used to assign public IP address to VMs. +{{< expand "Configuration using Horizon GUI" >}} +1. Go to **Project > Network > Floating IPs** and click on the **Allocate IP to Project** button. Select **Pool** with the same value as the network you chose in the previous step and confirm it by clicking **Allocate IP**. + -2. Select an IP address and click on **Associate**. +2. Now click on the **Associate** button next to the Floating IP you just created. Select **Port to be associated** with the desired instance. Confirm with the **Associate** button. Repeat this section for all your machines requiring a Floating IP. + +{{< /expand >}} -  +{{< expand "Configuration using CLI" >}} +**Allocate new Floating IPs** -{{< hint info >}} -**NOTICE** +``` +openstack floating ip create public-cesnet-78-128-251 +``` -If you want to use CLI to manage FIP, please go [here](/cloud/cli/#floating-ip-address-management). -{{< /hint >}} +**And assign it to your server** +``` +openstack server add floating ip net-test1 78.128.251.27 +``` -## Change external network in GUI +Additional floating IP configuration is available in [official CLI documentation](https://docs.openstack.org/python-openstackclient/train/cli/command-objects/floating-ip.html). +{{< /expand >}} -The following chapter covers the problem of changing the external network via GUI or CLI. +{{< hint info >}} +The floating IP address must be from the same network pool which was selected as the router network gateway. +{{< /hint >}} -### Existing Floating IP release +### Release Floating IPs +{{< expand "Configuration using Horizon GUI" >}} +Go to **Project > Compute > Instances**. Click on the menu **Actions** on the instance you wish to change and **Disassociate Floating IP** and specify that you wish to **Release Floating IP**. -First, you need to release existing Floating IPs from your instances - go to **Project > Compute > Instances**. Click on the menu **Actions** on the instance you wish to change and **Disassociate Floating IP** and specify that you wish to **Release Floating IP** WARN: After this action, your project will no longer be able to use the floating IP address you released. Confirm that you wish to disassociate the floating IP by clicking on the **Disassociate** button. When you are done with all instances connected to your router you may continue with the next step. +WARNING: After this action, your project will no longer be able to use the floating IP address you released. Confirm that you wish to disassociate the floating IP by clicking on the **Disassociate** button.  +{{< /expand >}} -### Clear Gateway +{{< expand "Configuration using CLI" >}} -Now, you should navigate yourself to the **Project > Network > Routers**. Click on the action **Clear Gateway** of your router. This action will disassociate the external network from your router, so your machines will no longer be able to access the Internet. If you get an error go back to step 1 and **Disassociate your Floating IPs**. - +### Remove existing floating IP -### Set Gateway +**List your servers** -1. Now, you can set your gateway by clicking **Set Gateway**. - +``` +$ openstack server list ++--------------------------------------+-----------+--------+-------------------------------------------------------+-------+----------------+ +| ID | Name | Status | Networks | Image | Flavor | ++--------------------------------------+-----------+--------+-------------------------------------------------------+-------+----------------+ +| 1a0d4624-5294-425a-af37-a83eb0640e1c | net-test1 | ACTIVE | auto_allocated_network=192.168.8.196, 147.251.124.248 | | standard.small | ++--------------------------------------+-----------+--------+-------------------------------------------------------+-------+----------------+ +``` -2. Choose the network you desire to use (e.g. **public-cesnet-78-128-251**) and confirm. - +**Remove floating IPs** -### Allocate new Floating IP(s) +``` +$ openstack server remove floating ip net-test 147.251.124.248 +$ openstack floating ip delete 147.251.124.248 +``` -{{< hint danger >}} -**WARNING** -The new floating IP address for the router must be from the same network pool which was selected as the new gateway. -{{< /hint >}} +Additional floating IP configuration is available in [official CLI documentation](https://docs.openstack.org/python-openstackclient/train/cli/command-objects/floating-ip.html). +{{< /expand >}} +### Obtaining IPv6 address +Public IPv6 addresses are assigned via SLAAC. After assigning an interface in OpenStack to your instance, verify correct [configuration](/cloud/network/#interface-not-working) of your VM. You can assign interface by directly connecting your VM to the network (make sure you setup DNS records if you decide to use only IPv6) upon creation or by assigning secondary interface. -1. Go to **Project > Network > Floating IPs** and click on the **Allocate IP to Project** button. Select **Pool** with the same value as the network you chose in the previous step and confirm it by clicking **Allocate IP** - +{{< expand "Configuration using Horizon GUI" >}} +Go to **Project > Compute > Instances**. Click on the menu **Actions** on the instance you wish to change and click on **Attach interface**. -2. Now click on the **Associate** button next to the Floating IP you just created. Select **Port to be associated** with the desired instance. Confirm with the **Associate** button. Repeat this section for all your machines requiring a Floating IP. - + + +In the **Network** dropdown menu select available IPv6 network. + + +{{< /expand >}} + +{{< expand "Configuration using CLI" >}} +**Get ID of your VM, in this instance named my-vm** + +``` +VM_ID=$(openstack server list --name my-vm -f value -c ID) +``` + +**Create port for the network** + +``` +openstack port create --network public-muni-v6-432 --security-group default --host ${VM_ID} ipv6-port +``` + +Additional port configuration is available in [official CLI documentation](https://docs.openstack.org/python-openstackclient/train/cli/command-objects/port.html). +{{< /expand >}} + +### Security rules +Security rules in OpenStack serve as a Firewall. Security rules are applied directly on VM ports and therefore proper configuration is necessary. Ingress as well as egress rules can be configured using Horizon and CLI. If you can't connect via ssh or ping your instance, chances are it is because of security rules. -## Default Egress rules If you delete default egress rules, your virtual machine loses will not be able to send outgoing communication. To fix this, add a new egress rule with *any* IP protocol and port range, set Remote IP prefix to *0.0.0.0/0* (IPv4) or *::/0* (IPv6). +{{< expand "Configuration using Horizon GUI" >}}  +{{< /expand >}} + +{{< expand "Configuration using CLI" >}} +**Create rule** +``` +openstack security group create my-security-group +``` + +**Add rules to your security group** +``` +openstack security group rule create --description "Permit SSH" --remote-ip 0.0.0.0/0 --protocol tcp --dst-port 22 --ingress my-security-group +openstack security group rule create --description "Permit SSH IPv6" --remote-ip ::/0 --ethertype IPv6 --protocol tcp --dst-port 22 --ingress my-security-group +openstack security group rule create --description "Permit ICMP (any)" --remote-ip 0.0.0.0/0 --protocol icmp --icmp-type -1 --ingress my-security-group +openstack security group rule create --description "Permit ICMPv6 (any)" --remote-ip ::/0 --ethertype IPv6 --protocol ipv6-icmp --ingress my-security-group +``` + +**Verify rule** +``` + openstack security group show my-security-group +``` + +Additional security group configuration is available in [official CLI documentation](https://docs.openstack.org/python-openstackclient/train/cli/command-objects/security-group.html). +{{< /expand >}} + +*** + +## Load balancers + +Load balancers serve as a proxy between virtualised infrastructure and clients in the outside network. This is essential in OpenStack since it can be used in a scenario where the infrastructure dynamically starts new VMs and adds them into the load balancing pool in order to mitigate inaccessibility of services. + +When modifying a load balancer, each operation changes the database into immutable state. It is therefore recommended to use `--wait` switch when creating/editing or removing resources from load balancers. + +{{< hint info >}} +We are currently observing inaccessibility of some load balancers on floating IP after creation. If this happens, please try to rebuild the load balancer before contacting support. +{{< /hint >}} + +### Provisioning Status +This status represents the overall state of the load balancer backend. +- `ACTIVE`: the load balancer backend is working as intended. +- `PENDING`: statuses starting with `PENDING` usually reflect modification of the load balancer, during which the database is in immutable state and thus any additional operations will fail. +- `ERROR`: the provisioning has failed. This load balancer can't be modified and usually is not working. Therefore we encourage our users to remove these load balancers. If this happens more often, please make sure to report this problem at `cloud@metacentrum.cz`. +- `DELETED`: entity has been deleted. + +### Operating status +Operating status is managed by health monitor service of the load balancer and reflects the availibility of endpoint service. +- `ONLINE`: all endpoint services are available. +- `DEGRADED`: some endpoint services are not available. +- `ERROR`: all endpoint services are unavailable. +- `DRAINING`: not accepting new connections. +- `OFFLINE`: entity is administratively disabled. +- `NO_MONITOR`: health monitor is not configured. + +### Creating loadbalancers +To create a load balancer, first prepare a pool of VMs with operational service you wish to balance to. Next create the load balancer in the same network and assaign the pool as well as listeners on specific ports. + +{{< expand "Configuration using CLI" >}} +1. Create the load balancer +``` +openstack loadbalancer create --name my_loadbalancer --vip-subnet-id my_subnet_id --wait +``` + +2. Create listeners (eg. ports 80) +``` +openstack loadbalancer listener create --name my_listener --protocol TCP --protocol-port 80 --wait my_loadbalancer +``` + +3. Create LB pools +``` +openstack loadbalancer pool create --name my_pool --lb-algorithm ROUND_ROBIN --listener my_listener --protocol TCP --wait +``` + +4. Create Health Monitors +``` +openstack loadbalancer healthmonitor create --delay 5 --max-retries 3 --timeout 3 --type HTTP --url-path / --wait my_pool +``` + +5. Assign endpoint VMs +``` +openstack loadbalancer member create --address vm_ip_address --protocol-port 80 --wait my_pool +``` +{{< /expand >}} + +### Deleting loadbalancers +When deleting a loadbalancer, first unassign the floating IP address used by the loadbalancer. + +{{< expand "Configuration using CLI" >}} +To delete the loadbalancer and all resources, run command +``` +openstack loadbalancer delete --cascade --wait my_loadbalancer +``` + +{{< /expand >}} + +## Scenarios + +### Creating new networking +Creation of new networking for project can be divided into these steps: +- [Create new network and subnet](/cloud/network/#network-creation). +- [Create router and assign interface](/cloud/network/#router-creation). +- [Assign external gateway](/cloud/network/#router-gateway-assign). +- [Assign FIPs to VMs](/cloud/network/#associate-floating-ips). + +### Changing external network + +In order to correctly migrate to different external network, you can follow the following steps: +- [Release all Floating IPs](/cloud/network/#release-floating-ips). +- [Clear router gateway](/cloud/network/#router-gateway-release). +- [Assign router gateway into selected external network](/cloud/network/#router-gateway-assign). +- [Allocate and assign new FIPs from selected external network](/cloud/network/#associate-floating-ips). + +### Proxy networking +In your OpenStack instances, you can use private or public networks. If you use a private network and you need to access the internet for updates etc., +you can check [proxy issues](/cloud/faq/#issues-with-proxy-in-private-networks), where proxy connection is explained. + +### Interface not working + +Please verify correct configuration of security groups on your VM. More information is available in section [security rules](/cloud/network/#security-rules). + +Some VM images have additional interfaces turned down by default. In this case, it is necessary to connect to the VM through default interface and enable these interfaces. +Known images with this flaw: + +- `centos-7-x86_64` +- `ubuntu-bionic-x86_64` + +Usually when you enable the interface, the VM should obtain IPv4 address through DHCP and IPv6 address through SLAAC. If you are able to receive an IPv4 address but not IPv6 address, verify correct configuration of SLAAC on that VM interface. This flaw was spotted on image: + +- `centos-8-x86_64` diff --git a/content/cloud/terms-of-service/index.md b/content/cloud/terms-of-service/index.md index 149351468b2cb92496bf815ac4d6fc40d8a1e035..9e19d7540ec8c5ff48cdca3df384b97761a511a7 100644 --- a/content/cloud/terms-of-service/index.md +++ b/content/cloud/terms-of-service/index.md @@ -20,3 +20,8 @@ disableToc: true - We are not responsible for any data loss. - Users are responsible for making backups. + +#### Floating IPs + +- Allocated PERSONAL scope addresses that are not assigned to any VM are deallocated daily. +- Allocated GROUP scope addresses that are not assigned to any VM can be deallocated after 3 months. diff --git a/static/custom.css b/static/custom.css index 6f78052cb88d210f02212b63ca2cb94551794f65..fd1c407ceacc6ba778e4b1705965ee9f2e4bd09b 100644 --- a/static/custom.css +++ b/static/custom.css @@ -3,8 +3,8 @@ overflow-y: hidden; } -table.sortable th:not(.sorttable_sorted):not(.sorttable_sorted_reverse):not(.sorttable_nosort):after { - content: " \25B4\25BE" +table.sortable th:not(.sorttable_sorted):not(.sorttable_sorted_reverse):not(.sorttable_nosort):after { + content: " \25B4\25BE" } @@ -13,4 +13,6 @@ table.sortable th:not(.sorttable_sorted):not(.sorttable_sorted_reverse):not(.sor background-color:#f2f2f2; color:#f2f2f2 border: 3px solid; -} \ No newline at end of file + padding: 1px; + padding-left: 20px; +}