我有一个非常简单的Web服务器,它可以侦听端口8080(node.js app)。该服务器进入容器内部。我不能在机器上安装多台服务器,因为它们分配了大量内存。
我想部署该容器的多个实例(比如大约100个,可能更多),然后将它们暴露在不同端口的相同外部可见IP地址上。所以说ip_address:10314,ip_address:12605,ip_address:23040等。
这种东西可以在Kubernetes中架构吗?
答案 0 :(得分:0)
您可以在每个Pod前面使用LoadBalancer类型的服务,每个Pod使用一个容器。然后你想像这样控制location.href
:
nodePort
apiVersion: v1
kind: Service
metadata:
name: service-001
spec:
type: LoadBalancer
ports:
- port: 8080
nodePort: 31001
selector:
app: pod-001
在每个节点上公开,并且应该按照您期望的方式工作。
扩展需要您创建一个新的Service +(部署)+ Pod + Container组合,您必须手动确保nodePort
不会与其他服务发生冲突。
干杯
答案 1 :(得分:0)
您可以使用NodePort
服务公开容器,如果您不需要该服务也提供负载平衡(听起来您不会这样做)。以下是NodePort
的示例YAML配置:
apiVersion: v1
kind: Service
metadata:
name: example-service-name
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 31112
selector:
run: name-of-app
(如果您要公开在容器内80以外的端口上运行的应用,请更改port
和targetPort
。)
您可以使用自动构建工具或一组shell脚本自动填充nodePort
和run
字段,而不是对所有内容进行硬编码。这可以让您避免端口冲突。
答案 2 :(得分:0)
你可以使用反向代理,比如Nginx。它可以作为所有容器的前端。所有请求都将被发送到Nginx,它将根据传入请求的端口,主机名或URL将它们转发到容器