如何多次运行相同的部署,并且每次都可通过唯一端口访问?(K8s)

如何多次运行相同的部署,并且每次都可通过唯一端口访问?(K8s)

根据以下约束,我将如何配置服务和/或入口来处理数百个此类部署的启动和关闭:

  • 此部署是foo-1,后续部署将以唯一名称命名
  • 每个部署都映射到 1 个唯一的 pod(元名称和副本处理此问题)
  • 每个 pod 可通过 2 个唯一端口访问
  • 端口将被分配,例如使用NodePort
  • 所有 Pod 都应该可以从同一 IP 访问
  • 我可以使用 LoadBalancer,但不能为每个部署都使用一个
  • 如果除了部署之外还有其他用途,那就没问题
  • 部署将单独创建和删除,而不是作为一个组


    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: foo-1
      labels:
        app: foo
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: foo
      template:
        metadata:
          labels:
            app: foo
        spec:
          containers:
            - name: foo
              image: bar/baz:latest
              ports:
                - containerPort: 83
                  name: listen
                - containerPort: 85
                  name: serve
    

我正在使用 GKE,我认为它有防火墙,阻止我直接访问节点。我并不反对禁用防火墙,但如果可能的话,我更愿意通过 LoadBalancer 来做到这一点。

答案1

我建议你先将你的Deployment代码抽象化。你可以这样做Helm Chart或者Kustomize

有了这样的抽象,你就能做出服务匹配特定的部署动态地。然后,您可以公开每个Service 以各种方式,包括NodePort。(我不推荐它。考虑一下 ClusterIP,但这取决于你的需求。)

例如,Helm Chart 允许您range通过端口。

相关内容