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

 

总结

# 关键点总结
# 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来访问的)

 

posted @ 2024-06-13 21:55  little小新  阅读(52)  评论(0编辑  收藏  举报