Networking Kubernetes网络策略停止所有到Pod的流量

Networking Kubernetes网络策略停止所有到Pod的流量,networking,kubernetes,Networking,Kubernetes,情景: 我有四(4)个pod,Payroll,internal,external,mysql 我希望内部pod只能访问: a。内部>端口8080上的工资单 b。端口3306上的内部>mysql 请提出缺少的部分是什么?我制定了以下网络策略。但我的吊舱无法与“任何”吊舱通信。 因此,它实现了给定的目标,但实际上无法访问其他吊舱。以下是我的网络策略详细信息 master $ k describe netpol/internal-policy Name: internal-poli

情景:

  • 我有四(4)个pod,Payroll,internal,external,mysql
  • 我希望内部pod只能访问:
    • a。内部>端口8080上的工资单
    • b。端口3306上的内部>mysql
  • 请提出缺少的部分是什么?我制定了以下网络策略。但我的吊舱无法与“任何”吊舱通信。 因此,它实现了给定的目标,但实际上无法访问其他吊舱。以下是我的网络策略详细信息

    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
    
    因此,它实现了既定目标,但实际上无法实现 访问其他播客

    如果我理解正确,您已经实现了网络策略中定义的目标,并且您所有的
    pod
    佩戴标签
    name:internal
    目前都能够与
    payroll
    (在端口
    8080
    )和
    mysql
    (在端口
    3306
    pod进行通信,对吧?

    如果我错了,请纠正我,但我发现你的说法有些矛盾。一方面,您希望您的
    内部
    吊舱
    只能与非常特定的
    吊舱进行通信,并使用指定的端口与它们连接:

    我希望内部pod只能访问:

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

    b。端口3306上的内部>mysql

    另一方面,你似乎对他们无法访问任何其他
    播客感到惊讶:

    因此,它实现了既定目标,但实际上无法实现 访问其他播客

    请记住,当您将一些
    网络策略
    规则应用于特定的
    吊舱
    时,同时dafault拒绝所有规则会隐式应用于选定的
    吊舱
    (除非您决定重新配置以使其按您想要的方式工作)

    正如你所看到的:

    POD通过具有选择它们的网络策略而变得孤立。一旦 名称空间中存在选择特定pod的任何NetworkPolicy, 该pod将拒绝任何用户不允许的任何连接 网络政策。(命名空间中未被选定的其他POD) 任何网络策略都将继续接受所有流量。)

    上述规定也适用于出口规则

    如果当前您的
    internal
    Pod
    只能访问指定
    端口上的
    payroll
    mysql
    Pod
    ,则一切正常

    如果您有兴趣拒绝向您的
    工资单
    mysql
    豆荚
    提供所有其他流量,您应该对那些
    豆荚
    应用
    入口
    规则,而不是在
    豆荚
    上定义与它们通信的
    出口
    ,但与此同时,不应剥夺他们与其他
    播客
    交流的能力


    如果有帮助,请告诉我。如果有不清楚的地方或我的假设是错误的,也请让我知道,并毫不犹豫地询问其他问题。

    mysql和payroll上的标签是否正确?负责实施您的网络策略的CNI如何?您正在使用什么解决方案?是的,吊舱的标签正确。是的,某些网络策略插件已经就位,这就是为什么创建此策略后,播客无法通信的原因。我访问KodeCloud.com中的虚拟K8s群集(通过katakoda访问)
    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)