微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有命名空间的 Kubernetes Egress 调用限制

如何解决带有命名空间的 Kubernetes Egress 调用限制

我有应用程序在 K3s 中运行,并且只想实现基于命名空间的网络策略。

让我们假设目前我有三个命名空间 A、B 和 C。我想允许 namespace-A 和剩余的 namespace[B & C] 出口调用的出口(从 pod 到互联网的外部调用)应该被阻止/拒绝。

这在 Kubernetes 网络策略(而不是 calico 或 cilium)中是否可行?

解决方法

您可以定义 the documentation 中所述的 deny all egress 政策:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-egress
  namespce: your-namespace
spec:
  podSelector: {}
  policyTypes:
  - Egress

此策略将应用于命名空间中的所有 Pod,因为 Pod 选择器为空,这意味着(引用 documentation):

空的 podSelector 选择命名空间中的所有 pod。

该策略将阻止所有出口流量,因为它具有 Egress 作为策略类型,但它没有任何 egress 部分。

如果您想允许集群内出口,您可能需要在策略中添加一个 egress 部分,例如:

  egress:
  - to:
    - namespaceSelector:
        matchLabels:
          networking/namespace: kube-system
      podSelector:
        matchLabels:
          k8s-app: kube-dns
    ports:
    - protocol: TCP
      port: 53
    - protocol: UDP
      port: 53

这允许所有流量从您创建网络策略的命名空间到端口 53(TCP 和 UDP)上命名空间 k8s-app: kube-dns 中标有 kube-system 的 Pod。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。