0

我无法设置对我来说很好的网络策略。这是同一命名空间中的 2 个 pod

k get po --show-labels
NAME                         READY   STATUS    RESTARTS   AGE   LABELS
nfs-server-ccb8d5ff6-7rtr4   1/1     Running   0          22h   role=nfs-server
nginx-jpm-549b69bf68-x5hd7   1/1     Running   0          21h   app=nginx-jpm

我正在使用以下网络策略规范限制到 nfs-server pod 的流量:

spec:
  podSelector:
    matchLabels:
      role: nfs-server
  policyTypes:
  - Ingress
  - Egress
  ingress:
  # Allow inbound from nginx-jpm on all ports
  - from:
    - podSelector:
        matchLabels:
          app: nginx-jpm
  egress:
  # Allow outbound DNS traffic inside the cluster (kube-system namespace is not labelled)
  - to:
    - namespaceSelector: {}
    ports:
    - protocol: "UDP"
      port: 53

我执行到 nginx pod 并且无法连接到 nfs-server pod

root@nginx-jpm-549b69bf68-x5hd7:/# telnet nfs-server.jenkinsrepo.svc.cluster.local 111
Trying 172.22.117.55...
If I delete the network policy, it works then
root@nginx-jpm-549b69bf68-x5hd7:/# telnet nfs-server.jenkinsrepo.svc.cluster.local 111
Trying 172.22.117.55...
Connected to nfs-server.jenkinsrepo.svc.cluster.local.
Escape character is '^]'.

我的网络策略中是否遗漏了什么?命名空间中没有其他网络策略。

4

2 回答 2

1

由于您podSelector选择了带有role: nfs-server标签的 pod,因此出口规则仅适用于那些 pod,因此出口被 nginx pod 阻止。您可能应该为仅适用于所有 pod 的集群 DNS 的出口创建单独的网络策略。

于 2020-07-09T18:50:03.157 回答
0

您的出口规则被翻译为将这些规则应用于命名空间未标记为“AND”端口 53 UDP 的规则流量,它的“AND”规则。即使 DNS 出口流量可能正常工作,来自所有 pod 的所有其他出口流量仍然被阻止,这可能是原因。

如果您尝试以下操作,它将允许传出流量:(目标 pod 具有未标记的命名空间)或((端口为 53 UDP)或(端口为 53 TCP))

egress:
   - to:
     - namespaceSelector: {}
   - ports:                  # 2nd egress rule
     - port: 53                # allow DNS UDP
       protocol: UDP
     - port: 53                # allow DNS TCP
       protocol: TCP

    

链接:https ://docs.projectcalico.org/security/tutorials/kubernetes-policy-advanced

于 2020-08-03T16:42:13.133 回答