我们在集群中部署了多个微服务,详细信息如下: 总共有7个微服务部署到了集群,其中3个是无状态微服务,另外4个是有状态微服务。 实现了http.sys以公开安全的终结点,并希望使用默认端口443公开所有这些服务终结点。 为了区分服务,在URL中添加了别名。
已启用正确的负载平衡规则和探针,以使用443端口进行访问,并使用FQDN网址访问这些服务。
无状态微服务按预期运行正常。
但是无法使用FQDN URL访问有状态微服务。 错误信息为HTTP错误503。服务不可用。
如果为每个服务使用特定的端口,则可以正常工作,但是我们只需要使用共享的443端口进行访问。
预先感谢您的建议。
答案 0 :(得分:0)
您没有弄清楚如何公开这些服务,我假设您是直接从负载均衡器访问服务打开(和共享)的节点端口443,而不是使用所述的反向代理方法here。
有状态服务具有不同的行为,您在注册这些端口时需要正确理解:
有状态服务可能在同一主机(进程)上托管多个分区,因此每个副本分区可能希望使用彼此相同的端口。 在这种情况下,docs中描述的正确方法是注册一个包含分区和副本ID的前缀,如果您遵循文档,则可能已经注册了以下有状态服务:
private ICommunicationListener CreateInternalListener(ServiceContext context)
{
EndpointResourceDescription internalEndpoint = context.CodePackageActivationContext.GetEndpoint("ProcessingServiceEndpoint");
string uriPrefix = String.Format(
"{0}://+:{1}/{2}/{3}-{4}/",
internalEndpoint.Protocol,
internalEndpoint.Port,
context.PartitionId,
context.ReplicaOrInstanceId,
Guid.NewGuid());
string nodeIP = FabricRuntime.GetNodeContext().IPAddressOrFQDN;
string uriPublished = uriPrefix.Replace("+", nodeIP);
return new HttpCommunicationListener(uriPrefix, uriPublished, this.ProcessInternalRequest);
}
这样可以通过以下网址访问该服务:
{scheme}://{nodeIp}:{port}/{partitionid}/{replicaid}-{guid}
另一个问题是
由于这些原因,您应该避免直接公开有状态服务,并将其置于代理之后,如第一个链接中所述。