Kubernetes,暴露所有端口

3

我想使用Kubernetes,因为我在各个地方都看到:“毫无疑问,Kubernetes是目前可用的领先容器编排工具。”

我的问题是与网络有关。我需要向每个Pod公开外部IP。我希望我的Pod可以被视为传统的VM或HW服务器。这意味着我需要公开所有端口。

据我所见,我只能公开有限的端口列表。

我是正确的吗?还是我错过了什么?

谢谢, Raoul


请查看NGINX Ingress Controller - wineinlib
如果虚拟机或裸金属服务器更适合您的应用程序,请务必使用它们。(有一些Docker问题需要监听数千个TCP端口,通常的答案是禁用Docker的网络层;在Kubernetes中这甚至更难。) - David Maze
1
@RaoulDebaze,您能否解释一下为什么需要公开_all_端口?您的应用程序是否期望在随机端口接收传入流量? - PjoterS
@RaoulDebaze,如果是连续的端口,您可以使用脚本生成服务yaml。例如,可以使用类似于这个脚本的东西。顺便问一下,您实现了目标吗?Kamol关于NodePort是正确的。 - Nick
你能够暴露整个容器及其所有端口吗?我想对内部集群网络执行相同的操作。 - Mohammed Noureldin
显示剩余2条评论
2个回答

1
在Kubernetes中,您需要使用服务与pod进行通信。要将pod暴露到Kubernetes集群外部,可以使用NodePort类型的k8s服务。
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  type: NodePort
  ports:
    - 
      port: 8080
      nodePort: 30000
      name: my-port-8080
    -
      port: 8081
      nodePort: 30001
      name: my-port-8081
    -
      port: 8082
      nodePort: 30002
      name: my-port-8081

然后,您将能够通过以下方式访问您的pod:https://<node-ip>:nodePort。对于集群内通信,您可以使用服务的DNS:<service-name>.<namespace>.svc:PORT 更新: 请参阅此指南:使用服务公开您的应用程序

2
是的,我理解这一点,但是在这里您只公开了一个端口。我需要我的单个容器在我的部分中具有外部IP,并且被外部世界视为独立的虚拟机或服务器。 - Raoul Debaze
在这里,ports[]是一个数组字段,您可以添加多个端口。您还可以尝试使用Ingress控制器 - Kamol Hasan

0

你说得对。
Pods不是“真正”的服务器,它们只是具有开放端口的应用程序实例。

由于Docker和Kubernetes网络实现的限制,无法构建您想要的内容。

我不知道您的使用情况,但也许您并不需要Kubernetes。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接