如何使服务TCP/UDP端口在Kubernetes中可从外部访问?

如何使服务TCP/UDP端口在Kubernetes中可从外部访问?,kubernetes,Kubernetes,我有许多租户在一个Kubernetes集群(AWS上)上运行,每个租户都有一个Pod,它公开一个TCP端口(不是HTTP)和一个UDP端口 我不需要负载平衡功能 该方法应该公开一个IP地址,该地址在外部可用,并为每个租户提供一个专用端口 我不想将节点直接暴露在internet上 到目前为止,我有以下服务: apiVersion: v1 kind: Service metadata: name: my-service labels: app: my-app spec: ty

我有许多租户在一个Kubernetes集群(AWS上)上运行,每个租户都有一个Pod,它公开一个TCP端口(不是HTTP)和一个UDP端口

  • 我不需要负载平衡功能
  • 该方法应该公开一个IP地址,该地址在外部可用,并为每个租户提供一个专用端口
  • 我不想将节点直接暴露在internet上
到目前为止,我有以下服务:

apiVersion: v1
kind: Service
metadata:
  name: my-service
  labels:
    app: my-app
spec:
  type: NodePort
  ports:
    - port: 8111
      targetPort: 8111
      protocol: UDP
      name: my-udp
    - port: 8222
      targetPort: 8222
      protocol: TCP
      name: my-tcp
  selector:
    app: my-app
该怎么办?

由@ffledgeling提供的是您所需要的

但是我必须提到,如果你想公开端口,你必须使用负载平衡器或者向互联网公开节点。例如,您可以将节点公开到Internet,只允许访问某些必要的端口。

  • AWS群集上的NGINX入口控制器
  • 将您的服务我的服务类型从
    NodePort
    更改为
    ClusterIP
  • 编辑
    ingress nginx
    命名空间中的configMap
    tcp服务
    ,添加:
  • 同样适用于configMap
    udp服务

现在,您可以使用需要使用kubernetes服务的nginx控制器IP
(TCP)和
(UDP)

从外部访问应用程序。下面是我为一个类似问题写的详细答案,可能对你有用。我不是投反对票的人,但我怀疑你的问题是重复的。你可以使用Ingress(GKE支持它,但我不知道AWS)并将其附加到反向代理。AWS负载平衡器不支持UDP,只支持TCP。另外,我不想为每个租户创建一个AWS负载平衡器=>昂贵。如果我只暴露一个节点,那么这个节点确实会成为一个单点故障。@mitchkman实际上,除了暴露UDP和TCP的节点或使用单独的AWS ELB进行TCP,您没有其他选择。此外,还可以公开多个节点。这里没有魔法。“我不想将节点直接暴露在互联网上”-在AWS上根本不可能使用UDP,在没有ELB的情况下也不可能使用TCP
data:
  "8222": your-namespace/my-service:8222
data:
  "8111": your-namespace/my-service:8111