网络策略(Network Policy)是用于控制分组的 Pod 资源彼此之间如何进行通信,以及分组的 Pod 资源如何与其他网络端点进行通信的规范。它用于为 Kubernetes 实现更为精细的流量控制,实现租户隔离机制。
Kubernetes 使用标准的资源对象 "NetworkPolicy" 供管理员按需定义网络访问控制策略。
一、网络策略概述
Kubernetes 的网络策略功能由其所使用的网络插件实现,因此,仅在使用那些支持网络策略功能的网络插件时才能够配置网络策略,如 Calico、Canal 及 kube-router 等。每种解决方案各有其特定的网络策略实现方式,它们的实现或依赖于节点自身的功能,或借助于 Hypervisor 的特性,也可能是网络自身的功能。Calico 的 calico/kube-controller 即为 Calico 项目中用于将用户定义的网络策略予以实现组件,它主要依赖于节点的 iptables 来实现访问控制功能。
策略控制器用于监控创建 Pod 时所生成的新 API 端点,并按需为其附加网络策略。当发生需要配置策略的事件时,侦听器会监视到变化,控制器随即响应以进行接口配置和策略应用。
Pod 的网络流量包含 "流入"(Ingress) 和 "流出"(Egress)两种方法,每种方向的控制策略则包含 "允许" 和 "禁止" 两种。
默认情况下,Pod 处于非隔离状态,它们的流量可以自由来去。一旦有策略通过选择器规则则将策略应用于 Pod,那么所有未经明确允许的流量都将被网络策略拒绝,不过,其他未被选择器匹配的 Pod 不受影响。
二、部署 Canal 提供网络策略
Canal 代表了针对云原生应用程序的最佳策略网络解决方案,旨在让用户轻松地将 Calico 和 flannel 网络部署在一起作为统一的网络解决方案,将 Calico 的网络策略执行与 Calico 和 flannel 叠加以及非叠加网络连接选项的丰富功能相组合。
换句话说,Calico 项目既能够独立地为 Kubernetes 集群提供网络解决方案和网络策略,也能与 flannel 结合一起,由 flannel 提供网络解决方案,而 Calico 此时仅用于提供网络策略,这时我们也可以将 Calico 称为 Canal。Calico 将数据存储于 etcd 中,它支持选择使用专用的 etcd 存储,也能够以 Kubernetes API Server 作为后端存储,这里选择以第二种方式进行。
结合 flannel 工作时,Calico 提供的默认配置清单中是以 flannel 默认使用的 10.244.0.0/16 作为 Pod 网络,因此,请确保 kube-controller-manager 程序在启动时通过 --cluster-cidr 选项设置使用了此网络地址,并且 --allocate-node-cidrs 的值应设置为 true。
1 2 |
|
部署前,要在启用了 RBAC 的 Kubernetes 集群中设置必要的相关资源:
1 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
|
接下来即可部署 Canal 提供网络策略:
1 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 |