提问者:小点点

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


我有两个命名空间: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中的pod可以访问给定命名空间中的其他pod。default中的pod无权访问prod中的pod。

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


共2个答案

匿名用户

问题部分在于网络政策。

---
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-用于选择podINCURRENT命名空间namespaceSelector-用于选择命名空间namespaceSelector. podSelector-用于选择给定命名空间内的pod

而我的问题:

ipBlock-用于选择EXTERNALIP地址

它不适用于内部IP,所以在我的例子中,0.0.0.0/0是可以的。除了不会禁止内部流量。

匿名用户

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

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

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

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