[英]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.