Kubernetes 如何通过一个负载平衡器公开多个TCP服务器

Kubernetes 如何通过一个负载平衡器公开多个TCP服务器,kubernetes,tcp,Kubernetes,Tcp,我有多个运行POD的部署,POD运行TCP服务器。这些TCP服务器都在端口9999上侦听 目前,每个部署都有自己的负载平衡器服务,这会导致每个部署使用不同的IP 但是,我希望有一个IP地址来公开部署,并且只按端口进行区分 例如: <public-ip>:9001 -> deployment 1 <public-ip>:9002 -> deployment 2 <public-ip>:9003 -> deployment 3 :9001->部

我有多个运行POD的部署,POD运行TCP服务器。这些TCP服务器都在端口9999上侦听

目前,每个部署都有自己的负载平衡器服务,这会导致每个部署使用不同的IP

但是,我希望有一个IP地址来公开部署,并且只按端口进行区分

例如:

<public-ip>:9001 -> deployment 1
<public-ip>:9002 -> deployment 2
<public-ip>:9003 -> deployment 3
:9001->部署1
:9002->部署2
:9003->部署3
我读过关于入口的书,但是

入口不会暴露任意端口或协议。向internet公开HTTP和HTTPS以外的服务通常使用service.type=NodePort或service.type=LoadBalancer类型的服务

所以这似乎不是一个选择


对于上下文,kubernetes托管在vnet中的azure中,只需要从此vnet中访问。

功能入口取决于您使用的控制器实现。例如,nginx入口控制器支持TCP/UDP代理,如文件所述

下一个示例演示如何使用端口
9000

apiVersion: v1
kind: ConfigMap
metadata:
  name: tcp-services
  namespace: ingress-nginx
data:
  9000: "default/example-go:8080"
如果使用TCP/UDP代理支持,则需要在为入口定义的服务中公开这些端口

apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  type: LoadBalancer
  ports:
    - name: http
      port: 80
      targetPort: 80
      protocol: TCP
    - name: https
      port: 443
      targetPort: 443
      protocol: TCP
    - name: proxied-tcp-9000
      port: 9000
      targetPort: 9000
      protocol: TCP
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

功能入口取决于您正在使用的控制器实现。例如,nginx入口控制器支持TCP/UDP代理,如文件所述

下一个示例演示如何使用端口
9000

apiVersion: v1
kind: ConfigMap
metadata:
  name: tcp-services
  namespace: ingress-nginx
data:
  9000: "default/example-go:8080"
如果使用TCP/UDP代理支持,则需要在为入口定义的服务中公开这些端口

apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  type: LoadBalancer
  ports:
    - name: http
      port: 80
      targetPort: 80
      protocol: TCP
    - name: https
      port: 443
      targetPort: 443
      protocol: TCP
    - name: proxied-tcp-9000
      port: 9000
      targetPort: 9000
      protocol: TCP
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

解决方案

  • 为每个部署创建一个NodePort类型的服务:在这种情况下,每个部署都可以通过以下方式从集群外部访问:
  • 设置指向所有k8s节点的外部反向代理/负载平衡器(kubernetes群集外部),并将其配置为接受来自端口9001、9002和9003的流量,并将其转发到k8s节点的端口

现在,您可以使用:900[1,2,3]访问您的应用程序

解决方案

  • 为每个部署创建一个NodePort类型的服务:在这种情况下,每个部署都可以通过以下方式从集群外部访问:
  • 设置指向所有k8s节点的外部反向代理/负载平衡器(kubernetes群集外部),并将其配置为接受来自端口9001、9002和9003的流量,并将其转发到k8s节点的端口
现在,您可以使用:900[1,2,3]访问您的应用程序