防止 Kubernetes 中的命名空间间通信

     2023-04-15     172

关键词:

【中文标题】防止 Kubernetes 中的命名空间间通信【英文标题】:Prevent inter-namespace communication in Kubernetes 【发布时间】:2018-07-31 09:06:09 【问题描述】:

我是 Kubernetes 网络的新手。

我们将 Kubernetes 集群分成一组命名空间(例如namespace-anamespace-b)。每个命名空间都有一组 Kubernetes pod。每个 pod 都有一个服务,可通过 my-svc.namespace-x.svc.cluster.local 获得。

现在,我们希望防止命名空间 namespace-a 的 Pod 与属于 namespace-b 的服务或 Pod 通信,反之亦然。命名空间的通信应该不受限制。

这是我在网络策略文档中找到的示例: https://kubernetes.io/docs/concepts/services-networking/network-policies/#the-networkpolicy-resource

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny
spec:
  podSelector: 
  policyTypes:
  - Ingress
  - Egress

据我了解,对于跨命名空间的所有 pod,这完全阻止了网络通信。

如何允许所有网络流量,但只允许特定命名空间内? 是否需要网络插件,例如 Calico、Flannel 或 Weave?我应该选择哪一个?

【问题讨论】:

您可以在此处找到许多网络策略示例:github.com/ahmetb/kubernetes-network-policy-recipes 【参考方案1】:

我是否需要网络插件,例如 Calico、Flannel 或 Weave?

无论您需要什么网络插件,但并非所有插件都支持NetworkPolicy API 对象。根据Declare Network Policy walkthrough,以下是支持NetworkPolicy 的插件列表(可能并非详尽无遗):

Calico Cilium Kube-router Romana Weave Net

如果没有支持NetworkPolicy 的插件,创建资源将无效。

我应该选择哪一个?

至于你应该选择哪一个,*** 不是征求这种建议的地方。我可以推荐的是阅读各种可用选项的概述/功能文档。也许在本地开发集群中尝试一两个不同的插件,以了解它们安装、维护和更新的难易程度。

如何允许所有网络流量,但只允许在特定命名空间内?

鉴于您的示例设置,我认为以下 NetworkPolicy 资源可以满足您的需求:

对于 namespace-a 中的 pod,只允许来自 namspace-a pod 的入口,拒绝来自任何其他来源的入口。出口不受限制:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: namespace-a
spec:
  policyTypes:
  - Ingress
  podSelector: 
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          name: namespace-a

对于 namespace-b 中的 pod,只允许来自 namspace-b pod 的入口,拒绝来自任何其他来源的入口。出口不受限制:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: namespace-b
spec:
  policyTypes:
  - Ingress
  podSelector: 
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          name: namespace-b

请注意,这假设您已在命名空间上设置了 name: namespace-aname: namespace-b 标签,类似于:

apiVersion: v1
kind: Namespace
metadata:
  name: namespace-a
  labels:
    name: namespace-a
    other: labelname

我指出这一点只是为了避免让您感到困惑,因为我上面显示的标签恰好与您假设的命名空间名称相匹配。标签可以是任意的,并且可能包含多个命名空间——例如,您可能有 namespace-anamespace-c 都带有一个名为 other: labelname 的标签,这将允许您使用 @ 中的单个 namespaceSelector 选择多个命名空间987654344@资源。

【讨论】:

如何在一个 Kubernetes 集群中的命名空间之间隔离 Keycloak Infinispan,以防止 KC pod 相互发现和同步

】如何在一个Kubernetes集群中的命名空间之间隔离KeycloakInfinispan,以防止KCpod相互发现和同步【英文标题】:HowcanisolateKeycloakInfinispanbetweennamespacesinoneKubernetesclustertopreventKCpodfromdiscoveringandsynchronizingfromoneother【发布时间】:2022-01-150... 查看详情

Kubernetes 中跨 pod 的跨命名空间通信

】Kubernetes中跨pod的跨命名空间通信【英文标题】:Crossnamespacecommunicationacrosspodsinkubernetes【发布时间】:2021-11-1006:08:49【问题描述】:如何在Kubernetes中跨pod进行跨命名空间通信?假设webserver&applicationpod位于命名空间A中,DB位... 查看详情

Kubernetes 中的网络策略问题

】Kubernetes中的网络策略问题【英文标题】:Issuewithnetworkpoliciesinkubernetes【发布时间】:2020-08-2400:56:22【问题描述】:创建一个命名空间取证取证命名空间内的所有pod都不能与外界通信(出口隔离)在默认命名空间中创建一个名... 查看详情

Kubernetes ingress egress 中的 Pod 通信

】Kubernetesingressegress中的Pod通信【英文标题】:Podscommunicationinkubernetesingressegress【发布时间】:2022-01-0806:31:13【问题描述】:如果我有两个pod在不同的命名空间上运行,并且netpol已经设置并且无法修改,我将如何处理POD到POD的通... 查看详情

kubernetes之networkpolicy,flannel和calico

