- PVSM.RU - https://www.pvsm.ru -
Выражаем благодарность за подготовку статьи Михаилу Тряхову (@PerseptronYar [1]) из компании Akvelon (Ярославль) [2] за помощь в написании данной статьи. Михаил работает в команде разработчиков Microsoft Azure CLI (Command Line Interface) со специализацией на Networking Services.
Всем привет! Сегодня настал момент поговорить о долгожданном нововведении, которое, с дымом и спешкою, подготовили-таки к конференции Ignite. Это событие прошло 28 по 30 сентября в Атланте, и о нем уже распрекрасно написано, скажем, здесь [3]. Тем не менее, уже известно, что IPv6 стал доступен в целом ряде регионов (location) Microsoft Azure. Под катом подробности.
Сказать, что данный функционал ожидаем — ничего не сказать. Стоит, для начала, вбить в поисковике "Azure IPv6". Анонсирую: найдете вы лишь пару-тройку ссылок, в основном крутящихся вокруг Feature requests (например, здесь [4] и тут [5]) и обещаний компании [6]. И вот, свершилось!
IPv4 и IPv6 — совершенно разные и никаким образом не зависящие друг от друга версии IP. То есть подразумевается, что невозможно конвертировать IPv4 адрес в IPv6 и т.п. Основной задачей, которую IPv6 начинает решать — обеспечение взаимодействия виртаульных машин Azure и IPv6-клиентов, интегрируя это с многообразием доступных в NRP (Network Resource Provider) сервисов, таких, как Load balancer (балансировщик нагрузки), NIC (Network Interface, интерфейс сети), public ip (публичные IP-адреса) и производные.
Не могу не предложить, ради интереса, попробовать в деле часть описываемых в посте команд на платформе Azure CLI. Как я уже писал [7] в первой обзорной статье в данном блоге — это расширение командной строки, позволяющее управлять инфраструктурой Azure на множестве операционных систем (Windows, Mac, многие дистрибутивы Linux). Чтобы установить ее, можно воспользоваться инструкцией [8] на официальном сайте. Обратите внимание, что установленная версия должна быть выпущена после 28 сентября 2016 года. Нужный релиз доступен по ссылке [9].
Порисуем. На картинке изобразим синим имевшиеся доселе возможности кастомизации балансировщика, зеленым — обновления, которые стали доступны.
Опишу основные плюшки, которые нам это несет:
Существует и ряд ограничений. Например, произвести данные модификации по использованию IPv6 мы уже не сможем через графический интерфейс. Как я уже писал раньше, работать с JSON и консолями придется больше и больше. Так и здесь, вариантов остается немного:
Для начала, в выбранной группе ресурсов (речь, как Вы поняли, идет исключительно об ARM), необходимо настроить сеть, подсети и создать "пустой" load balancer. Средствами Azure CLI для этого достаточно выполнить команды из упомянутого выше руководства [13]. Я буду опираться на приведенный там (как и с PowerShell, template) пример, сконцентрировавшись на важных (с точки зрения данной темы) моментах. Цель последующих абзацев — максимально подробно разобрать процесс развертывания указанной архитектуры и описать имеющиеся ограничения.
Поскольку все три доступных нам способа обеспечить поддержку IPv6 не мытьём, так катаньем сводятся к тому, что лишь отправляют соответствующей API-версии Azure SDK сформированный JSON, то именно работу с JSON-шаблонами я и считаю наиболее верным демонстрировать, сосредоточившись на нововведениях.
Итак, согласно нарисованной выше схеме, мы делаем PUT запросы и получаем два 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."
}
}
}
Здесь прошу обратить внимание на ряд моментов
{
"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":
},
}
Здесь есть ряд ограничений
Следующим важным шагом в разборе приведенной архитектуры будет являться настройка балансировщика нагрузки. Он будет ожидаемо большим — прошу в гости посмотреть презентационный вариант PUT [14] и GET [15] запросов.
Восстановить их полностью вы легко сможете, выполнив действия, согласно документации по любой из платформ, например моя родная Azure CLI [13].
Обратим внимание на следующие моменты.
Frontend IP Configuration-Public IP (VIP)
Если конфигурация Frontend IP ссылается на публичный (public) IP-адрес с версией ipVersion = IPv6, то будут выполнены следующие проверки:
Backend Address Pools (Backend)
Валидация будет состоять в проверке настроек интерфейса сети (NIC). Каждый экземпляр backend adress pool-a может ссылаться на NIC лишь с одним типом поддерживаемых адресов — либо IPv4, либо IPv6.
Load Balancer Rule (FE <-> BE)
Если конфигурация Frontend IP ссылается на публичный (public) IP-адрес с версией ipVersion = IPv6, имеют место следующие ограничения:
Inbound NAT pools не могут содержать конфигурацию, ссылающуюся на IPv6 VIP.
Inbound NAT rules должны удовлетворять условию, что конфигурации Frontend IP и Backend IP должны быть версии IPv6.
Outbound NAT Rules
Ну и, как говорилось выше, в существующей конфигурации невозможно обновить версию IP-адресов (IPv4->IPv6).
Здесь я также предлагаю обратиться непосредственно к примеру конфигурации интерфейса сети
{
"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
}
}
Выбор версии IPv6 накладывает следующие ограничения:
Надеюсь, приведенные сведения помогут Вам успешно преодолеть все сложности, которые могут возникнуть при начале работы с IPv6 в Azure.
Если говорить о будущем — на данный момент, увы, я не могу сказать, когда будут произведены обновления, исправляющие весьма кусачие ограничения и когда эта статья станет бесполезной. Пока нет информации ни от команды Azure DNS, ни от NRP (Network Resource Provider). Будет ли возможность более ласковой миграции существующих инфраструктур? Для меня эти вопросы также открыты.
Если говорить о том, что я все же знаю:
Спасибо за внимание, обращайтесь по возникшим вопросам.
Автор: Microsoft
Источник [16]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/microsoft/195997
Ссылки в тексте:
[1] @PerseptronYar: https://habrahabr.ru/users/PerseptronYar/
[2] Akvelon (Ярославль): https://vk.com/akvelon_inc
[3] здесь: https://habrahabr.ru/company/microsoft/blog/311002/
[4] здесь: http://serverfault.com/questions/393297/does-windows-azure-present-an-ipv6-address
[5] тут: https://feedback.azure.com/forums/217313-networking/suggestions/4992369-support-ipv6-throughout-the-azure-platform
[6] обещаний компании: http://stackoverflow.com/questions/31581816/ipv6-support-for-azure
[7] писал: https://habrahabr.ru/company/microsoft/blog/278175/
[8] инструкцией: https://azure.microsoft.com/en-us/documentation/articles/xplat-cli-install/
[9] по ссылке: https://github.com/Azure/azure-xplat-cli/releases/tag/v0.10.5-September2016
[10] DHCP: https://azure.microsoft.com/ru-ru/documentation/articles/load-balancer-ipv6-for-linux/
[11] импортировать: https://azure.microsoft.com/ru-ru/documentation/articles/load-balancer-ipv6-internet-template/
[12] Использовать PowerShell: https://azure.microsoft.com/ru-ru/documentation/articles/load-balancer-ipv6-internet-ps/
[13] руководства: https://azure.microsoft.com/ru-ru/documentation/articles/load-balancer-ipv6-internet-cli/
[14] PUT: https://github.com/MikhailTryakhov/azure-quickstart-templates/blob/master/IPv6/load_balancer_ipv6_demo_put.json
[15] GET: https://github.com/MikhailTryakhov/azure-quickstart-templates/blob/master/IPv6/load_balancer_ipv6_demo_get.json
[16] Источник: https://habrahabr.ru/post/311742/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.