首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >k8s出口网络策略不适用于dns

k8s出口网络策略不适用于dns
EN

Stack Overflow用户
提问于 2021-01-09 06:31:45
回答 2查看 427关注 0票数 5

我已经添加了此NetworkPolicy来阻止所有出口,但允许DNS。

代码语言:javascript
复制
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all-egress
  namespace: {{ $namespace }}
spec:
  podSelector: {}
  egress:
  - to:
    - namespaceSelector:
        matchLabels:
          networking/namespace: kube-system
      podSelector:
        matchLabels:
          k8s-app: kube-dns
    ports:
    - protocol: TCP
      port: 53
    - protocol: UDP
      port: 53
  policyTypes:
  - Egress

但是,我在应用此规则的服务中收到此错误:Could not lookup srv records on _origintunneld._tcp.argotunnel.com: lookup _origintunneld._tcp.argotunnel.com on 10.2.0.10:53: read udp 10.32.1.179:40784->10.2.0.10:53: i/o timeout

此IP (10.2.0.10)属于kube-dns服务,该服务有一个pod,标签为k8s-app=kube-dns,位于kube-system命名空间中,标签为networking/namespace=kube-system

如果我删除pod选择器和名称空间选择器,则出口策略有效,并且不会收到错误

这是有效的,但并不安全,因为它不限于kube-dns pod:

代码语言:javascript
复制
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all-egress
  namespace: {{ $namespace }}
spec:
  podSelector: {}
  egress:
  - to:
    ports:
    - protocol: TCP
      port: 53
    - protocol: UDP
      port: 53
  policyTypes:
  - Egress

kube-系统命名空间yaml:kubectl get namespace kube-system -o yaml

代码语言:javascript
复制
apiVersion: v1
kind: Namespace
metadata:
  creationTimestamp: "2020-07-30T22:08:25Z"
  labels:
    networking/namespace: kube-system
  name: kube-system
  resourceVersion: "4084751"
  selfLink: /api/v1/namespaces/kube-system
  uid: b93e68b0-7899-4f39-a3b8-e0e12e4008ee
spec:
  finalizers:
  - kubernetes
status:
  phase: Active
EN

回答 2

Stack Overflow用户

发布于 2021-01-15 21:55:26

当前策略不明确允许流量到Kubernetes DNS。因此,除非其他规则允许,否则将丢弃来自{{ $namespace }}中pods的DNS查询。

创建k8s DNS的允许出口规则应该可以解决您的问题。

代码语言:javascript
复制
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all-egress
  namespace: {{ $namespace }}
spec:
  podSelector: {}
  policyTypes:
    - Egress
  egress:
    - to:
        - namespaceSelector:
            matchLabels:
              networking/namespace: kube-system
          podSelector:
            matchLabels:
              k8s-app: kube-dns
      ports:
        - port: 53
          protocol: TCP
        - port: 53
          protocol: UDP
    - to:
        - namespaceSelector: {}
          podSelector:
            matchLabels:
              k8s-app: kube-dns
      ports:
        - port: 53
          protocol: UDP
票数 0
EN

Stack Overflow用户

发布于 2021-02-09 23:27:42

我也遇到过同样的问题。对我来说,这是因为我的集群上启用了NodeLocal DNSCache。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65637283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档