我们将一项服务部署到现有的 AKS 集群,该服务需要尽可能地隔离,以便它无法访问集群中的其他服务或资源。
我创建了一个新的 kubernetes 命名空间并在其中部署了服务。接下来,我想锁定此命名空间中的网络,以便可以通过 HTTPS 从外部世界访问该服务,但无法访问在同一 AKS 群集中运行的其他服务(但在不同的命名空间中)。
为此,我部署了网络策略,拒绝所有出口:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny
namespace: namespace-where-service-is-deployed
spec:
podSelector: {}
policyTypes:
- Egress
基于:https://projectcalico.docs.tigera.io/security/kubernetes-network-policy
这有效,但它完全阻止了所有出口。我需要该服务能够访问在 AKS 群集之外运行的数据库 (CosmosDB)。此外,我希望通过 Application Insights 进行日志传输。
有没有办法隔离服务,而不必找出 CosmosDB 和 App Insights 的所有 IP 地址并明确允许它们?
我们正在 Kubernetes 版本 1.23.8 上运行,并使用网络插件“kubenet”和网络策略“calico”。
非常感谢!
答案1
我最终能够通过基于以下方法将入口限制到部署了我的其他工作负载的命名空间(不应从服务中访问以进行隔离)来实现隔离: 如何隔离 kubernetes 命名空间但允许从外部访问
但由于我的情况中的“外部”是入口控制器,因此我将标签应用于部署入口控制器的命名空间,而不是 kube-system。