首页 > 其他分享 >Kubernetes 服务类型详解

Kubernetes 服务类型详解

时间:2024-02-05 15:55:07浏览次数:37  
标签:Ingress 服务 Kubernetes 应用程序 详解 服务类型 NodePort

Kubernetes 服务类型详解

如今,Kubernetes 已成为管理和扩展云原生应用程序的强大工具。组织需要利用高度可扩展且始终可用的功能来保持零停机时间,快速部署他们的软件。随着越来越多的应用程序被容器化和部署,容器的管理也变得越来越复杂。因此,软件的扩展成为一个问题,而这正是 Kubernetes 大放异彩的地方。借助 Kubernetes,可以轻松地自动化、部署、扩展和监控应用程序。

如果阅读过任何有关 Kubernetes 服务和网络的文档,我们可能会遇到过 ClusterIP、NodePort、LoadBalancer 和 Ingress 等术语。这些术语似乎有很多混淆,在开始构建下一个基于 Kubernetes 的应用程序之前,我们必须了解其中的区别。

本文将解释这四种 Kubernetes 服务类型之间的区别,以及如何为应用程序选择最好的一种。

了解应用程序的网络要求

Kubernetes 网络和服务是一个复杂的话题。我们需要了解应用程序的需求才能成功地将其部署在 Kubernetes 上。这意味着需要了解想要提供的服务类型、集群的大小和位置,以及我们希望应用程序接收什么样的流量。

Kubernetes 支持四种类型的服务:ClusterIP、NodePort、LoadBalancer 和 Ingress。每个都有自己的一组要求来为我们的应用程序启用它们,因此我们必须在部署之前了解我们需要哪一个。

例如,NodePort 允许同一节点内的 Pod 相互通信,而无需分配 IP 地址。我们的 Kubernetes 集群必须至少有两个节点才能使这种类型的网络通信正常工作。此外,NodePort 仅在从集群内部访问时才有效,而 LoadBalancers 或 Ingress 则允许外部访问。下面让我们逐一了解它们的工作原理。

ClusterIP
image-20240205151810984

ClusterIP 是启用集群内多个 pod 通信的默认服务。默认情况下,如果我们不手动定义,我们的服务将在 ClusterIP 上公开。ClusterIP 无法从外界访问。但是,可以使用 Kubernetes 代理来访问我们的服务。此服务类型用于工作负载之间的内部网络,同时调试服务、显示内部仪表板等。

nodePort
image-20240205154614232

NodePort 是最简单的网络类型。它不需要配置,它只是将主机上随机端口上的流量路由到容器上的随机端口。这适用于大多数情况,但它确实有一些缺点:

  • 我们可能需要使用反向代理(如 Nginx)来确保正确路由 Web 请求。
  • 每个端口只能公开一项服务。
  • 每次 Pod 启动时,容器 IP 都会不同,因此无法解析 DNS。
  • 容器无法从 pod 外部访问 localhost,因为没有配置 IP。

不过,我们可以在实验期间和临时用例(例如演示、POC 和内部培训)中使用 NodePort,以展示流量路由的工作原理。建议不要在生产中使用 NodePort 来暴露服务。

Loadbalancer
image-20240205151536794

LoadBalancer 是 Kubernetes 网络最常用的服务类型。它是一个标准的负载均衡器服务,在每个 pod 上运行并建立与外部世界的连接,无论是与 Internet 等网络还是在我们的数据中心内。

LoadBalancer 将保持对已启动的 pod 的连接打开,并关闭与已关闭的 pod 的连接。这类似于我们在 AWS 上的 ELB 或 Azure 上的应用程序网关。上游为 HTTP(S) 流量提供第 4 层路由,而下游为 HTTP(S) 流量提供第 7 层路由。

我们可以根据目标端口号、协议和主机名路由流量,或使用应用程序标签。我们可以将几乎任何类型的流量发送到此服务类型,例如 HTTP、TCP、UDP、Grpc 等。使用这种方法直接公开我们的服务。

Ingress
image-20240205153619807

Ingress 不被认为是官方的 Kubernetes 服务,但它可以用来暴露服务。我们可以通过创建规则来配置 Ingress 服务,以定义哪些入站连接应到达哪些服务。

Ingress 是一个 Kubernetes 对象 ,它位于多个服务的前面并充当智能路由器。它定义了外部流量如何到达集群服务,并配置了一组规则以允许入站连接到达集群上的服务。

入口规则通常由注释定义。Ingress 控制器读取这些注释并相应地配置 iptables 或 NGINX。有许多类型的 Ingress 控制器具有不同的功能。我们可以在此处找到入口控制器列表。

