k8s 网络策略阻止 DNS

k8s network policy blocks DNS

我正在尝试使用网络策略为我的 pods 启用 DNS。 我正在使用 https://kubernetes.io/docs/tasks/administer-cluster/dns-debugging-resolution/

当 DNS 工作时:

nslookup kubernetes.default
Server:         100.64.0.10
Address:        100.64.0.10#53

Name:   kubernetes.default.svc.cluster.local
Address: 100.64.0.1

使用网络策略

/ # nslookup kubernetes.default
;; connection timed out; no servers could be reached

我试过

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: my_name
  namespace: my_namespace
spec:
  podSelector:
    matchLabels: {}
  policyTypes:
  - Egress
  egress:
  - to:
    - namespaceSelector:
        matchLabels:
          name: kube-system
    ports:
    - protocol: UDP
      port: 53
    - protocol: TCP
      port: 53

egress:
  - to:
    - namespaceSelector:{}
      podSelector: {}
    ports:
    - protocol: UDP
      port: 53
    - protocol: TCP
      port: 53

egress:
  - ports:
    - protocol: UDP
      port: 53
    - protocol: TCP
      port: 53

None 其中有效。以下是我尝试过的唯一有效的方法:

egress:
  - to:
    - namespaceSelector:{}
      podSelector: {}

但它打开了所有出口。

我在本地 k8s(带有 cilium 的 minikube)中尝试了这些组合。它们都按预期工作,但不是在生产环境中(AWS k8s 1.20 with calico )。我总是有 DNS 问题。从 tcpdump,我确定 DNS 正在使用带有 UDP 的端口 53。

我运行没思路了,请大家帮忙~

端口被dns服务改写为8053。 tcpdump 在 pod 中 运行,所以它不知道它被重新路由了。

我遇到了同样的问题,添加以下内容效果很好:

  egress:
    - ports:
        - port: 53
        - protocol: UDP