【问题标题】:k8s / namespaces - Create "child" namespacek8s / 命名空间 - 创建“子”命名空间
【发布时间】:2021-02-26 09:44:02
【问题描述】:

能否在 Kubernetes 的命名空间之间共享 pod?


给定如下设置:

pod namespace
A team_1
B team_1
C team_1
D team_1

这就是我想要实现的目标:

pod namespace
A team_1
B team_1
C team_1
D team_1
A team_1_JIRA-12

我想(即时)创建一个新的命名空间, 特定于给定的拉取请求,仅“覆盖”少数几个 pod, 同时仍然能够与父 ns 的 pod 通信。

【问题讨论】:

标签: kubernetes overlay


【解决方案1】:

是否可以在 Kubernetes 的命名空间之间共享 pod?

简答:不,不可能。

正如Malathi 在她的回答中已经提到的,Pod 不能属于多个命名空间。

看看Network Policies,因为它们似乎是适合您用例的解决方案。正如您在文档中看到的那样:

如果您想在 IP 地址或端口级别控制流量 (OSI 第 3 层或第 4 层),那么您可能会考虑使用 Kubernetes 集群中特定应用程序的网络策略。 NetworkPolicies 是一个以应用程序为中心的结构,它允许您 指定如何允许 pod 与各种网络进行通信 “实体”(我们在这里使用“实体”这个词来避免重载 更常见的术语,例如“端点”和“服务”,它们具有 特定的 Kubernetes 内涵)在网络上。

Pod 可以与之通信的实体通过 以下 3 个标识符的组合:

允许的其他 pod(例外:一个 pod 不能阻止访问 本身)允许 IP 块的命名空间(例外:到 并且始终允许从运行 Pod 的节点开始,无论 Pod 或节点的 IP 地址)在定义 pod- 或 基于命名空间的 NetworkPolicy,您使用选择器来指定什么 允许流量进出与选择器匹配的 Pod。

【讨论】:

    【解决方案2】:

    Kubernetes 不允许您在 2 个命名空间之间共享一个 pod。但是,您可以为 pod A 定义一个名为 service A 的服务,并使用 kubernetes DNS 访问另一个命名空间 team_1_JIRA-12 中的服务 A。您可以使用 cURL 访问 team_1 命名空间中的 pod A,使用其服务如下:

    kubectl create deployment nginx --image=nginx
    kubectl exec -it nginx-6799fc88d8-cx84f -- bash    
    root@nginx-6799fc88d8-cx84f:/# curl http://A.team_1
    

    【讨论】:

    • 您无法通过这种方式访问​​ pod。虽然这在服务的情况下是正确的,但在 pod 的 DNS 解析方面却不是这样。查看 kubernetes 文档中的 this 部分。也许您的意思是 Service 公开了这样的 Pod 但您的回答可能表明您可以通过其 <name>.<namespace> 访问 Pod。
    • 更新答案以更好地解释
    猜你喜欢
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    相关资源
    最近更新 更多