Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【每日一个云原生小技巧 #12】Service Types

【每日一个云原生小技巧 #12】Service Types

作者头像
郭旭东
发布于 2023-11-01 13:10:23
发布于 2023-11-01 13:10:23
18500
代码可运行
举报
文章被收录于专栏:云原生工具箱云原生工具箱
运行总次数:0
代码可运行

Kubernetes Service 是一个抽象层,定义了如何访问 Pod。Service 提供了一个固定的 IP 地址和 DNS 名称,这样即使 Pod IP 改变,Service 也能保证能够连通。

以下是 k8s 中的四种 Service Types:

  • ClusterIP: 默认的 Service 类型。为 Service 分配一个内部 IP,只有在集群内部可以访问该 Service。 使用场景: 当你只想在集群内部暴露服务时使用。
  • NodePort: 在每个节点上为 Service 打开一个端口,这样 Service 可以使用 <NodeIP>:<NodePort> 来外部访问。 使用场景: 当你想要从集群外部访问服务,但不想使用 LoadBalancer 或其他方法时。
  • LoadBalancer: 为 Service 提供一个外部可访问的 IP 地址,并自动配置 cloud provider 的负载均衡器。 使用场景: 在云提供商环境中,当你想让外部流量进入集群时使用。
  • ExternalName: 将 Service 映射到一个 externalName 字段的内容(例如 my-service.my-namespace.svc.cluster.local 映射到 example.com),但不提供任何其他方法。 使用场景: 当你想将 Service 指向一个外部服务时。

使用技巧

  • 当使用 NodePort 时,你可以指定一个端口号,或者让 k8s 自动生成。
  • 当你不需要固定的外部 IP 地址时,可以先使用 NodePort,然后再迁移到 LoadBalancer
  • 使用 ExternalName 时,确保应用可以解析外部域名

使用案例

ClusterIP

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: v1
kind: Service
metadata:
  name: my-clusterip-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

NodePort

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: v1
kind: Service
metadata:
  name: my-nodeport-service
spec:
  type: NodePort
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
      nodePort: 30080

LoadBalancer

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: v1
kind: Service
metadata:
  name: my-loadbalancer-service
spec:
  type: LoadBalancer
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

ExternalName

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: v1
kind: Service
metadata:
  name: my-externalname-service
spec:
  type: ExternalName
  externalName: example.com

对于每个 Service 类型,你都可以在 spec.selector 字段中定义哪些 Pod 被选为该 Service 的后端,以及 spec.ports 字段定义 Service 的端口和相应的 Pod 的端口。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-10-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Kubernetes Service解析
我们都知道,在K8S集群中,每个Pod都有自己的私有IP地址,并且这些IP地址不是固定的。这意味着其不依赖IP地址而存在。例如,当我们因某种业务需求,需要对容器进行更新操作,则容器很有可能在随后的启动运行过程中被分配到其他IP地址。此外,在K8S集群外部看不到该Pod。因此,Pod若单独运行于K8S体系中,在实际的业务场景中是不现实的,故我们需要通过其他的策略去解决,那么解决方案是什么? 由此,我们引入了Serivce这个概念以解决上述问题。
Luga Lee
2021/12/09
4610
Kubernetes Service解析
【云原生 | Kubernetes篇】深入了解Kubernetes(k8s)Service(十一)
在 Service 的定义中, externalIPs 可以和任何类型的 .spec.type 一通使用。在下面的例子中,客户端可通过 80.11.12.10:80 (externalIP:port) 访问 my-service
Lansonli
2022/06/14
6290
【云原生 | Kubernetes篇】深入了解Kubernetes(k8s)Service(十一)
Kubernetes系列之Service
通过小堂的上篇文章,我们已经能够通过Deployment来创建一组Pod来提供高可用性服务。虽然每 个Pod都会分配一个单独的Pod IP,然而却存在如下两问题:
编程识堂
2023/05/24
4150
Kubernetes系列之Service
Kubernetes-核心资源之Service
在Kubernetes中,Pods是有生命周期的。它们被创建、被终止,但不能被复活。在Kubernetes中通过ReplicationControllers动态的创建和删除Pod。然后,每一个Pod都拥有自己的IP地址,但是这些IP地址随着时间会发生变化。这会导致一个问题:如果在Kubernetes集群中,前端的Pod需要调用后端的Pod的功能,那么这些前端的Pod如何发现和跟踪后端的Pod?
菲宇
2019/06/12
8420
Kubernetes-核心资源之Service
10.服务负载-使用和管理Service
Kubernetes Service 是一个抽象层,用于定义一组 Pod 的访问方式。它为应用程序提供了一个稳定的网络终结点,使得其他服务或外部用户能够访问这组 Pod,而无需关心 Pod 的具体 IP 地址或具体的运行位置。
AI码师
2024/04/23
1190
10.服务负载-使用和管理Service
kubernetes Service:让客户端发现pod并与之通信
  Service 是由 kube-proxy 组件,加上 iptables 来共同实现的。
