简介
组件介绍
Network Policy 是 Kubernetes 提供的一种资源,用于定义基于 Pod 的网络隔离策略。它描述了一组 Pod 是否可以与其他组 Pod,以及其他 Network Entities 进行通信。本组件提供了针对该资源的 Controller 实现。如果您希望在 IP 地址或端口层面(OSI 第3层或第4层)控制特定应用的网络流量,则可考虑使用本组件。
部署在集群内的 Kubernetes 对象
Kubernetes 对象名称 | 类型 | 请求资源 | 所属 Namespace |
networkpolicy | DaemonSet | 每个实例CPU:250m,Memory:250Mi | kube-system |
networkpolicy | ClusterRole | - | kube-system |
networkpolicy | ClusterRoleBinding | - | kube-system |
networkpolicy | ServiceAccount | - | kube-system |
组件权限说明
权限说明
该组件权限是当前功能实现的最小权限依赖。
需要获取集群内的 namespaces、pods、services、nodes、endpoints 和 networkpolicies,所以需要 list/get/watch 权限。
权限定义
kind: ClusterRoleapiVersion: rbac.authorization.k8s.io/v1metadata:name: networkpolicyrules:- apiGroups:- ""resources:- namespaces- pods- services- nodes- endpointsverbs:- list- get- watch- apiGroups:- "networking.k8s.io"resources:- networkpoliciesverbs:- list- get- watch- apiGroups:- extensionsresources:- networkpoliciesverbs:- get- list- watch
操作步骤
1. 登录 容器服务控制台,在左侧导航栏中选择集群。
2. 在集群列表中,单击目标集群 ID,进入集群详情页。
3. 选择左侧菜单栏中的组件管理,在组件管理页面单击新建。
4. 在新建组件管理页面中勾选 NetworkPolicy。NetworkPolicy 详细配置可参见 Network Policy 最佳实践。
5. 单击完成即可创建组件。
注意事项
与 NodeLocalDNSCache 组件的 iptables 版本兼容性问题
如果集群中同时安装了 Network Policy 和 NodeLocalDNSCache 组件,使用的 iptables 版本与 Network Policy 中的 iptables 版本可能会有兼容性问题,导致 iptables 规则被反复添加,大量 iptables 会导致网络转发变慢,时延变高,直到完全无法运行。
具体根因是 Network Policy 和 NodeLocalDNSCache 组件的 iptables 在使用 nft 后端时,Network Policy 中使用的 iptables 版本是 v1.8.7,而 NodeLocalDNSCache 中使用的 iptables 版本可能为 v1.8.9 (NodeLocalDNSCache 版本小于 1.0.2 时),而 iptables v1.8.8 在参数解析方面有一些不兼容的变化,导致两者共存时存在兼容性问题。
具体变化参考如下 commit:
[1] https://git.netfilter.org/iptables/commit/?h=v1.8.8&id=250dce876d924b9467ffa035af445912e86ea93b
[2] https://git.netfilter.org/iptables/commit/?h=v1.8.8&id=5795a1b5b611fbf7a64be34b2675f88e8f9bbaef
[3] https://git.netfilter.org/iptables/commit/?h=v1.8.8&id=5489493e6590b35765f676d6638c696bfe00c4b4
[4] https://git.netfilter.org/iptables/commit/?h=v1.8.8&id=94309632a13000e06ed02e08f0bcbed94080abb3
如果已经安装了 NodeLocalDNSCache 组件 1.0.2 以下版本(注意这里是组件版本而不是社区版 node-local-dns 的版本),需卸载后重新安装确保组件版本在 1.0.2 之上(NodeLocalDNSCache 组件暂不支持直接升级)。如果是自行安装的社区版 node-local-dns,需确保安装 1.22.24 以下的版本。