当我们逐渐向着微服务、云原生迈进的时候,传统静态的、相对简单的网络安全策略开始显得吃力。 Kubernetes 的 Network Policy 特性正是来解决这个问题的。在刚刚出炉不久的/R97OVqc
为了简单起见,我们会直接使用 default namespace。如果你在一个现有的环境里面, 可以将以下的命令在一个独立的 namespace 里面运行。
现在我们还没有做任何的限制,所以 Kubernetes 缺省情况是所有 Pod 都是开放的。
上面的 Wget 命令是在 BusyBox 这个 Pod 里面执行的。-q 和 -O - 的组合会使这个命令在命令行输出 nginx 的缺省首页,这表明我们的验证是成功的。用 Ctl-D 退出容器。
接下来我们就要加入限制了。我们的做法是先限制对所有 Pod 的访问,然后建立白名单。 kubectl apply下面的 YAML 文件就可以限制所有访问:
我们再试着用之前的 BusyBox 的方式来访问一下:
这此我们设置了 5 秒的超时。因为访问被拒接,所以确实会超时:
好,我们的第一个 Network Policy 已经生效了。然而,限制对所有 Pod 的访问显然是没有意义的。接下来我们建立一个白名单 . apply 下面的 YAML 文件:
接下来我们试试看能否成功地访问了:
我们依然会看到熟悉的 Nginx 缺省首页。如果我们运行一个不符合上述 selector 的 Pod,就无法访问。这个留给有兴趣的同学自己回去验证。
正式的 API 和之前的 API 区别有:
这里细节很多,我们只需要关注这几点:
Calico 使用 conntrack 来优化。就是说,一旦一个连接已经建立,之后的packet都会直接被允许通过。比如:
A:两者在 iptables 层面上的实现原理是一样的。都用了-m
Q:Calico 结合 Kubernetes 怎么实现多租户,比如网络隔离之类的?
A:各有各的市场 :-)。
Q:NPC 必须用 iptables 实现吗?在某些情况下,Pod 出向流量并不会由主机协议栈,这样 iptables 就用不了,这种情况下 NPC 怎么实现呢 ?
本次培训围绕基于Docker的CI/CD实战展开,具体内容包括:持续集成与持续交付(CI/CD)概览;持续集成系统介绍;客户端与服务端的 CI/CD 实践;开发流程中引入 CI、CD;Gitlab 和 CI、CD 工具;Gitlab CI、Drone 的使用以及实践经验分享等。点击识别下方二维码加微信好友了解 。