【发布时间】:2019-03-21 20:57:18
【问题描述】:
我有以下服务:
apiVersion: v1
kind: Service
metadata:
name: foo
labels:
app: foo
spec:
type: ClusterIP
ports:
- port: 80
targetPort: 8080
protocol: TCP
name: foo
selector:
app: foo
此服务指向以下部署:
apiVersion: apps/v1
kind: Deployment
metadata:
name: foo
labels:
app: foo
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: foo
template:
metadata:
labels:
app: foo
spec:
containers:
- name: foo
image: gcr.io/foo:1.0.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
我还有另一个部署:
apiVersion: apps/v1
kind: Deployment
metadata:
name: bar
labels:
app: bar
spec:
selector:
matchLabels:
app: bar
template:
metadata:
labels:
app: bar
spec:
containers:
- name: bar
image: gcr.io/bar:1.0.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
foo 部署到名为 kube-protected 的 Kubernetes 命名空间,bar 部署到默认的 Kubernetes 命名空间。
foo 包含导入数据,应妥善保护。
Kubernetes 默认命名空间还可能包含其他部署:qux、baz 等。
我想限制对服务foo 的访问,因此只有bar 可以访问它。或者另一种方法是限制对 kube-protected 命名空间的访问,因此只有 bar 可以进入。
解决方案
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: namespace-which-you-want-to-protect-network-policy
namespace: namespace-which-you-want-to-protect
spec:
ingress:
- from:
- namespaceSelector:
matchLabels:
name: namespace-which-is-only-allowed-to-access-protected-namespace
podSelector:
matchLabels:
app: application-which-is-only-allowed-to-access-protected-namespace
podSelector: {}
【问题讨论】:
-
当您从另一个命名空间引用资源时,您需要提及命名空间,否则资源将不可见。所以不确定这是否有帮助,但也请看看这个link。
-
@cookiedough 谢谢你的回复。我认为 RBAC 更多的是控制团队中的访问,但我的问题是关于 pod 的通信。在我的问题底部查看我的解决方案。
标签: kubernetes