我可以为每个 user/firm 配备一个 K8s pod 吗?

Can I have a K8s pod per user/firm?

有没有办法让每个 user/per 公司有一个 K8s pod?我意识到,每个 user/per 公司分组正在将业务级别语义与基础架构混合在一起,但我说出于监管原因等原因,我有这种需求,以将事情分开。那么有没有一种方法可以在用户第一次登录时动态创建一个 pod,并保留这个 pod 引用并将任何进一步的请求路由到相关的 pod,该 pod 将托管一组容器,每个 运行 一个实例其中一个模块。

  1. 这可能吗?
  2. 如果可能,那些标识符是什么 可以即时注入到 pod 中,我可以用它来识别这是 USER-A-POD 与 USER_B_POD 或 FIRM_A_POD 与 FIRM_B_POD? 实际上,我需要一个 pod 模板来帮助我创建相同 pods 的 1 个副本,但它们唯一不同的地方是它们只提供与一个 user/one 公司相关的流量。

通常,如果您想将流量发送到特定的 pod,请说来自 Kubernetes Service you would use Labels and Selectors。例如,在服务中使用选择器app: usera-app

apiVersion: v1
kind: Service
metadata:
  name: usera-service
spec:
  selector:
    app: usera-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

然后说如果 Deployment 代表你的 pods,使用标签 app: usera-app:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: usera-deployment
spec:
  selector:
    matchLabels:
      app: usera-app
  replicas: 2
  template:
    metadata:
      labels:
        app: usera-app
    spec:
      containers:
      - name: myservice
        image: nginx
        ports:
        - containerPort: 80

更多信息here

如何分配 pods 和部署取决于您以及您可能使用的任何配置。如果您想在 deployments/pods 中强制创建一些标签,您可以查看 MutatingAdminssionWebhooks

如果您正在寻找促进这一切的项目,您可以看看:

  • Gatekeeper which is an implementation of the Open Policy Agent 用于 Kubernetes 录取。 (撰写本文时仍处于 alpha 阶段)

可以帮助您进行认证和准入机制的其他工具(必须针对标签进行调整):

是的,您可以使用命名空间为每个用户创建多个虚拟集群。

https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/

命名空间是在用户之间划分集群的方式。