【问题标题】:How to restrict access to some Kubernetes namespace allowing access only by some pods?如何限制对某些 Kubernetes 命名空间的访问,只允许某些 pod 访问?
【发布时间】: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 默认命名空间还可能包含其他部署:quxbaz 等。

我想限制对服务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


【解决方案1】:

对于这种情况,您可以使用网络策略来限制对 foo

的访问
kind: NetworkPolicy

apiVersion: networking.k8s.io/v1

metadata:

  name: access-nginx

spec:

  podSelector:

    matchLabels:

      app: foo

  ingress:

  - from:

    - podSelector:

        matchLabels:

          app: bar

【讨论】:

  • 不知道有这个功能!太感谢了!我会玩这个并回复。
  • 非常感谢。我在问题的底部发布了一个解决方案。
猜你喜欢
  • 2016-07-07
  • 2021-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-02
  • 1970-01-01
相关资源
最近更新 更多