istio-system命名空间下AuthorizationPolicy的matchLabels不生效问题
问题原因与解决方法
istio-system 命名空间本身没有特殊规则排除 AuthorizationPolicy 执行,你遇到的问题是两个常见配置遗漏导致的:
- Sidecar 注入缺失
istio-system 命名空间默认不会开启自动 Sidecar 注入(只有官方 Istio 组件部署时会手动注入 Sidecar),你自行部署在 istio-system 下的kialitestDeployment 没有 Sidecar 容器,而 AuthorizationPolicy 的规则完全靠 Sidecar 代理执行,没有 Sidecar 的话所有授权规则都会被直接跳过。你迁移到的独立命名空间应该已经打上了istio-injection=enabled标签,Pod 创建时自动注入了 Sidecar,所以规则正常生效。
你可以执行以下命令验证是否注入了 Sidecar:
kubectl get pod <kialitest-pod-name> -n istio-system -o jsonpath='{.spec.containers[*].name}'
如果输出只有 kialitest 没有 istio-proxy,即可确认是未注入 Sidecar 导致的问题。
- 授权策略作用对象匹配问题
你当前的 AuthorizationPolicy 没有配置selector字段,默认会作用于所在命名空间下所有带 Sidecar 的 Pod。如果你是想在 Ingress 网关层面做访问控制,需要显式指定 selector 匹配 Ingress 网关的标签,示例:
spec: selector: matchLabels: istio: ingressgateway action: DENY rules: - {}
如果是想对后端服务做访问控制,给 Deployment 的 Pod 模板打上标签后,在 AuthorizationPolicy 的 selector 里匹配对应标签即可。
验证方法
给 istio-system 命名空间打注入标签后重建 Pod 即可验证:
kubectl label namespace istio-system istio-injection=enabled kubectl rollout restart deployment kialitest -n istio-system
待 Pod 重建完成确认 Sidecar 注入成功后,授权策略就会正常生效。
内容的提问来源于stack exchange,提问作者Hetr
相关产品推荐
相关产品推荐

