每个可以通过互联网访问的kubernetes容器 - 是否可能?

时间:2017-05-16 04:59:41

标签: kubernetes

我正在考虑将kubernetes作为我的应用程序的平台。我将启动多个StatefulSet,每个包含最多32个容器。 kubernetes集群将包含几个节点,并且将为每个节点分配例如节点。 32个外部IP地址。

我的应用程序要求运行在Internet上某处的客户端能够通过静态IP地址和端口访问每个单独的服务器实例,以实现基于客户端的负载平衡和故障转移。服务器可以随时出现并死亡,但服务器运行时服务器地址应该是稳定的。

总而言之,我希望能够从互联网上访问我的容器,如下所示:

  • 有状态集1:
    • 容器1:node1.domain.com:1000
    • 容器2:node2.domain.com:1000
  • 有状态集2:
    • 容器1:node1.domain.com:1001
    • 容器2:node2.domain.com:1001
  • 有状态集3:
    • 容器1:node2.domain.com:1002
    • 容器2:node3.domain.com:1002

这是否可以通过kubernetes实现?如果是这样,您能提供一些提示,并提供相关的kubernetes文档吗?

2 个答案:

答案 0 :(得分:0)

您是否与StatefulSet绑定?对我来说听起来更像DaemonSet。如果您想坚持StatefulSet,只需使用container规范中的容器/主机端口参数。

示例,在与群集中的选择器条件匹配的每个节点上各自的端口上运行应用overflow-foooverflow-baroverflow-baz

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: overflow-app
  labels:
    app: overflow-app-agent
    version: v1
spec:
  template:
    metadata:
      labels:
        name: overflow-app
    spec:
      hostPID: true
      hostIPC: true
      hostNetwork: true
      containers:
      - image: overflow-foo:latest
        name: overflow-bar
        command: [ "bash", "-c", "run.sh" ]
        ports:
        - containerPort: 1000
          hostPort: 1000
      - image: overflow-bar:latest
        name: overflow-bar
        command: [ "bash", "-c", "run.sh" ]
        ports:
        - containerPort: 1001
          hostPort: 1001
      - image: overflow-baz:latest
        name: overflow-baz
        command: [ "bash", "-c", "run.sh" ]
        ports:
        - containerPort: 1002
          hostPort: 1002

答案 1 :(得分:0)

听起来您想使用Services曝光您的StatefulSets。您可以为每个有状态集定义一个服务,并使用NodePortLoadBalancer将其公开给外部世界。 NodePort可用于在群集中的每个Node上进行寻址,而LoadBalancer可以是单个入口点,也可以平衡负载与StatefulSet的不同PODs。有关详细信息,请阅读Services的官方文档,尤其是NodePortLoadBalancer的相应部分。

另外一个注意事项 - 默认情况下,NodePort使用端口范围30000-32767,但您可以使用群集参数service-node-port-range更改它。请参阅docs