We are grateful for the preparation of the article to Mikhail Tryakhov ( @PerseptronYar ) from the company Akvelon (Yaroslavl) for the help in writing this article. Mikhail works on the Microsoft Azure CLI team (Command Line Interface) with a specialization in Networking Services.
Hello! Today it is time to talk about the long-awaited innovation, which, with smoke and haste, prepared for the conference Ignite. This event took place from 28 to 30 September in Atlanta, and it is already well written about, say, here . However, it is already known that IPv6 has become available in a number of regions (locations) of Microsoft Azure. Under the cut details.
To say that this functionality is expected - to say nothing. It is, for starters, to drive into the search engine "Azure IPv6". I announce: you will find only a couple of links, mostly revolving around Feature requests (for example, here and here ) and company promises . And so it happened!
IPv4 and IPv6 are completely different and in no way dependent on each other versions of IP. That is, it is implied that it is impossible to convert an IPv4 address to IPv6, etc. The main task that IPv6 is beginning to solve is to ensure the interaction of Azure virtual machines and IPv6 clients by integrating it with the variety of services available in NRP (Network Resource Provider), such as Load balancer, NIC (Network Interface) , public ip (public IP addresses) and derivatives.
I can not offer, for the sake of interest, to try in part of the commands described in the post on the Azure CLI platform. As I wrote in the first review article in this blog, this is a command line extension that allows you to manage your Azure infrastructure on many operating systems (Windows, Mac, many Linux distributions). To install it, you can use the instructions on the official site. Please note that the installed version should be released after September 28, 2016. The desired release is available here .
Let's draw. In the picture we will depict the existing options for customizing the balancer in blue, green - updates that have become available.
I will describe the main buns that this carries to us:
There are a number of limitations. For example, we will not be able to make these modifications on the use of IPv6 through a graphical interface. As I wrote earlier, working with JSON and consoles will have more and more. So here, the options remain a bit:
To begin with, in the selected resource group (as you understand, it’s all about ARM), you need to configure the network, subnets and create an “empty” load balancer. Using the Azure CLI, it’s enough to execute commands from the above manual I will draw on the example given there (as with PowerShell, template), concentrating on the important (in terms of this topic) points. The purpose of the following paragraphs is to analyze in detail the process of deploying the specified architecture and describe the existing limitations.
Since all three methods available to us to provide IPv6 support by no means, so skating boils down to the fact that they only send generated JSON to the corresponding API-version of the Azure SDK, I consider working with JSON templates to be the most accurate to demonstrate, focusing on innovations.
So, according to the scheme drawn above, we do PUT requests and get two public IP:
{ "name": "myIPv4Vip", "id": "/subscriptions/{guid}/resourceGroups/rg1/Microsoft.Network/publicIpAddresses/ip1", "location": "West US", "tags": { “key”: “value” } , “etag”: “W/\”00000000-0000-0000-0000-000000000000\”“, "properties": { "provisioningState": “Updating|Deleting|Failed|Succeeded”, "ipAddress": "1.1.1.1", "publicIpAddressVersion": IPv4, "publicIPAllocationMethod": "Static | Dynamic", "idleTimeoutInMinutes": 4, "ipConfiguration": { "id": "/subscriptions/{guid}/../Microsoft.Network/loadbalancers/MyIpV4AndV6LB1/ipConfigurations/frontendIP1"}, "dnsSettings": { "domainNameLabel": "mylabel", "fqdn": "mylabel.westus.cloudapp.azure.com.", "reverseFqdn": "contoso.com." } } }
Here I ask you to pay attention to a number of points.
{ "name": "myIPv6Vip", "id": "/subscriptions/{guid}/resourceGroups/rg1/Microsoft.Network/publicIpAddresses/myIPv6Vip", "location": "West US", "tags": { “key”: “value” } , “etag”: “W/\”00000000-0000-0000-0000-000000000000\”“, "properties": { "provisioningState": “Updating|Deleting|Failed|Succeeded”, "ipAddress”:”2015::1234:5": , "publicIpAddressVersion": IPv6, " publicIPAllocationMethod ": " Static|Dynamic", "idleTimeoutInMinutes ": 4, "ipConfiguration": { "id": "/subscriptions/{guid}/../Microsoft.Network/loadbalancers/MyIpV4AndV6LB1/ipConfigurations/frontendIP2"}, "dnsSettings": { "domainNameLabel": "mylabel", "fqdn": "mylabel.westus.cloudapp.azure.com.", "reverseFqdn": }, }
There are a number of limitations.
The next important step in the analysis of the above architecture will be setting up the load balancer. It will be expectedly large - I ask you to see the presentation version of PUT and GET requests.
You can easily restore them completely by completing the actions according to the documentation for any of the platforms, for example, my native Azure CLI .
Pay attention to the following points.
Frontend IP Configuration-Public IP (VIP)
If the Frontend IP configuration refers to a public (public) IP address with a version of ipVersion = IPv6, the following checks will be performed:
Backend Address Pools (Backend)
Validation will consist of checking network interface settings (NIC). Each instance of backend adress pool-a can refer to a NIC with only one type of supported address — either IPv4 or IPv6.
Load Balancer Rule (FE <-> BE)
If the Frontend IP configuration refers to a public (public) IP address with a version of ipVersion = IPv6, the following restrictions apply:
Inbound NAT pools cannot contain a configuration that refers to an IPv6 VIP.
Inbound NAT rules must satisfy the condition that the Frontend IP and Backend IP configurations must be IPv6 versions.
Outbound NAT Rules
Well, as mentioned above, in the existing configuration it is impossible to update the version of IP addresses (IPv4-> IPv6).
Here, I also propose to refer directly to the network interface configuration example.
{ "name": "mynic1", "id": "/subscriptions/{guid}/resourceGroups/myrg1/providers/Microsoft.Network/networkInterfaces/vm1mynic1", "location": "West US", "tags": { “key”: “value” } , “etag”: “W/\”00000000-0000-0000-0000-000000000000\”“, "properties": { "provisioningState": “Updating|Deleting|Failed|Succeeded”, "virtualMachine": {"id": "/subscriptions/{guid}/../Microsoft.Compute/virtualMachines/vm1"}, "macAddress": "BC-31-5B-E2-EE-B1" "networkSecurityGroup":{"id":"/subscriptions/{guid}/../Microsoft.Network/networkSecurityGroups/myNSG1" }, "ipConfigurations": [ { "name": "myIPv4IP1", "properties": { " privateIpAddressVersion ": IPv4 "subnet": {"id": "/subscriptions/{guid}/../Microsoft.Network/virtualNetworks/myvnet1/subnets/mysub1"}, "privateIPAddress": "10.0.0.8", "privateIPAllocationMethod": "Static | Dynamic", "publicIPAddress": {} "loadBalancerBackendAddressPools": [ {"id": "/subscriptions/{guid}/../Microsoft.Network/loadBalancers/mylb1/backendAddressPools/IPv4BackendPool1"} ], "loadBalancerInboundNatRules": [ ] } }, { "name": "myIpV6Ip1", "id": "/subscriptions/{guid}/../Microsoft.Network/networkInterfaces/vm1mynic1/ipConfigurations/ myIpV6Ip1", “etag”: “W/\”00000000-0000-0000-0000-000000000000\”“, "properties": { "provisioningState": “Updating|Deleting|Failed|Succeeded”, " privateIpAddressVersion ": IPv6, "subnet": "privateIPAddress ": "privateIPAllocationMethod": Dynamic", "publicIPAddress": "loadBalancerBackendAddressPools": [ {"id": "/subscriptions/{guid}/../Microsoft.Network/loadBalancers/myIPv6lb1/backendAddressPools/IPv6BackendPool1"} ], "loadBalancerInboundNatRules": [] } } ], "dnsSettings": { "dnsServers": ["1.0.0.1","2.0.0.2"], "appliedDnsServers": ["1.0.0.1","2.0.0.2", “3.0.0.3”] }, “enableIPForwarding”: false } }
The choice of IPv6 version imposes the following restrictions:
I hope this information will help you successfully overcome all the difficulties that may arise when you start working with IPv6 in Azure.
If we talk about the future - at the moment, alas, I can not say when updates will be made, correcting very biting restrictions, and when this article will become useless. There is no information from either the Azure DNS team or the NRP (Network Resource Provider). Will there be a possibility of more gentle migration of existing infrastructures? For me, these questions are also open.
If we say that I still know:
Thank you for your attention, please contact us if you have any questions.
Source: https://habr.com/ru/post/311742/
All Articles