如何使服务TCP/UDP端口在Kubernetes中可从外部访问?
我有许多租户在一个Kubernetes集群(AWS上)上运行,每个租户都有一个Pod,它公开一个TCP端口(不是HTTP)和一个UDP端口如何使服务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
- 我不需要负载平衡功能
- 该方法应该公开一个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
- 编辑
命名空间中的configMapingress nginx
,添加: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