参考技术APod是Kubernetes调度的最小单元。一个Pod可以包含一个或多个容器,因此它可以被看作是内部容器的逻辑宿主机。Pod的设计理念是为了支持多个容器在一个Pod中共享网络和文件系统。那么为什么Pod内的容器能够共享网络,I... 查看详情

删除所有 kubernetes 命名空间中的所有 pod 的命令

】删除所有kubernetes命名空间中的所有pod的命令【英文标题】:Commandtodeleteallpodsinallkubernetesnamespaces【发布时间】:2016-02-0404:48:17【问题描述】:在查看文档时,有一个API调用来删除单个pod,但是有没有办法删除所有命名空间中的... 查看详情

如何从默认 kops 命令更改 kubernetes 上下文中的默认命名空间?

】如何从默认kops命令更改kubernetes上下文中的默认命名空间?【英文标题】:Howtochangedefaultnamespaceinkubernetes\'contextfromdefaultkopscommand?【发布时间】:2021-11-2608:17:00【问题描述】:我使用kopsexportkubecfg$NAME为kubectl创建上下文,但是,... 查看详情

如何使用基本身份验证创建具有适当权限的用户以列出 kubernetes v1.13 中的命名空间

】如何使用基本身份验证创建具有适当权限的用户以列出kubernetesv1.13中的命名空间【英文标题】:Howtocreateanuserwhichhasappropriatepermissiontolistnamespacesinkubernetesv1.13usingBasicAuth【发布时间】:2019-07-1812:53:16【问题描述】:我正在开发一... 查看详情

无法在 Kubernetes 集群中执行 GitLab Runner:无法在命名空间“gitlab”中的 API 组“”中创建资源“秘密”

】无法在Kubernetes集群中执行GitLabRunner:无法在命名空间“gitlab”中的API组“”中创建资源“秘密”【英文标题】:NotabletoexecuteGitLabRunnerinKubernetescluster:cannotcreateresource"secrets"inAPIgroup""inthenamespace"gitlab"【发... 查看详情

进程间通信——管道(代码片段)

...度理解管道站在内核角度-管道本质管道读写规则命令行中的`|`管道中,进程间是兄弟关系管道特点命名管道创建一个命名管道匿名管道与命名管道的区别命名管道的打开规则用命名管道实现server&client通信进程间通... 查看详情

Kubernetes。命名空间隔离

】Kubernetes。命名空间隔离【英文标题】:Kubernetes.namespacesisolation【发布时间】:2017-09-2322:43:41【问题描述】:以前,为了限制我使用的命名空间之间的访问:net.alpha.kubernetes.io/network-isolation:"on"在1.6.1版本中不起作用。当前提议... 查看详情

kubernetes网络模型-flannel+calico

切换网络所有pod需要重建Kubernetes要求所有的网络插件实现必须满足如下要求:一个Pod一个IP所有的Pod可以与任何其他Pod直接通信,无需使用NAT映射所有节点可以与所有Pod直接通信,无需使用NAT映射Pod内部获取到的IP地址与其他Pod... 查看详情

Kubernetes根据命名空间设置部署副本数

】Kubernetes根据命名空间设置部署副本数【英文标题】:Kubernetessetdeplomentnumberofreplicasbasedonnamespace【发布时间】:2018-09-0813:22:32【问题描述】:我已将Kubernetes集群拆分为两个不同的命名空间;staging和production,目标是让生产部署... 查看详情

kubernetes学习总结(11)——kubernetespod到底是什么?(代码片段)

前言【译】WhatareKubernetesPodsAnyway?最近看到了一条关于KubernetesPods的推特,来自了不起的AmyCodes(我真的希望这是她的真名):虽然不是100%准确(容器并不是一个真正的东西。我们将在稍后讨论这个东东)不过它确实指出了一个... 查看详情

kubernetes学习总结(11)——kubernetespod到底是什么?(代码片段)

前言【译】WhatareKubernetesPodsAnyway?最近看到了一条关于KubernetesPods的推特,来自了不起的AmyCodes(我真的希望这是她的真名):虽然不是100%准确(容器并不是一个真正的东西。我们将在稍后讨论这个东东)不过它确实指出了一个... 查看详情

如何在 Kubernetes 中切换命名空间

】如何在Kubernetes中切换命名空间【英文标题】:Howtoswitchnamespaceinkubernetes【发布时间】:2019-08-1719:30:06【问题描述】:说,我有两个命名空间k8s-app1和k8s-app2我可以使用以下命令列出来自特定命名空间的所有podkubectlgetpods-n<namesp... 查看详情

进程间通信——命名管道

...径名是全局的,各进程都可以访问,因此可以用文件系统中的路径名来标识一个IPC通道。对文件系统来说,匿名管道(管道)是不可见的,它的作用仅限于在父进程和子进程两个进程间进行通信。而命 查看详情

命名空间的 kubernetes 集群信息

】命名空间的kubernetes集群信息【英文标题】:kubernetescluster-infoforanamespace【发布时间】:2018-08-0503:54:59【问题描述】:我将这两个服务部署到我的集群下命名空间prisma:kubectlgetservices-nprismaNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGEdatabaseClust... 查看详情