kubernetes-外部数据库服务映射至集群内-Service与Endpoints的关系
创建yaml文件 配置数据库信息
kind: Service
apiVersion: v1
metadata:
name: mysql-svc
namespace: ops-system
spec:
type: ClusterIP #Kubernetes将为此服务随机分配一个集群内部的IP地址 ClusterIP 类型的服务只能在集群内部访问,提供了一个内部访问的固定 IP 地址,不对外暴露
ports:
- port: 3306 #服务端口 将mysql的实际端口映射到service上的3306端口、将访问该服务port:3306 的流量转发到后端的pod端口targetPort:3306端口上
targetPort: 3306 #pod端口 流量将被路由到后端Pod的3306端口。(定义了后端 Pods 实际监听的端口号)
#Service定义了一个名为mysql-svc的服务,它监听在3306端口(port),并且会将流量转发到后端Pod的6379端口(targetPort)。
kind: Endpoints #Endpoints资源用于定义服务实际后端(mysql)的Pod IP地址和端口、真实的mysql ip和地址
apiVersion: v1
metadata:
name: mysql-svc #Endpoints 的名称是 mysql-svc,与 Service 资源的名称一致。这种名称一致性是关键,确保 Service 和 Endpoints 资源可以关联起来。
namespace: ops-system
subsets:
-
addresses: #addresses 指定了实际服务的 IP 地址(安装mysql的主机ip)
- ip: 192.168.19.18 #mysql实际的ip
ports:
- port: 3306 #mysql实际的端口(定义了实际服务的端口 - 安装mysql的主机上定义访问mysql的端口)
当客户端在 Kubernetes 集群内部请求 mysql-svc 服务时,Service 会将请求路由到 Endpoints 中指定的 IP 地址和端口,即 192.168.19.18:3306
kind: Service
apiVersion: v1
metadata:
name: redis-svc
namespace: ops-system
spec:
type: ClusterIP
ports:
- port: 6379
targetPort: 6379
kind: Endpoints
apiVersion: v1
metadata:
name: redis-svc
namespace: ops-system
subsets:
- addresses:
- ip: 192.168.19.206
ports:
- port: 6379
kind: Service
apiVersion: v1
metadata:
name: doris-svc
namespace: ops-system
spec:
type: ClusterIP
ports:
- port: 9030
targetPort: 9030
kind: Endpoints
apiVersion: v1
metadata:
name: doris-svc
namespace: ops-system
subsets:
addresses:
- ip: 192.168.19.17, 192.168.19.20, 192.168.19.33 #doris集群的节点ip
ports: port: 6030
- ip: 192.168.19.17, 192.168.19.20, 192.168.19.33 #doris集群的节点ip
总结
# 关键点总结 # 1、Service 和 Endpoints 关联: 通过相同的名称 mysql-svc 将 Service 与 Endpoints 关联起来,Service 会将请求转发到 Endpoints 中定义的 IP 地址和端口。
2、集群内服务访问: 使用 ClusterIP 类型的 Service,在集群内部提供一个固定的 IP 地址和服务名称,以便其他 Pods 可以稳定地访问该服务。
3、外部服务整合: 可以将集群外部的服务(如 Redis)整合到 Kubernetes 内部,使得集群内的应用能够统一方式访问外部服务。
4、这个配置非常有助于将外部的服务引入 Kubernetes 集群,使得集群内的应用可以以一种统一的方式进行访问和管理,提升系统的可维护性和灵活性。
5、在 Kubernetes 中,Service 用于将集群内的网络请求路由到一组 Pods 或特定的 IP 地址和端口
聊聊 Service 的ip和端口
# 1、 ClusterIP 是 Kubernetes 中最常用的 Service 类型,它为服务提供一个集群内可达的 IP 地址。这是一个虚拟 IP,用于转发集群内的请求。 # 2、ClusterIP 是一个虚拟 IP,不直接绑定到任何 Pod 或容器的 IP 上。它是集群内部的一个固定地址,服务通过该地址在集群内被访问、说明ClusterIP是游离在集群中的、当集群中有服务要访问时、ClusterIP就去找到相应的Service # 3、Service 定义的 port 是对外暴露的端口,targetPort 则是 Pods 内部实际使用的端口。Service 会将请求从 ClusterIP 的 port 转发到目标容器的 targetPort 如: spec: ports: - port: 6379 # 对外暴露的端口 targetPort: 6380 # 容器内部的端口 #当访问 ClusterIP 的 6379 端口时,请求会被转发到目标 Pods 内部的 6380 端口
4、Service 通过标签选择器或者其它属性(pod名)选择一组 Pods 或通过 Endpoints 定义实际的 IP 和端口,将请求路由到目标服务。
5、Kubernetes Service 提供了一种高效的负载均衡和服务发现机制,使得请求可以被动态地路由到合适的目标服务,提升了集群服务的灵活性和可用性。
聊聊 Endpoints 的IP和端口
#到这里应该大概都了解endpoints的作用了
#可以用一句话概括:endpoints其实就是后端服务(如mysql服务)的代理、通过endpoints代理的服务可以被集群内的服务访问(当然是通过service来访问的)