我有两个名称空间: prod
和 default
。我想禁用这些命名空间中资源的访问(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
的豆荚可以访问给定名称空间内的其他吊舱。default
的PODS无法访问prod
中的POD。
当我尝试从浏览器中访问服务时,它已被阻止。当我尝试将端口转向使用到prod
中的服务时 -
问题来自网络策略的一部分。
---
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
-用于在当前名称空间中选择POD namespaceSelector
-选择名称空间 namespaceSelector.podSelector
-用于在给定的名称空间内选择吊舱
和我的问题:
ipBlock
-用于选择外部IP地址
它对内部IP不起作用,因此在我的情况下,0.0.0.0/0
可以。 except
不会禁止内部流量。
定义默认拒绝网络策略以拒绝所有入口流量。
部署另一个名为Ingress
的名称空间在入口名称空间中部署入口控制器
然后定义网络策略,以允许从入口名称空间访问prod,并允许从INGRES到默认值的访问权限。您应该能够通过Ingress Controller