首页 > 其他分享 >详解kubernetes五种暴露服务的方式

详解kubernetes五种暴露服务的方式

时间:2023-01-05 10:33:58浏览次数:49  
标签:Ingress 服务 kubernetes Service 端口 五种 NodePort ClusterIP 详解

部署完服务终将是为了访问,那么kubernetesserviceingress都可以将集群内部的服务能够支持外部访问。service可以让一组 Pod(称为“后端”)为集群内的其他 Pod(称为“前端”)提供功能;ingress通过对集群中服务的外部访问进行管理,也可以提供负载均衡、SSL 终结和基于名称的虚拟托管。

概述

这里说明如何将k8s内部服务暴露给外部服务访问的方式,宏观来说有五种,而k8s官网上讲解的是4+1种,这里探讨服务的暴露方式,而不是serviceingress的区别,分别是

  1. ClusterIP
  2. NodePort
  3. LoadBalancer
  4. ExternalName
  5. Ingress

ClusterIP

介绍

ClusterIP,顾名思义,集群IP。它的作用就是为了能够让其所属Pod能够负载均衡且需要有一个虚拟IP(VIP)提供给IPtables。由于VIP没有挂接到网络设备,所以不能直接访问

ClusterIP Service的默认类型,如果没有指定Servicetype,默认就是ClusterIP

image

典型的ClusterIP 服务的配置文件示例

apiVersion: v1
kind: Service
metadata:
  name: my-internal-service
spec:
  type: ClusterIP
  selector:
    app: mynginx
  ports:
    - name: http
      protocol: TCP
      port: 80

NodePort

介绍

如果想要让服务可以在k8s外部访问。NodePort最原始的方式。还是使用图的方式来说明

image

NodePort会在所有节点(图示中的VM)上开放一个特定端口(图示中的30007),任何发送到该端口的流量都被转发到对应服务(图示中的Service)

典型的NodePort 服务的配置文件示例

apiVersion: v1
kind: Service
metadata:
  name: my-nodeport-service 
spec:
  type: NodePort
  selector:
    app: MyApp
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 80
      ## 当type为NodePort时,如果不指定nodePort的值,系统将选择一个随机端口。大多数时候应该让k8s来选择端口,用户自己来选择可用端口代价太大
      nodePort: 30007

使用场景

这种方式有两个缺点:

  1. 每个端口只能是一种服务
  2. 端口范围只能是 30000-32767(k8s规定)

所以在生产环境上不推荐使用这种方式暴露服务。更多的是在demo应用临时应用上使用这种方式

LoadBalancer

介绍

LoadBalancer 服务是暴露服务到因特网的标准方式。如在GKE(Google Kubernetes Engine) 上,会启动一个Network Load Balancer[2],它将跟你一个单独的IP地址。所有通往指定的端口的流量都会被转发到对应的服务。它没有过滤条件,没有路由等。这意味着你几乎可以发送任何种类的流量到该服务,如 HTTP,TCP,UDP,Websocket,gRPC 或其它种类

image

使用场景

此方式最大的缺点是,每一个用LoadBalancer暴露的服务都需要付费

ExternalName

介绍

ExternalName可以通过返回 CNAME 记录和对应值,实现在kubenetes集群内部调用外部的服务。并且不用创建代理。

image

使用场景

希望在Kubernetes集群内,调用外部的服务。如DB、没迁移到Kubernetes上的应用。使用ExternalName面向的场景大多是临时调用,建议使用完后,删除或恢复为原配置

Ingress(envoy)

介绍

Ingress其实并不是一种服务类型,也就是说它并不是服务(Service),也和ServiceType属性无关。但它可以充当集群的入口点,它可以将路由规则整合到一个资源中,并扮演“智能路由”的角色。

image

但是这种图比较不容易理解。举一个常见的例子,实现外网的流量根据不同的路由地址会转发到不同的service

image

公网IP为175.137.133.21,设定的规则如下:

  • 外网路由175.137.133.21:443/order映射到内网192.168.1.100:80
  • 外网路由175.137.133.21:443/logistics映射到内网192.168.1.110:80
  • 外网路由175.137.133.21:443/goods映射到内网192.168.1.120:80

当然也可以用 Ingress 来做许多不同的事情,各种不同类型的 Ingress 控制器也有不同的能力。

使用场景

Ingress 可能是暴露服务的最强大方式,但同时也是最复杂的。Ingress 控制器有各种类型,包括 Google Cloud Load Balancer, Nginx,Contour,Istio等等。

如果想要使用同一个 IP 暴露多个服务,这些服务都是使用相同的七层协议,那么Ingress 就是最有用的。同时Ingress还支持很多特性,如 SSL、认证等

标签:Ingress,服务,kubernetes,Service,端口,五种,NodePort,ClusterIP,详解
From: https://www.cnblogs.com/reim/p/17026843.html

相关文章

  • css中word-break和word-wrap用法详解
    css中的word-break和word-wrap属性在遇到中文和英文时的表现是不一样的,所以我们会在这些属性遇到中文、英文时分别进行说明。常用于换行word-wrap:break-word;word-b......
  • MapReduce详解
    1 MapReduce是什么​​Hadoop​---MapReduce是一个软件框架,基于该框架能够容易地编写应用程序,这些应用程序能够运行在由上千个商用机器组成的大集群上,并以一种可靠的,具......
  • redis info 对应参数详解
    https://blog.csdn.net/qq_27342265/article/details/123094422   info命令的使用方法有以下三种:info:部分Redis系统状态统计信息。infoall:全部Redis系统状态统......
  • kafka详解(5)-KAFKA重复消费和消息丢失
    Kafka重复消费重复消费消息重复消费的根本原因都在于:已经消费了数据,但是offset没有成功提交。其中很大一部分原因在于发生了再均衡。1)消费者宕机、重启等。导致消息已......
  • python中模块的__all__属性详解
    python中模块的__all__属性详解python模块中的__all__属性,可用于模块导入时限制示例1普通类#kk.pyclassA():def__init__(self,name,age):self.name......
  • Oracle存储过程详解(引用)+补充(转) dbms_output包 good
    执行存储过程时,execute和call的区别 EXECisasqlpluscommandthatputitsargumentasananonymouspl/sqlblock:'EXECxxx'istransformedto'BEGINxxx;END;'......
  • Java反射机制详解
     时间:2022/11/03 一.引出在学习反射的时候,大家可能会纠结反射技术有什么作用,下面我们通过这里需求来说明反射是如何解决现有技术不能解决的问题的:根据配置文件re......
  • APP测试 - Monkey遍历命令详解
    1、启动monkey#对手机点击1000次,不限制应用adbshellmonkey1000#限制在设置的应用中,点击1000次adbshellmonkey-pcom.cleanmaster.mguard1000#设置点击事件......
  • 云原生周刊 | 人类、机器人与 Kubernetes
    近日Grafana官网发表了一篇博客介绍了2022年比较有意思、脑洞大开的一些Grafana使用案例,比如监控特斯拉Model3的充电状态、OTA更新状况等等。海事技术供应商R......
  • (笔记)Linux CAN编程详解
     一、Linux系统中CAN接口配置在Linux系统中,CAN总线接口设备作为网络设备被系统进行统一管理。在控制台下,CAN总线的配置和以太网的配置使用相同的命令。在控制......