本文重点介绍Kubernetes的更新,以及Tungsten Fabric中相应支持的功能。
Kubernetes节点的TLS引导功能
从5.1版本开始,Tungsten Fabric支持Kubernetes节点的TLS引导(Bootstrapping)。TLS引导简化了Kubernetes从TF集群中添加和移除节点的能力。
基于优先权的多租户
从5.1版本开始,Tungsten Fabric通过ResourceQuotaScopeSelector功能支持各种资源配额的优先级。
改进的自动缩放功能
从5.1版本开始,Tungsten Fabric可以基于负载创建和删除pod,从而支持改进的pod自动缩放功能。
通过ip-fabric-forwarding功能实现Kubernetes Pod的可达性
Kubernetes pod是一组单个或多个容器(如Docker容器),这些容器共享的存储,以及如何运行容器的配置选项。由于pod处于overlay网络中,所以如果没有网关或vRouter,就无法从underlay网络直接到达。
从TF 5.0版本开始,ip-fabric-forwarding功能可以将虚拟网络作为underlay网络的一部分而创建,并消除了针对数据的封装和解封装需求。注意,ip-fabric-forwarding功能仅适用于pod网络。如果启用了ip-fabric-forwarding功能,pod-网络就会关联到ip-fabric-ipam,而不是pod-ipam,pod-ipam也是一个flat子网。
这里的ip-fabric-forwarding功能在全局级和命名空间级中被启用和禁用。默认情况下,全局级别的ip-fabric-forwarding功能是被禁用的。要在全局级别启用该功能,必须在/etc/contrail/contrail-kubernetes.conf文件的"[KUBERNETES]"部分将"ip_fabric_forwarding"设置为"true"。要在命名空间级别启用或禁用该功能,必须在命名空间注释中分别将"ip_fabric_forwarding"设置为"true"或"false"。例如,"opencontrail.org/ip_fabric_forwarding":"true"。该功能一旦启用,就不能被禁用。
更多信息,请参阅以下链接:
https://github.com/tungstenfabric/tf-specs/blob/master/gateway-less-forwarding.md
通过虚拟网络实现服务隔离
在隔离命名空间模式下,一个命名空间中的服务无法从其它命名空间访问,除非明确定义了安全组或网络策略以允许访问。如果任何Kubernetes服务是由隔离命名空间中的pod实现的,那么这些服务只能通过Kubernetes的service-ip对同一命名空间中的pod进行访问。
Kubernetes的service-ip虽然在一个隔离的命名空间中,但还是从集群网络中分配。因此,默认情况下,来自一个命名空间的服务可以到达另一个命名空间的服务。然而,隔离命名空间中的安全组会阻止从外部命名空间的访问,也会阻止从集群外部的访问。为了使外部命名空间能够访问,必须编辑安全组以允许访问所有命名空间,但这就违背了隔离的目的。
这里的ip-fabric-forwarding功能在全局级和命名空间级中被启用和禁用。默认情况下,全局级别的ip-fabric-forwarding功能是被禁用的。要在全局级别启用该功能,必须在/etc/contrail/contrail-kubernetes.conf文件的"[KUBERNETES]"部分将"ip_fabric_forwarding"设置为"true"。要在命名空间级别启用或禁用该功能,必须在命名空间注释中分别将"ip_fabric_forwarding"设置为"true"或"false"。例如,"opencontrail.org/ip_fabric_forwarding":"true"。该功能一旦启用,就不能被禁用。
更多信息,请参阅以下链接:
https://github.com/tungstenfabric/tf-specs/blob/master/gateway-less-forwarding.md
通过虚拟网络实现服务隔离
在隔离命名空间模式下,一个命名空间中的服务无法从其它命名空间访问,除非明确定义了安全组或网络策略以允许访问。如果任何Kubernetes服务是由隔离命名空间中的pod实现的,那么这些服务只能通过Kubernetes的service-ip对同一命名空间中的pod进行访问。
Kubernetes的service-ip虽然在一个隔离的命名空间中,但还是从集群网络中分配。因此,默认情况下,来自一个命名空间的服务可以到达另一个命名空间的服务。然而,隔离命名空间中的安全组会阻止从外部命名空间的访问,也会阻止从集群外部的访问。为了使外部命名空间能够访问,必须编辑安全组以允许访问所有命名空间,但这就违背了隔离的目的。
Kubernetes服务Node-Port是基于节点与pod的可达性。由于Tungsten Fabric通过网络策略提供了节点和pod之间的连接,所以支持Node Port。
Kubernetes网络策略支持
Tungsten Fabric支持以下Kubernetes 1.12版网络策略功能。
·网络策略的egress支持——每个 NetworkPolicy包括一个policyTypes列表(包括Ingress、Egress,或两者兼有)。policyTypes字段表示给定策略是否适用于所选pod的ingress流量,是否适用于所选pod的egress流量,或者两者都适用。从5.1版本开始,Tungsten Fabric支持podSelector&namespaceSelector egress规范。从5.0版本开始,Tungsten Fabric还支持podSelector、namespaceSelector和egress CIDR规范。
·无类别域间路由(CIDR)选择器支持egress和ingress网络策略。
·Contrail-ansible-deployer提供——Contrail-ansible-deployer更新以支持Kubernetes 1.12。
Tungsten Fabric支持Kubernetes 1.9.2版本,并能够在TF中使用防火墙安全策略框架实现Kubernetes网络策略。虽然Kubernetes网络策略可以使用TF中的其它安全对象(如安全组和TF网络策略)来实现,但TF防火墙安全策略对标签的支持,有助于工作负载的简化和抽象。
(注:原文出现Contrail或Contrail networking的地方,本文都以Tungsten Fabric替代,绝大多数情况下两者功能一致。)