Ingress 是用于公开服务的最强大的服务类型,它只需要我们维护一个负载均衡器,这比使用 LoadBalancer 服务类型便宜。

Kubernetes 是云原生世界的必备工具

Kubernetes 是自动化和管理IT 基础架构的强大工具。它使我们能够对基础架构的相关部分进行分组,在集群中为它们提供自己的“节点”,使它们更易于管理、监控和更新。

标签:Ingress,服务,Kubernetes,应用程序,详解,服务类型,NodePort
From: https://www.cnblogs.com/yhtweirdo/p/18008315

相关文章

  • abc339 详解
    第一篇整场题解纪念我第一次AK的abc!A从后往前找到第一个'.'然后输出'.'到字符串结尾构成的字符串。#include<iostream>usingnamespacestd;intmain(intargc,constchar*argv[]){stringstr;cin>>str;intlen=(int)str.length();stri......
  • 淘宝/天猫商品详情API:返回值参数详解及商业逻辑实现
    在电子商务的高速发展过程中,API接口扮演了至关重要的角色。对于淘宝和天猫这样的大型电商平台,商品详情API是商家与消费者信息沟通的桥梁。本文将深入探讨这一API的返回值参数,并展示如何通过编程利用这些数据实现商业逻辑。一、商品详情API的核心作用商品详情页是电商体验中的重要环......
  • RocketMQ_详细配置与使用详解
    为什么要用MQ 应用解耦系统的耦合性越高,容错性就越低。以电商应用为例,用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何一个子系统出了故障或者因为升级等原因暂时不可用,都会造成下单操作异常,影响用户使用体验。 使用消息队列解耦合,系统的耦合性就会提高了。......
  • 在K8S中,Kubernetes与Docker的关系?
    在Kubernetes(简称K8s)与Docker之间,存在一种互补和依赖的关系:互补关系:Docker:提供容器化解决方案,允许开发人员将应用及其依赖打包到可移植的容器镜像中。Docker主要负责构建、运行和分发这些容器。Kubernetes:是一个容器编排系统,它的目标是自动化部署、扩展以及管理容器化的应用......
  • 【Java基础】Java线程的六种状态详解
    NEW状态当创建一个Thread对象但尚未调用其start()方法时,线程处于NEW状态。在这个状态下,线程并未启动,仅完成了初始化阶段。RUNNABLE状态RUNNABLE是Java中较为特殊的一个状态,它涵盖了传统操作系统中的就绪和运行两种状态。当线程已启动且CPU调度器为其分配了时间片或线程正在等待系......
  • 【adb基础】adb详解及使用
    dumpsysdumpsys是Android系统的调试工具,提供有关系统服务的信息pm(PackageManager)主要用于获取和安装在Android设备上的应用信息。ADB运行架构adbclient--->adbshellechoxxxadbserver--->adb-ltcp:5037fork-serverserver--reply-fd4(可使用命令查看此服务ps......
  • Java 运算符详解与字符串处理技巧
    Java运算符算术运算符算术运算符用于执行常见的数学运算。运算符名称描述示例+加法将两个值相加x+y-减法从一个值中减去另一个值x-y*乘法将两个值相乘x*y/除法将一个值除以另一个值x/y%取模返回除法余数x%y++自增将变量......
  • mysql数据库--行级锁,间隙锁和临键锁详解
    转载链接地址:MySQL数据库——锁-行级锁(行锁、间隙锁和临键锁)介绍行级锁,每次操作锁住对应的行数据。锁定粒度最小,发生锁冲突的概率最低,并发度最高。应用在InnoDB存储引擎中。InnoDB的数据是基于索引组织的,行锁是通过对索引上的索引项加锁来实现的,而不是对记录加的锁。对于行级......
  • 【算法专题】排序详解
    各种排序快速排序、归并排序、桶排序、堆排序1、快速排序(quick_sort)时间复杂度:\(O(nlogn)\)//快速排序模版voidquick_sort(intq[],intl,intr)//数组,左端点,右端点{if(l>=r)return;//“>>”:右移运算符,相当于除以2intx=q[l+r>>1],......
  • 第一章学习Markdown语法详解
    Markdown学习一、标题:一级标题一个井号空格加标题名字就可以了二级标题两个井号空格加标题名字就可以了三级标题三个井号空格加标题名字就可以了四级标题四个井号空格加标题名字就可以了五级六级标题把对应的#写够即可。注意最多只支持到六级标题二、字体Hello,World!......