阻止命名空间之间的访问,但允许访问外部流量

Block access between namespaces but allow access for external traffic

我有两个命名空间:proddefault。 我想禁用对这些命名空间内资源的访问(来自 default NS 的资源无法访问来自 prod 的资源,来自 prod 的资源无法访问来自 default) 但允许有机会访问这些资源以进行外部流量(入口)。

# namespaces.yaml

---
kind: Namespace
apiVersion: v1
metadata:
  name: prod
  labels:
    tier: prod

---
kind: Namespace
apiVersion: v1
metadata:
  name: default
  labels:
    tier: infra
# network-policies.yaml

---
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: network
  namespace: prod
spec:
  podSelector: {}
  ingress:
    - from:
      - podSelector: {}
---
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: network
  namespace: default
spec:
  podSelector: {}
  ingress:
    - from:
      - namespaceSelector:
          matchLabels:
            tier: dev
      - namespaceSelector:
          matchLabels:
            tier: rc
# services.yaml

---
apiVersion: v1
kind: Service
metadata:
  name: {{ include "conference.appService" . }}
  labels:
    app: {{ include "conference.name" . }}
    release: {{ .Release.Name }}
spec:
  type: NodePort
  ports:
    - name: http
      port: 80
      targetPort: http
      protocol: TCP
  selector:
    app: {{ include "conference.name" . }}
    release: {{ .Release.Name }}
    role: app

来自 prod

Pods 可以访问给定命名空间内的另一个 pods。 来自 default 的 Pods 无法访问 prod 中的 pods。

当我尝试从浏览器访问该服务时,它被阻止了。 当我尝试使用端口转发到 prod 内的服务时 - 一切正常。

定义默认拒绝网络策略以拒绝所有入口类型的流量。

部署另一个名为 ingress 的命名空间

在入口命名空间中部署入口控制器

然后定义网络策略以允许从 ingress 命名空间访问 prod,另一个允许从 ingres 访问 default。您应该能够通过入口控制器从外部访问产品和默认值

问题出在网络策略的一部分。

---
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: network
  namespace: default
spec:
  podSelector: {}
  ingress:
    - from:
      - ipBlock:
          cidr: 0.0.0.0/0
      - podSelector: {}
      - namespaceSelector:
          matchLabels:
            tier: dev
      - namespaceSelector:
          matchLabels:
            tier: rc
  egress:
    - {}

这个选择器的主要思想吧: podSelector - 用于选择 pods IN CURRENT 命名空间 namespaceSelector - 用于选择命名空间 namespaceSelector.podSelector - 用于在给定命名空间

中选择 pods

我的问题:

ipBlock - 用于选择外部 IP 地址

它不适用于内部 IP,所以在我的情况下 0.0.0.0/0 就可以了。 except 不会禁止内部流量。