但是,当我应用策略时,我会看到重复出现的消息,即主机名无法解决。我已经在Myserver Pod上安装了DNSutils;并且可以看到DNS请求正在计时;而且我还尝试在同一吊舱上安装TCPDUMP;我可以看到从MyServer到Kube-DNS的请求。我没有看到任何回答回来。
如果我删除了网络上的DNS,则直接回来;因此,我敢肯定,我的网络上有问题,但找不到允许DNS流量的方法。如果有人能阐明我出错的地方,那将不胜感激!Sulose不需要标记目标名称空间的解决方案。有必要定义A
name
和
namespaceSelector
podSelector
将针对POD自己的名称空间。
namespaceSelector
Edit:更改了基于
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-dns-access
namespace: <your-namespacename>
spec:
podSelector:
matchLabels: {}
policyTypes:
- Egress
egress:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: kube-system
podSelector:
matchLabels:
k8s-app: kube-dns
ports:
- protocol: UDP
port: 53
标签的名称空间的命名空间空间。假设您启用了自动标签。https://kubernetes.io/docs/concepts/overview/_print/#automatic-labelling 如果您没有启用此功能,那么下一个最好的事情就是定义一个允许的 - 以及
kube-system
.。
避免重复创建一个单独的网络策略,以打开DNS流量。首先,我们标记
kubernetes.io/metadata.name
名称空间。然后允许DNS流量从所有POD到namespaceSelector
名称空间。
podSelector
我最近遇到了与op。要检查的东西是DNS POD确实使用端口53。您可以通过检查DNS上的K8S服务/端点来找到。在OpenShift案例中,该服务具有端口53,但指向容器端口5353。在我将端口从53更改为NetworkPolicy中的端口后,DNS流量不再被阻止。