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

时间:2019-05-13 16:34:37

标签: kubernetes google-kubernetes-engine kubernetes-ingress kubernetes-service

我有两个命名空间:proddefault。 我想禁止访问这些命名空间中的资源(来自default的资源无法访问来自prod的资源,来自prod的资源无法访问来自{ {1}}) 但允许有机会访问这些资源以进行外部访问(进入)。

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

Pod可以访问给定名称空间内的其他Pod。 来自prod的Pod无法访问default内部的Pod。

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

2 个答案:

答案 0 :(得分:1)

问题出在网络策略中。

---
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-用于选择IN CURRENT名称空间中的Pod namespaceSelector-用于选择名称空间 namespaceSelector.podSelector-用于在给定名称空间内选择容器

和我的问题:

ipBlock-用于选择外部IP地址

它不适用于内部IP,因此对于我来说0.0.0.0/0可以。 except不会禁止内部流量。

答案 1 :(得分:0)

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

部署另一个名为入口的命名空间

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

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