k8s之service解释以及定义

服务(Service)

RC、RS 和 Deployment 只是保证了支撑服务的微服务 Pod 的数量。但是没有解决如何访问这些服务的问题。

一个 Pod 只是一个运行服务的实例,随时可能在节点上停止,然后再新的节点上用一个新的 IP 启动一个新的 Pod,因此不能使用确定的 IP 和端口号提供服务。这对于业务来说,就不能根据 Pod 的 IP 作为业务调度。kubernetes 就引入了 Service 的概 念,它为 Pod 提供一个入口,主要通过 Labels 标签来选择后端Pod,这时候不论后端 Pod 的 IP 地址如何变更,只要 Pod 的 Labels 标签没变,那么 业务通过 service 调度就不会存在问题。

同时 service 对绑定的 Pod 提供了负载均衡的功能,我们业务直接使用 service 即可。

当声明Service的时候,会自动生成一个cluster IP,这个IP是虚拟IP。我们就可以通过这个IP来访问后端的Pod,当然,如果集群配置了DNS服务,比如现在 的CoreDNS,那么也可以通过Service的名字来访问,它会通过DNS自动解析Service的IP地址。

Service 对外暴露服务的方式

1、ClusterIP (默认) :在集群的内部 IP 上公开 Service 。这种类型使得 Service 只能从集群内访问,一般这种类型的 Service 上层会挂一个 Ingress,通过 Ingress 暴露服务;

2、NodePort:在每个选定 Node 的相同端口上公开 Service,使用 <NodeIP>:<NodePort> 即可从集群外部访问 Service;

3、LoadBalancer:使用云厂商的 K8S 集群,即可使用这种方式的暴露 Service,自建的服务一般不支持。使用 LoadBalancer ,会生成一个 IP 地址,通过这个即可访问 Service, 通知这个 IP 也是高可用的;

4、ExternalName: 通过返回带有该名称的 CNAME 记录,使用任意名称(由 spec 中的externalName指定)公开 Service。不使用代理。这种类型需要kube-dns的v1.7或更高版本。

什么是 CNAME:这种记录允许您将多个名字映射到同一台计算机。

例如:当您拥有多个域名需要指向同一服务器IP,此时您就可以将一个域名做A记录指向服务器IP,然后将其他的域名做别名(即CNAME)到A记录的域名上;那么当您的服务器IP地址变更时,您就可以不必对一个一个域名做更改指向了,只需要更改A记录的那个域名到服务器新IP上,其他做别名(即CNAME)的那些域名的指向将自动更改到新的IP地址上(以上操作均需要在DNS处执行)。

相关推荐
酉鬼女又兒2 小时前
零基础快速入门前端DOM 节点操作核心知识点及蓝桥杯 Web 应用开发考点解析(可用于备赛蓝桥杯Web应用开发)
开发语言·前端·javascript·职场和发展·蓝桥杯
xhuiting2 小时前
MySQL专题总结(四)—— 高可用
java·数据库·mysql
不吃蘑菇!2 小时前
LeetCode Hot 100-1(两数之和)
java·数据结构·算法·leetcode·哈希表
IT一氪2 小时前
K8s Admin:一个轻量级的多集群 Kubernetes 管理平台
云原生·容器·kubernetes
小江的记录本2 小时前
【Spring注解】Spring生态常见注解——面试高频考点总结
java·spring boot·后端·spring·面试·架构·mvc
chushiyunen2 小时前
python异常模拟工具类(异常生成工具类)
开发语言·python
qqacj3 小时前
SpringBoot3.3.0集成Knife4j4.5.0实战
java
一只会跑会跳会发疯的猴子3 小时前
php操作elasticsearch,亲测可用
开发语言·elasticsearch·php
Deadly_Bug_GF3 小时前
PID 控制器的核心原理
开发语言·python
煎饼皮皮侠3 小时前
利用 AQS 构建一个自己的公平共享锁
java·aqs·公平共享锁