每个单独的kubernetes容器都可以从互联网上访问-有可能吗?

每个单独的kubernetes容器都可以从互联网上访问-有可能吗?,kubernetes,Kubernetes,我正在考虑将kubernetes作为我的应用程序平台。我将启动多个statefulset,每个statefulset最多包含32个容器。kubernetes集群将包含几个节点,每个节点将分配32+个外部IP地址 我的应用程序要求运行在internet某处的客户端能够通过静态IP地址和端口访问每个服务器实例,以实现基于客户端的负载平衡和故障切换。服务器可以随时出现和死亡,但在服务器运行时,服务器地址应该是稳定的 简而言之,我希望能够通过互联网访问我的容器,如下所示: 状态集1: 容器1:nod

我正在考虑将kubernetes作为我的应用程序平台。我将启动多个statefulset,每个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文档?

您被绑定到
状态集的任何原因?对我来说,这听起来更像是一场灾难。如果您想坚持使用
StatefulSet
,只需使用
container
规范中的container/host port参数即可

例如,在与群集中的选择器条件匹配的每个节点上,在各自的端口上运行应用程序
overflow foo
overflow bar
overflow 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

听起来您想使用
服务
公开您的
状态集
。您可以为每个有状态集定义一个服务,并使用
NodePort
LoadBalancer
将其公开给外部世界。集群中的每个
节点上都有一个
节点端口
,负载均衡器是一个入口点,它还可以将负载平衡到状态集的不同
POD
。有关更多信息,您可以阅读的官方文档,尤其是和的部分


另一个注意事项-默认情况下,NodePort使用端口范围30000-32767,但您可以使用群集参数
服务节点端口范围
对其进行更改。看。

Hm,是的,也许这就是我需要的执行方法。我有两个后续问题。1) 我需要容器能够通过稳定的网络id相互通信,使用稳定的存储和按需扩展。我在查看StatefulSet,因为它正好提供了这个特性。2) 如果我在模板中指定hostPort vs hostNetwork选项,它最终将绑定到哪个IP?例如,我可能只有几个kubernetes节点,但同一集中有许多容器和许多外部IP地址。我需要将每个节点绑定到一些外部IP和端口。这听起来有点像“为我做家庭作业”。我不想说RTFM但是。。。阅读docker、kubernetes和openshift文档。大多数“入门”文档都会回答您的问题。1)当以这种方式部署时,容器都将采用其主机的IP/networkID。2) 这个问题没有意义<代码>主机网络
主机端口
执行两项独立的操作
hostNetwork
允许pod完全访问节点网络。听起来它只需要这个端口。如果你需要的话,只暴露端口。对不起,我不是想强迫别人做我的工作。kubernetes中没有明确记录网络主题。它给出了一些典型的场景,但仍然非常有限。因此,目前尚不清楚库伯内特斯到底能实现什么。这个问题的目的是澄清kubernetes的网络能力,并填补文档空白。在深入细致的研究和实验之前,一个专家的建议可以节省宝贵的时间,尤其是在kubernetes没有我的要求的情况下。