Kubernetes(也简称K8s)是一个开源平台,用于自动化编排容器化应用和工作负载的部署、扩缩容与管理。它提供具备内置灵活性、可扩展性、可靠性、高可用性和可移植性的计算基础设施,支持以容器形式运行的应用部署在任何环境中,包括本地、云端和边缘。

什么是Kubernetes?

Kubernetes可自动执行大规模管理容器化工作负载时最常见的任务,包括部署、负载均衡、水平扩缩容、发布与回滚以及自我修复。

许多组织已在生产环境中使用Kubernetes,覆盖部分甚至大多数应用;其他组织也在对其进行评估。Kubernetes凭借广泛普及,已成为容器编排和管理的事实标准。

Kubernetes 的优势

Kubernetes的采用率正在快速增长,因为它有助于:

  • 加快并简化应用发布生命周期
  • 支持工作负载在公有云、私有云、混合云及多云环境之间迁移
  • 提高资源利用效率
  • 更轻松地实现可扩展性并达到生产就绪状态
  • 优化环境,满足业务SLA要求

Kubernetes与微服务

将传统单体应用重构为更小、松耦合的组件,即微服务,有助于提升业务敏捷性,因为应用的新功能和更新可以更快发布,也更易于扩展。采用云原生微服务架构,需要相应演进底层计算基础设施。因此,从物理系统和虚拟机转向容器,已成为运行微服务的高效方式之一。

随着微服务和容器数量的增加,对容器管理自动化的需求也随之增长。这正是Kubernetes发挥作用的地方。

什么是Kubernetes?

Kubernetes(简称K8s)是一个开源平台,用于自动执行和编排容器化应用及工作负载的部署、扩缩容和管理。它为以容器形式在任何环境中运行的应用提供计算基础设施,内置灵活性、可扩展性、可靠性、高可用性和可移植性,适用于本地、云端和边缘环境。

Kubernetes可自动执行大规模管理容器化工作负载时最常见的任务,包括部署、负载均衡、水平扩缩容、发布与回滚以及自我修复。

许多组织已在生产环境中使用Kubernetes,覆盖部分甚至大多数应用;其他组织也在对其进行评估。Kubernetes的广泛普及使其成为容器编排和管理的事实标准。

Kubernetes的优势

Kubernetes的采用率正在快速增长,因为它有助于:

  • 加快并简化应用发布生命周期
  • 支持工作负载在公有云、私有云、混合云及多云环境之间迁移
  • 提高资源利用效率
  • 更轻松地实现可扩展性并达到生产就绪状态
  • 优化环境,满足业务SLA要求

Kubernetes与微服务

