【问题标题】:How can I restrict a pod to contact other pods directly but allowing access via service如何限制一个 pod 直接联系其他 pod 但允许通过服务访问
【发布时间】:2020-08-15 06:18:17
【问题描述】:
  1. 假设,我有 3 个 nginx pod 监听端口 80。
  2. 比方说,我曾经服务nginx-svc 类型为ClusterIP,侦听端口8080 并通过端口80 将请求转发到上面的nginx pod。
  3. 假设,我有另一个 pod busybox

如何配置network-policy 以允许busybox pod 只能通过服务 nginx-svc 访问 nginx pod,但不能直接访问?

【问题讨论】:

  • 你不能。你不应该这样做。
  • docs 中所述,网络策略仅在 pod 级别运行:“网络策略是关于如何允许 pod 组相互通信以及与其他网络端点通信的规范。”,所以我想答案是你不能。这是一个很奇怪的要求,你有什么特别的理由要这样做吗?
  • 同意。没有实际用例。只是认为由于可以限制 pod 访问并且 pod 可以通过服务进行交互,并且使用 network-policy 它就像使用选择器来控制访问一样简单,因此假设可能也有一种通过服务进行限制的方法,但在文档中没有提到.感谢您的双重确认。

标签: kubernetes


【解决方案1】:

您无法按照您介绍的方式实现它,但您可以使用NetworkPolicyrestrict access to the pod for specific service and labels

例如,如果您有标签为 app: nginx 的部署(您可以使用 kubectl create deployment nginx --image=nginx 创建它)并且您公开它,通过使用 kubectl expose deployment nginx --port=80 您可以创建以下 NetworkPolicy:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: access-nginx
spec:
  podSelector:
    matchLabels:
      app: nginx
  ingress:
  - from:
    - podSelector:
        matchLabels: #mutable fields
          access: "true"

它将限制对只有标签 app=nginxaccess="true" 的 pod 的访问。

应用此网络策略后,您可以创建带有标签access="true" 的busybox pod,它将能够与这些pod 通信。

【讨论】:

    猜你喜欢
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 2019-07-01
    • 2019-04-23
    • 1970-01-01
    • 2021-03-06
    • 2020-02-04
    相关资源
    最近更新 更多