yaohong
2019/09/09
3K0
转载NodePort,LoadBalancer还是Ingress?我该如何选择 - kubernetes
原文:http://mp.weixin.qq.com/s/dHaiX3H421jBhnzgCCsktg 当我们使用k8s集群部署好应用的Service时,默认的Service类型是ClusterIP,这种类型只有 Cluster 内的节点和 Pod 可以访问。如何将应用的Service暴露给Cluster外部访问呢,Kubernetes 提供了多种类型的 Service,如下: ClusterIP ---- ClusterIP服务是Kuberntets的默认服务。它在集群内部生成一个服务,供集群内的其他应用
justmine
2018/06/13
3.9K0
几张图就把 Kubernetes Service 掰扯清楚了
在 Kubernetes 中 Service 主要有4种不同的类型,其中的 ClusterIP 是最基础的,如下图所示:
公众号: 云原生生态圈
2020/11/10
4360
几张图就把 Kubernetes Service 掰扯清楚了
ASP.NET Core on K8S深入学习(4)你必须知道的Service
本篇已加入《.NET Core on K8S学习实践系列文章索引》,可以点击查看更多容器化技术相关系列文章。
Edison Zhou
2019/08/20
7020
ASP.NET Core on K8S深入学习(4)你必须知道的Service
service mesh框架对比_k8s外部访问内部service
在kubernetes中,Pod是应用程序的载体,我们可以通过Pod的IP来访问应用程序,但是Pod的IP地址不是固定的,这就意味着不方便直接采用Pod的IP对服务进行访问。
全栈程序员站长
2022/09/22
9090
service mesh框架对比_k8s外部访问内部service
Kubernetes Service & LB & Networking :Services
使用标签选择器创建服务,Service 直接关联 Pod,示例:部署 Mysql (细节见文末附录1),再创建服务:
轻量级云原生架构实验室
2018/08/02
1.2K0
Kubernetes Service & LB & Networking :Services
K8s的Service详解
● 在kubernetes中,Pod是应用程序的载体,我们可以通过Pod的IP来访问应用程序,但是Pod的IP地址不是固定的,这就意味着不方便直接采用Pod的IP对服务进行访问。
大忽悠爱学习
2022/09/28
1.4K0
K8s的Service详解
kubernetes—Service介绍
在kubernetes中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但是pod的ip地址不是固定的,这也就意味着不方便直接采用pod的ip对服务进行访问。
Alone-林
2023/03/17
6700
kubernetes—Service介绍
Kubernetes服务发现之Service详解
Kubernetes Pod 是有生命周期的,它们可以被创建,也可以被销毁,然后一旦被销毁生命就永远结束。通过ReplicationController 能够动态地创建和销毁Pod(列如,需要进行扩缩容,或者执行滚动升级);每个Pod都会获取它自己的IP地址,即使这些IP地址不总是稳定可依赖的。这会导致一个问题;在Kubernetes集群中,如果一组Pod(称为backend)为其他Pod(称为frontend)提供服务,那么哪些frontend该如何发现,并连接到这组Pod中的那些backend呢?
kubernetes中文社区
2019/06/24
1.2K0
Kubernetes服务发现之Service详解
你知道K8S暴露服务的方式有哪些吗?
Kubernetes支持多种将外部流量引入集群的方法。ClusterIP、NodePort和Ingress是三种广泛使用的资源,它们都在路由流量中发挥作用。每一个都允许您使用一组独特的功能和折衷方案来公开服务。
KevinYan
2021/09/24
2.6K0
k8s服务发现之第三弹发布Service
Kubernetes 中可以通过不同方式发布 Service,通过 ServiceType 字段指定,该字段的默认值是 ClusterIP,可选值有
linus_lin
2024/09/06
890
k8s服务发现之第三弹发布Service
kubernetes service 原理解析
在 kubernetes 中,当创建带有多个副本的 deployment 时,kubernetes 会创建出多个 pod,此时即一个服务后端有多个容器,那么在 kubernetes 中负载均衡怎么做,容器漂移后 ip 也会发生变化,如何做服务发现以及会话保持?这就是 service 的作用,service 是一组具有相同 label pod 集合的抽象,集群内外的各个服务可以通过 service 进行互相通信,当创建一个 service 对象时也会对应创建一个 endpoint 对象,endpoint 是用来做容器发现的,service 只是将多个 pod 进行关联,实际的路由转发都是由 kubernetes 中的 kube-proxy 组件来实现,因此,service 必须结合 kube-proxy 使用,kube-proxy 组件可以运行在 kubernetes 集群中的每一个节点上也可以只运行在单独的几个节点上,其会根据 service 和 endpoints 的变动来改变节点上 iptables 或者 ipvs 中保存的路由规则。
田飞雨
2019/12/19
5380
kubernetes的service介绍
Kubernetes的Service是一种逻辑抽象,用于访问一个或多个Pod。它为一组Pod提供了一个稳定的IP地址和DNS名称,以便其他应用程序或用户可以访问它们。Service允许Pod动态添加或删除,而不会影响服务的可用性。Service还支持负载均衡,可以将请求分配给多个Pod以提高可扩展性和可靠性。
堕落飞鸟
2023/04/01
8490
Kubernetes | Service - Ingress
Kubernetes Service 定义了这样一种抽象:一个 Pod 的逻辑分组,一种可以访问它们的策略——通常称为微服务。这一组 Pod 能够被 Service 访问到,通常是通过 Label Selector。
Zkeq
2023/05/11
5970
Kubernetes | Service - Ingress
kubernetes中常用对象service的详细介绍
对于kubernetes整个集群来说,Pod的地址也可变的,也就是说如果一个Pod因为某些原因退出了,而由于其设置了副本数replicas大于1,那么该Pod就会在集群的任意节点重新启动,这个重新启动的Pod的IP地址与原IP地址不同,这对于业务来说,就不能根据Pod的IP作为业务调度。kubernetes就引入了Service的概念,它为Pod提供一个入口,主要通过Labels标签来选择后端Pod,这时候不论后端Pod的IP地址如何变更,只要Pod的Labels标签没变,那么 业务通过service调度就不会存在问题。
极客运维圈
2020/01/19
7230
kubernetes中常用对象service的详细介绍
相关推荐
Kubernetes Service解析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验