泾阳县建设局网站,南通北京网站建设,优质手机网站建设,wordpress 最新教程视频一、Service#xff1a;Kubernetes 中的服务返现与负载均衡
1、为什么需要服务发现
Pod 生命周期短暂#xff0c;IP 地址随时变化。
Deployment 等的 Pod 组需要统一访问入口和做负载均衡。
应用间在不同环境部署时保持同样的部署拓扑和访问方式。
2、应用服务如何暴露到…一、ServiceKubernetes 中的服务返现与负载均衡
1、为什么需要服务发现
Pod 生命周期短暂IP 地址随时变化。
Deployment 等的 Pod 组需要统一访问入口和做负载均衡。
应用间在不同环境部署时保持同样的部署拓扑和访问方式。
2、应用服务如何暴露到外部访问和负载均衡
在 K8s 里面服务发现与负载均衡就是 K8s Service。
K8s Service 向上提供了外部网络以及 pod 网络的访问即外部网络可以通过 service 去访问pod 网络也可以通过 K8s Service 去访问。
向下K8s 对接了另外一组 pod即可以通过 K8s Service 的方式去负载均衡到一组 pod 上面去。 3、Service 语法
ports 定义了用于 K8s Service 服务发现的协议以及端口。
这个示例中定义的是 TCP 协议端口是 80目的端口是 9376效果是访问到这个 service 80 端口会被路由到后端的 targetPort就是只要访问到这个 service 80 端口的都会负载均衡到后端 appMyApp 这种 label 的 pod 的 9376 端口。 二、创建和查看 Service
1、命令
使用 kubectl apply -f service.yaml 或 kubectl created -f service.yaml 可以创建一个 service。
创建好之后可以通过 kubectl discribe service 去查看 service 创建之后的一个结果。 2、架构
在 service 创建之后它会在集群里面创建一个虚拟的 IP 地址以及端口在集群里所有的 pod 和 node 都可以通过这样一个 IP 地址和端口去访问到这个 service。
service 会把它选择的 pod 及其 IP 地址都挂载到后端。这样通过 service 的 IP 地址访问时就可以负载均衡到后端这些 pod 上面去。
当 pod 的生命周期有变化时比如说其中一个 pod 销毁service 就会自动从后端摘除这个 pod。即使 pod 的生命周期有变化它访问的端点是不会发生变化的。 三、访问 service
1、集群内访问 service
集群里面的 pod 要访问到所创建的 service 有三种方式
(1) 通过 service 的虚拟 IP 去访问
例如创建的 my-service 这个服务通过 kubectl get svc 或者 kubectl discribe service 可以看到它的虚拟 IP 地址是 172.29.3.27端口是 80然后可以通过这个虚拟 IP 及端口在 pod 里面直接访问到这个 service 的地址。
(2) 直接访问服务名依靠 DNS 解析
同一个 namespace 里 pod 可以直接通过 service 的名字去访问所声明的 service。
不同 Namespace加上 namespace 名访问 {servicename}.{namespace} 。
(3) 通过环境变量访问
在同一个 namespace 里的 pod 启动时K8s 会把 service 的一些 IP 地址、端口以及一些简单的配置通过环境变量的方式放到 K8s 的 pod 里。 2、Headless Service
service 有一个特别的形态 Headless Service。service 创建的时候可以指定 clusterIP:None告诉 K8s 说我不需要 clusterIP集群的虚拟 IP
实际效果就是集群的 pod 访问 my-service 时会直接解析到所有的 service 对应 pod 的 IP 地址返回给 pod然后 pod 里面自己去选择一个 IP 地址去直接访问。 3、向集群外暴露 Service
service 对外暴露给公网的方式有两种一个是 NodePort一个是 LoadBalancer。
① NodePort 的方式是在集群的节点上去暴露节点上的一个端口相当于在节点的端口访问到之后会再做一层转发转发到虚拟的 IP 地址上面。
② LoadBalancer 是在所有的节点前又挂一个负载均衡。这个负载均衡会提供一个统一的入口并把所有它接触到的流量负载均衡到每一个集群节点的 node pod 上面去node pod 再转化成 ClusterIP去访问到实际的 pod 上面。