我可以在同一个IP上公开多个容器吗?

时间:2017-01-17 19:28:47

标签: kubernetes google-cloud-platform

我有一个非常简单的Web服务器,它可以侦听端口8080(node.js app)。该服务器进入容器内部。我不能在机器上安装多台服务器,因为它们分配了大量内存。

我想部署该容器的多个实例(比如大约100个,可能更多),然后将它们暴露在不同端口的相同外部可见IP地址上。所以说ip_address:10314,ip_address:12605,ip_address:23040等。

这种东西可以在Kubernetes中架构吗?

3 个答案:

答案 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以外的端口上运行的应用,请更改porttargetPort。)

您可以使用自动构建工具或一组shell脚本自动填充nodePortrun字段,而不是对所有内容进行硬编码。这可以让您避免端口冲突。

答案 2 :(得分:0)

你可以使用反向代理,比如Nginx。它可以作为所有容器的前端。所有请求都将被发送到Nginx,它将根据传入请求的端口,主机名或URL将它们转发到容器