TF+K8s部署指南丨K8s更新及Tungsten Fabric功能支持



  • 本文重点介绍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虽然在一个隔离的命名空间中,但还是从集群网络中分配。因此,默认情况下,来自一个命名空间的服务可以到达另一个命名空间的服务。然而,隔离命名空间中的安全组会阻止从外部命名空间的访问,也会阻止从集群外部的访问。为了使外部命名空间能够访问,必须编辑安全组以允许访问所有命名空间,但这就违背了隔离的目的。

    从5.0版本开始,Tungsten Fabric在隔离的命名空间中实现了从外部集群的服务或入口的可达性。在隔离的命名空间中会创建两个虚拟网络,一个专用于 pod,一个专用于服务。在 pod 网络和服务网络之间创建 TF network-policy,用于 pod 和服务之间的可达性。服务使用相同的service-ipam,这是一个像pod-ipam一样的flat子网。以上也适用于默认命名空间的情况。

    TF ip-fabric-snat功能

    通过TF ip-fabric-snat功能,处于overlay中的pod可以在没有浮动IP或逻辑路由器的情况下到达互联网。该ip-fabric-snat功能使用计算节点IP创建一个源NAT来到达所需的服务,并且只适用于pod网络。当kube-manager初始化时,在global-config中为TCP保留56000到57023端口,为UDP保留57024到58047端口,以创建源NAT。

    该ip-fabric-snat功能可以在全局或命名空间级别启用或禁用。默认情况下,该功能在全局级别是禁用的。要在全局级别启用ip-fabric-snat功能,必须在/etc/contrail/contrail-kubernetes.conf文件中的"[KUBERNETES]"部分将"ip-fabric-snat"设置为"true"。要在命名空间级别启用或禁用它,必须在命名空间注释中分别将"ip_fabric_snat"设置为"true"或"false"。例如,"opencontrail.org/ip_fabric_snat":"true"。

    另外,ip_fabric_snat功能可以在任何时候被启用和禁用。要在default-pod-network中启用或禁用ip_fabric_snat功能,必须使用默认命名空间。如果启用了ip_fabric_forwarding,则会忽略ip_fabric_snat。

    更多信息,请参阅以下链接:
    https://github.com/tungstenfabric/tf-specs/blob/master/distributed-snat.md

    第三方Ingress控制器

    在Tungsten Fabric中可以有多个ingress控制器(ingress controller)共存。如果Kubernetes ingress资源的注释中没有"kubernetes.io/ingress.class"或者是"opencontrail",kube-manager就会创建一个HAProxy负载均衡器。否则会被忽略,由各自的ingress控制器处理ingress资源。由于Tungsten Fabric确保了pod和服务之间的可达性,因此任何ingress控制器都可以直接或通过服务到达端点或pod。

    自定义网络支持Ingress资源

    Tungsten Fabric支持在命名空间级别为pod定制网络。从5.0版本开始,Tungsten Fabric对于ingress资源也支持自定义网络。

    Kubernetes探针和Kubernetes服务节点端口

    Kubelet需要对pod的可达性进行存活和就绪检查。Tungsten Fabric网络策略创建在IP Fabric网络和pod网络之间,以提供节点和pod之间的可达性。每当创建pod网络时,网络策略就会被附加到pod网络上,以提供节点和pod之间的可达性。所以,节点中的任何进程都可以到达pod。
    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防火墙安全策略对标签的支持,有助于工作负载的简化和抽象。


    原文链接:
    https://www.juniper.net/documentation/en_US/contrail20/topics/concept/k8s-ip-fabric.html
    (注:原文出现Contrail或Contrail networking的地方,本文都以Tungsten Fabric替代,绝大多数情况下两者功能一致。)



Log in to reply