繁体   English   中英

使用 Terraform 的 Azure 容器实例上的 Lightstreamer

[英]Lightstreamer on Azure Container Instances using Terraform

我正在尝试将Lightstreamer Docker 实例部署到Azure Container Groups

我的 adapters.xml 配置如下:

<?xml version="1.0"?>

<adapters_conf id="SHOWCASE">

  <metadata_provider>
    <adapter_class>com.lightstreamer.adapters.metadata.LiteralBasedProvider</adapter_class>
  </metadata_provider>

  <data_provider>
    <adapter_class>ROBUST_PROXY_FOR_REMOTE_ADAPTER</adapter_class>
    <classloader>log-enabled</classloader>
    <param name="request_reply_port">6661</param>
    <param name="notify_port">6662</param>
  </data_provider>

</adapters_conf>

Dockerfile 的结构如下:

FROM lightstreamer:7.0

COPY ["adapters.xml", "/lightstreamer/adapters/proxy/"]

最后但并非最不重要的是我的 terraform 文件如下所示:

 resource "azurerm_container_group" "lightstreamer" {
     name = "${var.organization}-${var.project}-lightstreamer"
     depends_on = [
       azurerm_container_registry.container_registry
     ]
     location = var.location
     resource_group_name = azurerm_resource_group.resource_group.name
     ip_address_type = "Public"
     os_type = "Linux"
     container {
       name = "lightstreamer-web"
       image = "${azurerm_container_registry.container_registry.login_server}/lightstreamer:${var.image_tag}"
       cpu = "0.5"
       memory = "1.5"
       ports {
         port = 8080
         protocol = "TCP"
       }
       ports {
         port = 6661
         protocol = "TCP"
       }
       ports {
         port = 6662
         protocol = "TCP"
       }
     }
     exposed_port = [
       {
           port = 8080
           protocol = "TCP"
       },
       {
           port = 6661
           protocol = "TCP"
       },
       {
           port = 6662
           protocol = "TCP"
       }
     ]
     image_registry_credential {
         server = "${azurerm_container_registry.container_registry.login_server}"
         username = "${azurerm_container_registry.container_registry.admin_username}"
         password = "${azurerm_container_registry.container_registry.admin_password}"
     }    
     dns_name_label = "${var.organization}-${var.project}-lightstreamer"
 }

不幸的是,每当我将暴露的端口 6661 和 6662 添加到 terraform(由于 adapters.xml 需要它们)时,Lightstreamer 都会遇到错误:

09.Aug.22 17:48:41,358 < INFO> Request sender 'SHOWCASE.DEFAULT' starting...
09.Aug.22 17:48:41,372 < INFO> Reply receiver 'SHOWCASE.DEFAULT' starting...
09.Aug.22 17:48:44,232 < INFO> Request sender 'SHOWCASE.DEFAULT' stopped
09.Aug.22 17:48:44,235 <ERROR> Exception caught while trying to initialize the Remote Server
com.lightstreamer.adapters.proxy.request_reply.DisconnectedException: Connection closed while waiting for an answer to request 10000018283b91608
    at com.lightstreamer.adapters.proxy.request_reply.RequestSender.quit(RequestSender.java:175)
    at com.lightstreamer.adapters.proxy.BaseRemoteProvider.stop(BaseRemoteProvider.java:100)
    at com.lightstreamer.adapters.proxy.data.RobustNetworkedDataProvider$RecoverableNDP.onInnerException(RobustNetworkedDataProvider.java:390)
    at com.lightstreamer.adapters.proxy.data.RobustNetworkedDataProvider$RecoverableNDP.access$400(RobustNetworkedDataProvider.java:258)
    at com.lightstreamer.adapters.proxy.data.RobustNetworkedDataProvider$RecoverableNDP$1.onException(RobustNetworkedDataProvider.java:375)
    at com.lightstreamer.adapters.proxy.request_reply.NotifyReceiver.run(NotifyReceiver.java:110)
09.Aug.22 17:48:44,236 <ERROR> Exception from the inner Proxy Data Adapter: com.lightstreamer.interfaces.data.DataProviderException: Connection closed while waiting for an answer to request 10000018283b91608
09.Aug.22 17:48:44,236 <ERROR> Got fatal error from the inner Proxy Data Adapter
com.lightstreamer.adapters.proxy.RemotingException: Unexpected end of reply stream reached
    at com.lightstreamer.adapters.proxy.request_reply.NotifyReceiver.run(NotifyReceiver.java:110)
Caused by: java.io.EOFException: null
    ... 1 common frames omitted
09.Aug.22 17:48:44,236 < INFO> Reply receiver 'SHOWCASE.DEFAULT' stopped
09.Aug.22 17:48:44,237 <ERROR> Inner Proxy Data Adapter initialization failure; no Inner Proxy will be used

在本地,它运行良好,但只要它托管在 ACI 上,就会发生此错误。

在使用 Amazon Web 服务重建整个方法后,事实证明,一些运行状况探测在 AWS 上导致了同样的问题。 因此,我将探针更改为指向默认的 http (8080) 端口,而不是配置的端口 6661 和 6662,并且它开始工作(在 AWS)。

不幸的是,我无法为 Azure 上的每个端口配置探针,因此我决定将整个实例移动到专用网络中。

因此,我将 terraform 更改如下:

     ip_address_type = "Private"

并添加了这些资源:

resource "azurerm_virtual_network" "default" { ... }

resource "azurerm_subnet" "lightstreamer" {
  name = "lightstreamer"
  depends_on = [
    azurerm_virtual_network.default
  ]
  resource_group_name = azurerm_resource_group.resource_group.name
  virtual_network_name = azurerm_virtual_network.default.name
  address_prefixes = [ "172.16.1.0/24" ]
  delegation {
    name = "delegation"
    service_delegation {
      name = "Microsoft.ContainerInstance/containerGroups"
      actions = ["Microsoft.Network/virtualNetworks/subnets/action"]
    }
  }
}

resource "azurerm_network_profile" "default" {
    name =  "ls-profile"
    depends_on = [
      azurerm_subnet.lightstreamer
    ]
    #location = "${var.location}"
    location = "westeurope"
    resource_group_name = "${azurerm_resource_group.resource_group.name}"
    container_network_interface {
      name = "ls-nic"
      ip_configuration {
        name = "default"
        subnet_id = "${azurerm_subnet.lightstreamer.id}"
      }
    }  
}

这次 Lightstreamer 启动良好,使我能够添加应用程序网关以提供公共访问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM