如何在Kubernetes中用Network Policy仅允许特定命名空间访问Pod
解决特定命名空间Pod访问控制的NetworkPolicy配置问题
你的配置无效是因为NetworkPolicy的spec字段下没有顶层的namespaceSelector属性,正确的做法是在ingress.from中配置来源命名空间的选择器,同时通过podSelector指定当前命名空间内需要被保护的Pod。
错误配置的问题点
你在spec下直接写了namespaceSelector,这不属于NetworkPolicy的合法顶层字段,Kubernetes会忽略这个配置,导致策略不生效。
正确的配置示例
如果你想允许cka-exam命名空间的所有Pod访问special-ns命名空间的所有Pod,配置应该是这样:
kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: allow-from-cka-exam-ns namespace: special-ns # 策略作用在被访问的目标命名空间 spec: podSelector: {} # 选择special-ns内所有Pod,若要保护特定Pod,替换为对应的matchLabels policyTypes: - Ingress ingress: - from: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: cka-exam # 匹配来源命名空间
补充说明
标签匹配注意事项:
kubernetes.io/metadata.name是Kubernetes 1.24及以上版本自动为命名空间添加的标签,如果你的集群版本低于1.24,需要手动给cka-exam命名空间打标签:kubectl label namespace cka-exam ns-identity=cka-exam然后把NetworkPolicy里的
namespaceSelector改成:namespaceSelector: matchLabels: ns-identity: cka-exam限制目标Pod:如果不需要保护
special-ns里的所有Pod,只想让特定Pod被访问,修改podSelector为目标Pod的标签,比如:podSelector: matchLabels: app: backend-service策略类型声明:显式指定
policyTypes: [Ingress]可以确保策略只处理入站流量,避免歧义。
内容的提问来源于stack exchange,提问作者DimiDak
相关产品推荐
相关产品推荐

