首页 > 解决方案 > Kubernetes 网络策略停止到 Pod 的所有流量

问题描述

设想:

  1. 我有四 (4) 个 Pod、工资单、内部、外部、mysql。
  2. 我希望内部 pod 只能访问:
    • 一个。内部 > 8080 端口上的工资单
    • 湾。内部 > mysql 在端口 3306

请建议缺少什么部分?我制定了以下网络策略。但我的吊舱无法与“任何”吊舱通信。因此它已经实现了给定的目标,但实际上无法访问其他 pod。以下是我的网络策略详细信息。

master $ k describe netpol/internal-policy
Name:         internal-policy
Namespace:    default
Created on:   2020-02-20 02:15:06 +0000 UTC
Labels:       <none>
Annotations:  <none>
Spec:
  PodSelector:     name=internal
  Allowing ingress traffic:
    <none> (Selected pods are isolated for ingress connectivity)
  Allowing egress traffic:
    To Port: 8080/TCP
    To:
      PodSelector: name=payroll
    ----------
    To Port: 3306/TCP
    To:
      PodSelector: name=mysql
  Policy Types: Egress

政策 YAML

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: internal-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      name: internal
  policyTypes:
  - Egress
  egress:
  - to:
    - podSelector:
        matchLabels:
          name: payroll
    ports:
      - protocol: TCP
        port: 8080
  - to:
    - podSelector:
        matchLabels:
          name: mysql
    ports:
      - protocol: TCP
        port: 3306 (edited) 

标签: networkingkubernetespolicy

解决方案


因此它已经实现了给定的目标,但实际上无法访问其他 pod。

如果我对您的理解正确,您实现了网络政策中定义的目标,并且您的所有Pods佩戴标签name: internal目前都能够与payroll(on port 8080) 和mysql(on port 3306)进行通信Pods,对吗?

如果我错了,请纠正我,但我在你的陈述中看到了一些矛盾。一方面,您希望您internal Pods只能与非常特定的一组通信Pods并使用指定的端口与它们连接:

我希望内部 pod 只能访问:

一个。内部 > 8080 端口上的工资单

湾。内部 > mysql 在端口 3306

另一方面,您似乎对他们无法访问任何其他内容感到惊讶Pods

因此它已经实现了给定的目标,但实际上无法访问其他 pod。

请记住,当您NetworkPolicy在特定集合上应用某些规则时Pods,同时默认拒绝所有规则会隐式应用到 selected 上Pods(除非您决定重新配置默认策略以使其按您想要的方式工作)。

你可以在这里阅读:

Pod 通过选择它们的 NetworkPolicy 变得孤立。一旦命名空间中有任何 NetworkPolicy 选择特定 pod,该 pod 将拒绝任何 NetworkPolicy 不允许的任何连接。(命名空间中未被任何 NetworkPolicy 选择的其他 pod 将继续接受所有流量。)

以上也适用于egress规则。

如果当前您internal Pods只能访问指定的payroll,则一切正常。mysql Podports

如果您有兴趣拒绝与您的payrolland的所有其他流量,您应该对这些流量mysql Pods应用ingress规则,Pods而不是定义应该与它们通信的流量,但同时不应剥夺它们与其他流量通信的能力。egressPodsPods

请让我知道它是否有帮助。如果有什么不清楚或我的假设是错误的,也请告诉我,不要犹豫,提出其他问题。


推荐阅读