Как настроить и включить обратный прокси-сервер Azure Service Fabric для существующего локального кластера?
Доступен ли обратный прокси-сервер Azure Service Fabric в локальном кластере? Если да, то как я могу включить его для существующего кластера?
Обратный прокси-сервер Service Fabric описанздесь . Он позволяет клиентам, внешним по отношению к кластеру, получать доступ к службам приложений по имени со специальным URL-адресом, без необходимости знать точный порт узла, на котором запущен экземпляр службы (который может изменяться при автоматическом перемещении служб).
По умолчанию Структура Службы обратного прокси-сервера не появляются, чтобы быть поддержкой для моих локальных кластеров с двумя экземплярами служба без. Я попытался использовать документированный порт 19008, но не смог связаться с сервисом, используя рекомендуемый синтаксис URI.
А именно, это работает:
http://fqdn:20001/api/odata/v1/$metadata
Но это не так:
http://fqdn:19008/MyApp/MyService/api/odata/v1/$metadata
В разделе NodeTypes ClusterConfig JSON, используемого для настройки моего кластера on-prem, есть свойство "httpGatewayEndpointPort": "19080", но этот порт не используется. по-видимому, работает как обратный прокси-сервер (это конечная точка веб-приложения Service Fabric Explorer). Я предполагаю, что необходимая конфигурация указана каким-то образом в конфигурации кластера JSON. В упомянутой статье есть инструкции, объясняющие, как настроить обратный прокси-сервер в облаке, но не локально.
Я ищу инструкции по настройке обратного прокси-сервера Service Fabric в локальном многомашинном кластере или кластере разработчиков.
3 ответа:
Да, обратный прокси-сервер доступен локально.
Чтобы заставить его работать для существующего кластера, его необходимо настроить и включить в XML-файле конфигурации кластера, а затем развернуть новую конфигурацию, как описано ниже.
Для нового кластера, установите его в JSON конфигурации кластера перед созданием кластера, как описано @Scott Weldon.
@Senj предоставил подсказку (спасибо!) это привело меня к ответу. Я недавно обновил свои биты Service Fabric на своей коробке dev, чтобы 5.1.163.9590. Когда я заглянул внутрь C:\SfDevCluster\Data\FabricHostSettings.xml, я заметил следующее:
<Section Name="FabricNode"> ... <Parameter Name="NodeVersion" Value="5.1.163.9590:1.0:0" /> ... <Parameter Name="HttpApplicationGatewayListenAddress" Value="19081" /> <Parameter Name="HttpApplicationGatewayProtocol" Value="http" /> ... </Section>
Интересно! С включенным кластером dev я перешел к:
http://localhost:19081/MyApp/MyService/api/odata/v1/$metadata
И вуаля! Мой API вернул ожидаемые данные. Так что @Senj был прав, что это имеет отношение к настройкам HttpApplicationGateway. Я предполагаю, что в последней версии SDK он предварительно настроен и включен по умолчанию. (Что меня сбило с толку, так это то, что все документы ссылаются на порт 19008, но фактический настроенный порт был 19081 год!)
Чтобы заставить обратный прокси работать на "реальном" многомашинном кластере (VM), я сделал следующее (примечание: Я не думаю, что обновление пакета кода кластера было необходимо, но поскольку у меня не было ничего в моем хранилище образов для обновления кластера, а процесс обновления кластера требует пакета кода, я использовал последнюю версию):
- скопируйте существующий манифест кластера (с вкладки манифест в Обозревателе Service Fabric Explorer), вставьте его в новый XML-файл и выберите нужную версию. пронумеровать и изменить следующим образом:
В раздел конечных точек NodeType добавьте:
<NodeTypes> <NodeType Name="NodeType0"> <Endpoints> <HttpApplicationGatewayEndpoint Port="19081" Protocol="http" /> ... </Endpoints> </NodeType> </NodeTypes>
И под
<FabricSettings>
добавить следующий раздел:<Section Name="ApplicationGateway/Http"> <Parameter Name="IsEnabled" Value="true" /> </Section>
Использование команд PowerShell Service Fabric:
- скопируйте новую конфигурацию кластера (ранее скопированный манифест.xml) в хранилище изображений ткани
- зарегистрируйте новую конфигурацию кластера
- скопируйте кодовый пакет кластера среды выполнения Service Fabric (доступный Здесь - см. выпуск Примечания для ссылки на MSI) в хранилище изображений
- зарегистрировать кластерный кодовый пакет
- запуск и завершение обновления кластера (я использовал unmonitored manual mode, который делает одну виртуальную машину за раз и требует ручной команды возобновления после завершения каждого узла)
После завершения обновления кластера я смог запросить API службы, используя обратную конечную точку прокси-сервера и синтаксис URL-адреса appname/servicename:
http://fqdn:19081/MyApp/MyService/api/odata/v1/$metadata
Я включил это в версии автономного установщика (5.1.156), добавив следующую строку в конфигурационный файл JSON под элементом
nodeTypes
(я использовалClusterConfig.Unsecure.MultiMachine.json
, но предполагаю, что любой из файлов JSON будет работать):"httpApplicationGatewayEndpointPort": "19081"
Итак, финал
nodeTypes
выглядел так:"nodeTypes": [ { "name": "NodeType0", "clientConnectionEndpointPort": "19000", "clusterConnectionEndpoint": "19001", "httpGatewayEndpointPort": "19080", "httpApplicationGatewayEndpointPort": "19081", "applicationPorts": { "startPort": "20001", "endPort": "20031" }, "ephemeralPorts": { "startPort": "20032", "endPort": "20062" }, "isPrimary": true } ]
Я думаю, что это имеет какое-то отношение к свойству HttpApplicationGatewayEndpoint, см. Также мой вопрос о https://github.com/Azure/service-fabric-issues/issues/5 Но на меня это не действует..
Также обратите внимание, что
<Section Name="ApplicationGateway/Http"> <Parameter Name="IsEnabled" Value="true" /> </Section>
Это верно для меня.
Правка:
Я заметил, что в моей установке только для Windows HttpApplicationGatewayListenAddress имеет значение 0 в FabricHostSettings.xml
<Parameter Name="HttpGatewayListenAddress" Value="19080" /> <Parameter Name="HttpGatewayProtocol" Value="http" /> <Parameter Name="HttpApplicationGatewayListenAddress" Value="0" /> <Parameter Name="HttpApplicationGatewayProtocol" Value="" />