查看OpenShift的网络模块(Kubernetes CNI)
2022年2月1日的追记:
关于OpenShift 4.8及以上版本的默认CNI提供者被描述为OVN-Kubernetes,根据手册(4.8-4.9),仍然将OpenShift SDN设为默认选项,因此进行了修正。
经过和问题
OpenShift的功能经常进行添加和删除,不同版本可能会有不同的可用功能。在控制容器之间的集群内部网络时,由于不同的网络模块支持不同的功能(例如Egress网络策略),因此我们整理了Kubernetes CNI作为网络模块的确认方法。
前提和环境等
・OpenShift4.8的集群环境(IBM云托管/经典网络)
・操作环境为Mac OSX Big Sur 11.6
・calicoctl版本为3.20.3
请提供更多上下文,以便我更好地帮助您完成翻译。
・修订说明:
以下内容基于 OpenShift 4.6 版本,默认使用 OpenShift SDN 作为 CNI 提供者。从 OpenShift 4.8 开始,将默认更改为 OVN-Kubernetes 作为 CNI 提供者。未来的修订中将更新这些内容。
许多CNI插件中都通过iptables实现了Network Policy功能(包括Ingress和Egress规则的控制),但随着规则增加,性能下降的问题一直存在。然而,如果使用OVN,它将被作为OVS的流量进行处理,因此不会增加iptables规则的数量。
– 在IBM云托管的OpenShift(经典网络)环境中,CNI将使用Calico。
Kubernetes网络接口(CNI)
在OpenShift中,网络由Kubernetes CNI管理。Kubernetes CNI有各种可用的插件,主要包括以下几个方面。
・OpenShift SDN(OpenShift 4.6 默认)
・OVN-Kubernetes(OpenShift 4.8 默认)
・CNI插件(如Calico)
・其他第三方插件
第一种方式是用户手动进行安装的标准方式。具体支持的功能差异请参考官方指南(表15.1中默认的CNI网络提供商功能的比较)。需要注意的差异包括对于网络策略设置中egress(控制容器外通信的规则)的支持与否等。
检查正在运行的CNI插件的方法
寻找名为”Network”的自定义资源定义(CRD)。验证operator.openshift.io API组中的Network CRD。
网络资源中存在一个名为cluster的实例,选择它并检查YAML。
在spec的设置中,有一个名为defaultNetwork的选项,用于指定所使用的CNI插件。在本次的IBM Managed OpenShift 4.8环境中,该选项的值为”Calico”。如果在裸金属(Bare-Metal)或虚拟机上以用户管理的方式安装,那么默认情况下,OpenShift 4.6会使用OpenShiftSDN,而4.8会使用OVN-Kubernetes*。另外,还可以在这里查看clusterNetwork和serviceNetwork的子网信息。
目前的手冊上預設仍為OpenShift SDN,但有消息稱OVN-Kubernetes在不久的將來將進行遷移。(修訂日期:2022/2/1)
如果使用IBM Cloud Managed OpeShift(经典网络)的话,CNI将采用Calico。
IBM云:经典:具体参考以下网络策略控制相关流量。
Calico通过在Kubernetes工作节点上设置Linux Iptables规则来实现自动转换为Calico策略的Kubernetes网络策略,并执行这些策略。iptables规则作为工作节点的防火墙,定义了网络流量必须满足才能转发到目标资源的特性。
Calico实现了基本与OpenShift SDN相同的基于iptables规则的网络控制。Kubernetes Network Policy可在OpenShift SDN、OVN-Kubernetes和Calico中使用。虽然Egress Firewall(Egress Network Policy)等功能在默认的CNI中可用,但在Calico中的一部分功能不可用。
查看正在配置的 IBM Cloud Managed OpenShift(经典网络)的网络策略。
在上述的IBM Cloud官方文档中,我们可以找到以下步骤,使用calicoctl模块可以在工作站上下载并访问云上的calico网络策略信息。
当首次在命令提示符等上使用calicoctl时,如果是在Mac上,由于无法验证开发者身份,可能会出现无法打开的错误,因此需要从“系统偏好设置”的“安全性与隐私”中进行允许。
获取适用中的网络策略和全局网络策略,结果如下:
网络策略是通过执行Kubernetes网络策略和Calico网络策略的引用命令获得的。
已经预先使用oc apply在testa命名空间中注册的Kubernetes网络策略可以如预期地通过oc get获得。
通过calicoctl get,可以看到Calico网络策略本身默认没有注册,返回为空。(Calico的网络策略由projectcalico.org API组进行管理,Kubernetes的网络策略由networking.k8s.io API组进行管理,它们的命令有所不同)
全局网络策略可以获取到在集群配置时自动创建的内容。可以确认到一些规则,例如允许ICMP(允许ping)等。
结束
关于OpenShift集群的网络安全问题,如果是在本地部署,则将来OVN-Kubernetes将成为标准,因此可以进行设计,包括网络出口规则。但如果考虑使用云供应商的托管OpenShift,那么最好先查阅官方文档,确认该供应商提供的OpenShift集群的CNI和网络策略等实施方针。