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
我正在尝试使用网络策略为我的 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