Kuberbetes

发布于 3 小时前  8 次阅读


service

service主要功能有两个,一个是实现了服务之间的关联解耦,一个是实现了服务发现和负载均衡。

负载均衡类型是在公网上发布服务的标准方式,例如用户在云或者本地的机器上面有个负载均衡的系统,该负载均衡系统通常会有一个固定的IP地址,当外部网络访问该IP地址时,会将请求转发到服务上。

逻辑层面上,service是真实应用的抽象,每一个serrvice都通过标签选择器关联着一系列的Pod。service是应用服务的代理服务器,对外表现为一个单一访问入口,通过Kubernetes Proxy 把请求转发到服务关联的Pod。

服务的类型:

  • ClusterIP
    • 提供一个集群内部的虚拟IP,与Pod不在同一个网段,用于集群内布Pod之间的通信。
  • nodeport
    • 使用宿主机的端口暴露集群中的某个服务,外部用户访问该节点的IP地址和端口就能访问到这个服务。
  • loadbalancer
    • 使用外接负载均衡完成服务到负载的分发,需要在spec.status.loadbalancer字段指定负载均衡器的IP地址,并同时定义nodePort和ClusterIP
  • externalname
    • 相当于把外部的服务引入到内部,比如说有些服务是没有部署到在集群内布的,可以通过 ExternalName 把它引入到内部。

外部网络访问服务:

  • 两种常见的方式:
    • 通过ClusterIP
      • Kubernetes的API提供了外部访问ClusterIP的能力,其访问方式:http://masterip:8080/api/vi/proxy/namspaces/<namespace>/services/<service-name>:<port_name>/
      • 示例:http://192.168.1.121:8080/api/vi/proxy/namespaces/default/services/web-service:http/
    • 通过NodePort
      • 涉及三个端口:
        • port:service在集群内部暴露的端口
        • targetport:容器内部真正监听的端口
        • nondeport:Kubernets在每一个节点的物理网卡开放的一个端口(默认30000-32767)。外部想要访问集群里的service可以通过<任意节点的ip>:<nodeport>来访问。

服务发现:CoreDNS

CoreDNS是集群内部的 DNS 服务器,为 Kubernetes 集群内的 Service 提供域名解析服务,当你在 Pod 中访问 my-service.my-namespace.svc.cluster.local 这样的域名时,CoreDNS 会将其解析为对应 Service 的 ClusterIP,不处理 HTTP/HTTPS 请求,只负责将服务名转化为IP 地址。(书P138-146)

A life of freedom is all my ambition
最后更新于 2025-12-30