kubernetes 网络策略仅允许外部流量到达互联网

sup*_*set 7 kubernetes azure-aks

我尝试在我的 kubernetes 集群中实施网络策略,以将我的 Pod 隔离在命名空间中,但仍然允许它们访问互联网,因为我使用 Azure MFA 进行身份验证。

这是我尝试过的,但似乎无法让它发挥作用。入口按预期工作,但这些策略阻止所有出口。


apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all
spec:
  podSelector: {}
  policyTypes:
  - Ingress 
Run Code Online (Sandbox Code Playgroud)
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: grafana-policy
  namespace: default
spec:
  podSelector:
    matchLabels: 
      app: grafana
  ingress:
  - from:
    - podSelector:
       matchLabels: 
        app: nginx-ingress

Run Code Online (Sandbox Code Playgroud)

谁能告诉我如何使上述配置工作,以便我也允许互联网流量但阻止其他 POD 的流量?

小智 12

尝试在命名空间上添加默认拒绝所有网络策略:

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: default-deny-all
spec:
  podSelector: {}
  policyTypes:
    - Ingress
    - Egress
Run Code Online (Sandbox Code Playgroud)

然后添加允许互联网策略:

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: allow-internet-only
spec:
  podSelector: {}
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0
        except:
        - 10.0.0.0/8
        - 192.168.0.0/16
        - 172.16.0.0/20
Run Code Online (Sandbox Code Playgroud)

这将阻止除互联网出站之外的所有流量。在该allow-internet-only策略中,所有私有 IP 都有一个例外,这将阻止 Pod 到 Pod 的通信。

如果您需要 DNS 查找,您还必须允许从核心 DNS 的出口kube-system,因为该default-deny-all策略将阻止 DNS 查询。

  • 我相信“172.16.0.0/20”应该是“172.16.0.0/12”,根据https://en.wikipedia.org/wiki/Private_network#Private_IPv4_addresses (3认同)

wei*_*eld -1

你可以这样尝试吗?

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all
spec:
  podSelector: {}
  policyTypes:
  - Ingress,Egress
  egress:
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0
Run Code Online (Sandbox Code Playgroud)

它应该允许出口到所有目的地。但如果目的地是一个 Pod,它应该被相同 NetworkPolicy 缺少入口规则的阻止。