首页 > 解决方案 > 限制对服务的访问仅限于某些 pod

问题描述

我有一个在 pod 上运行的 mosquitto 代理,该服务器作为 DNS 和 IP 地址作为服务公开。

但是集群中的任何 pod 都可以访问此服务。

我想限制对此服务的访问,以便尝试连接到此 DNS 或 IP 地址的 pod 只有在 pod 具有特定名称/元数据的情况下才能进行。

我猜一种解决方案是使用命名空间?还有什么其他解决方案?

标签: kuberneteskubernetes-ingresskubernetes-podkube-proxy

解决方案


您描述的 UseCase 正是NetworkPolicies的用途。

基本上,您为应该限制网络流量的 pod 定义选择器(即您的蚊子代理)以及为了被允许访问它而需要具有的特定 pod。例如标签"broker-access: true"或任何似乎适合您的东西。

示例网络策略可能如下所示:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: broker-policy
  namespace: default  
spec:
  podSelector:
    matchLabels:
      role: message-broker
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          broker-access: true
    ports:
    - protocol: TCP
      port: 6379

此网络策略将应用于每个带有 label 的 pod role=message-broker。它将限制所有传入流量,但来自broker-acces=true端口 6379 上带有标签的 Pod 的流量除外。

希望这会有所帮助,并为您的 NetworkPolicy 提供一些帮助


推荐阅读