通过 kuberenetes 的负载均衡 IP 访问 Kubernetes 容器中的自托管 net.tcp wcf

问题描述

我使用 net.tcp 绑定控制台应用程序自行托管了一个 .NET framework 4.x 版本的 WCF,该应用程序在 Azure k8s contianer 中运行,作为自托管 wcf 服务

暴露为 net.tcp://CONTAINERIP:5000/WCFServiceName

并且端口 5000 通过 Loadbalancer 类型的入口服务公开

所以客户端将像下面一样访问这个服务

net.tcp://LoadBalancerIP:5000/containerAppName/WCFServiceName

但使用负载均衡器 ip 不会将请求转发到容器 - 出现错误

'没有端点侦听 net.tcp://LoadBalancerIp:5000/ContainerAppName/WCFServiceName 可以接受消息。这通常是由不正确的地址或 SOAP 操作引起的。有关更多详细信息,请参阅 InnerException(如果存在)。'

LB Yaml

spec:
  clusterIP: IP.ADDRESS.OF.CLUSTER
  externalTrafficPolicy: Cluster
  ports:
  - name: nettcp
    nodePort: 30412
    port: 5000
    protocol: TCP
    targetPort: 5000
  selector:
    app: CONTAINERAPPNAME
  sessionAffinity: None
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - ip: LB.PUBLIC.IP.ADDRESS

任何想法或建议??

解决方法

感谢您的投入,

找到问题原因,由于应用是使用LoadBalancer类型的服务部署的,所以不需要在URL中提供应用名称。

当外界访问服务时:

net.tcp://LoadBalancerIP:5000/containerAppName/WCFServiceName - 行不通

net.tcp://LoadBalancerIP:5000/WCFServiceName - 这有效!!! (解决方案)

当我们进行自托管时,我们需要在 URI 框架中包含应用名称以托管 WCF TCP 服务。