将传统单体应用重构为更小、松耦合的组件(称为微服务,https://www.f5.com/glossary/microservices-architecture),有助于提升业务敏捷性,因为这样可以更快地发布应用新功能和更新,也更易于扩展。采用云原生微服务架构,需要相应演进底层计算基础设施。因此,从物理系统和虚拟机转向容器,已成为运行微服务的高效方式之一。

随着微服务和容器数量的增加,自动化容器管理的需求也随之增长。Kubernetes正是在这种情况下发挥作用。

Kubernetes 与 Docker 对比

Kubernetes可大规模编排和运行容器化应用,但不提供将应用代码打包为容器化格式以供分发和执行的方式(容器镜像包含应用代码以及必要的运行时、库和其他软件依赖项)。要运行Pod,Kubernetes还要求在每个节点上安装容器运行时。Kubernetes最初使用Docker Engine作为容器运行时。但从Kubernetes 1.24开始,容器运行时必须符合容器运行时接口(CRI),而Docker Engine并不符合该接口。两种常用的CRI兼容容器运行时是CRI-O和containerd(最初是Docker项目)。

要将应用打包到容器中,需要使用类似Docker这样的工具。Docker是广泛用于构建、共享和运行容器化应用的工具之一。它可以简化应用打包流程并实现自动化,将应用打包成可移植的容器镜像,以便在本地和云端(包括Kubernetes环境)执行和部署。使用Docker打包的容器可在containerd和CRI-O运行时上原生运行。

Kubernetes架构

Kubernetes平台由多个节点组成,这些节点连接成一个集群,共享池化的计算资源。每个集群负责管理Pod,Pod是Kubernetes架构中可部署的最小单元。一个Pod包含一个或多个应用容器。多个Pod组合成一个服务。可以通过多种方法从外部访问Kubernetes集群中的应用,其中Ingress控制器是较为常用且高效的方法之一。

Kubernetes集群

下面详细了解一下Kubernetes环境中的各个组件:

Kubernetes Pod

Kubernetes Pod是可部署在Kubernetes中的最小可执行单元。Pod是应用容器镜像的“虚拟主机”(类似于传统应用的物理服务器或虚拟机),其中封装了一个或多个共享相同计算、存储和网络资源的容器,因此这些容器可视为相对紧密耦合。Pod部署并运行在Kubernetes节点上。

Kubernetes节点

Kubernetes节点是计算基础设施的最小单元。节点可以是虚拟机或物理服务器,用于分配处理器、内存、存储和网络资源,以部署、运行、扩缩和管理Pod。多个节点组合在一起形成集群。

Kubernetes集群

Kubernetes集群由一组节点组成,汇集的计算资源由各Pod共享。集群中有两种类型的节点:

  • 工作节点:运行Pod中的容器化应用
  • 主节点:运行Kubernetes控制平面,负责协调和管理工作节点及Pod

通常,Kubernetes集群中每种类型都有多个节点,以实现高可用性和容错能力。

Kubernetes部署

Kubernetes部署描述了如何在集群中以一组Pod副本(或实例)的形式运行应用。部署定义了:

  • 要运行的Pod副本数量
  • 如何逐步推出Pod更新
  • 如何将Pod副本回滚到之前的状态
  • 如何横向扩展Pod副本

Kubernetes中的应用连接

Kubernetes支持IPv4/IPv6双栈,为集群中运行的容器化应用提供网络连接。Kubernetes集群中应用的入站和出站通信,以及集群内服务之间的通信,均在第4层(IP地址、端口)和第7层(主机名、统一资源标识符[URI])进行管理,并涵盖路由、负载均衡、安全、监控和可视性功能。

Kubernetes Ingress控制器

Kubernetes 网络

在Kubernetes网络模型中,每个Pod都有一个从集群私有地址池动态分配的唯一IP地址。同一集群中所有节点上运行的全部Pod都属于同一个IP网络,并可通过该网络相互通信。一个Pod内的多个容器通过环回接口相互通信。

Kubernetes服务

Kubernetes服务使集群中以一个或多个Pod形式运行的应用或微服务可通过网络访问(即“公开”该应用或微服务)。Kubernetes服务将应用表示为由指定Pod组成的逻辑组,这些Pod执行相同的功能,例如提供Web服务。服务中的所有Pod都应用相同的选择器(或标签),以标记其属于该服务。随着新Pod的部署或运行中Pod的终止,Kubernetes会使用该标签跟踪服务对应的Pod集合。

Kubernetes服务可以根据已定义的连接策略在集群内相互通信,也可以从集群外部访问,例如使用Ingress控制器。

Kubernetes Ingress

Ingress对象是Kubernetes Ingress API的一部分,可通过HTTP等第7层(应用层)协议将Kubernetes中运行的应用对外公开。Ingress网关和Ingress控制器是用于控制Ingress对象并管理用户与应用之间通信(用户到服务或南北向连接)的工具。

Ingress对象在设计上对自定义请求处理策略的支持有限;例如,无法为其定义和附加安全策略。因此,许多供应商使用自定义资源定义(CRD)来扩展其Ingress控制器的功能,以满足不断变化的客户需求。

例如,NGINX Ingress Controller定义了自定义资源(VirtualServer、VirtualServerRoute、TransportServer和Policy),以增强Kubernetes集群边缘的API网关、负载均衡器和Ingress功能的性能、韧性、正常运行时间、安全性和可观测性。

NGINX提供负载均衡、身份验证、授权、访问控制、加密、可观测性和流量拆分(断路器、A/B测试、蓝绿部署和金丝雀部署)服务,确保通信快速、可靠且安全。为支持频繁发布应用,NGINX自定义资源还支持跨多租户开发和DevOps团队的自助式治理。

Kubernetes Gateway API

The Gateway API是一个开源项目,旨在改进并标准化Kubernetes中的服务网络。Gateway API规范由Kubernetes社区管理,基于Kubernetes Ingress API演进而来,旨在解决Ingress资源在生产环境中的局限性,包括支持为请求处理定义精细策略,以及在多个团队和角色之间委派配置控制权。

在我们的博客文章《NGINX Gateway Fabric须知的5件事》中,详细了解NGINX对Gateway API的实现。

服务网格

A 服务网格是一种基础设施层,用于控制Kubernetes集群中各服务之间的通信(服务到服务连接或东西向连接)。服务网格最常见的用例包括对K8s集群中服务间通信进行mTLS身份验证和加密,以及提供可观测性。

详细了解如何使用NGINX Gateway Fabric实现统一应用交付。该工具旨在有效整合Ingress控制器和服务网格用例。请阅读我们的博客文章《NGINX Gateway Fabric 1.0版发布公告》。

Kubernetes安全

Kubernetes安全是一种分层防护方法,用于保护基础设施(本地和云计算资源、网络通信及管理平面)以及在Kubernetes集群中运行的应用。

为保护基础设施,请遵循适用于云端和本地部署的通用安全建议、教程和最佳实践。

为保护应用安全,请在边缘和Kubernetes集群内部实施强有力的安全控制,为进出集群及集群内部的所有通信提供身份验证、授权、访问控制、加密、监控和可见性,并可选择启用Web应用防火墙和拒绝服务攻击防护。

Kubernetes安全

请阅读我们的博客,详细了解如何保护Kubernetes:使用流量管理工具保护Kubernetes的六种方法。

生产环境中的Kubernetes

在采用Kubernetes的早期阶段,自行构建(DIY)是主流方式,但对许多组织而言,这种方式较为复杂,构建和运维难度较高。因此,在生产环境部署中,组织正逐步采用云托管Kubernetes平台和预打包的Kubernetes发行版。这些平台和发行版集成了多种技术组件,可简化维护生命周期,并能部署在混合云和多云环境中。

以下是托管式和预打包Kubernetes平台的一些示例:

云托管的Kubernetes:

预打包的Kubernetes发行版:

NGINX如何提供帮助

NGINX 的 Kubernetes 原生连接和安全技术栈可降低复杂性、提高正常运行时间,并提供大规模、精细的实时可见性,从而帮助改善在本地、云端和边缘运行的 Kubernetes 应用的客户体验。

Connectivity Stack for Kubernetes,优化、扩展并保护跨混合云和多云环境的Kubernetes应用。

  • NGINX Ingress Controller,一款统一的API网关、负载均衡器和Ingress控制器,可在分布式Kubernetes环境中大规模提升业务SLA,并深入洞察应用健康状况和性能。
  • NGINX Gateway Fabric,一种统一的应用交付架构,可简化混合多云Kubernetes环境中的应用、服务和API连接。
  • NGINX App Protect,一款全面的WAF安全和拒绝服务(DoS)防御解决方案,旨在保护应用和API免受第7层攻击。

申请30天免费试用,开始体验集成NGINX App Protect WAF和DoS防护的NGINX Ingress Controller。