外网访问k8s中的443服务具体发生了什么
1 外网访问443 发生了什么
从internet 访问网站443 这个网站是 阿里云中的k8s中的具体nginx(3副本)服务,具体发生了些什么。走了什么流程 当通过 HTTPS 访问一个阿里云中的 Kubernetes 集群中的具体 Nginx 服务时,通常需要以下流程:
访问客户端通过 HTTPS 请求发送到服务器的443端口。
请求进入阿里云负载均衡服务(如SLB),由于阿里云负载均衡服务没有 SSL 证书,它无法对请求进行 SSL/TLS 握手。
SLB 将请求转发给 Kubernetes 集群中的 Ingress Controller Service。
Ingress Controller Service(通常是由 nginx 或者 traefik 实现)负责解析请求,找到对应的 Ingress 对象。
Ingress Controller 根据 Ingress 对象中定义的规则,将请求转发给后端 Nginx 服务。
后端 Nginx 服务接收到请求,返回相应的响应内容,Ingress Controller 将响应返回给客户端。
如果后端 Nginx 服务需要访问其他服务或者资源,它将发送一个新的请求,这些请求也将经过上述步骤进行处理。
需要注意的是,Ingress Controller 会根据 Ingress 对象中的规则来决定将请求转发给哪个后端服务。这些规则可以基于路径、主机名、端口等多个因素进行匹配,并且可以在 Ingress 对象中进行定义。因此,Ingress 对象充当了路由器的作用,它决定了将哪些请求转发给哪些服务。
这个流程图说明了从客户端到 Kubernetes 集群中的 Nginx 服务的请求和响应的过程。具体来说,流程包括:
- 客户端通过 HTTPS 向 Nginx 服务发起请求。
- 请求被转发到阿里云负载均衡(ALB)。
- ALB 把请求转发到 Kubernetes 集群中的工作节点(K8sWorker1)。
- K8sWorker1 把请求转发到 NginxPod1 和 NginxPod2 中的一个。由于该服务的副本数为 3,因此还有一个 Pod(NginxPod3)在另一个工作节点(K8sWorker2)上。
- NginxPod1 接收请求并发送 HTTPS 响应。
- K8sWorker1 转发请求到 NginxPod2 并立即收到一个 TCP ACK 响应,表示 NginxPod2 已经成功接收到请求。
- 同时,K8sWorker2 把请求转发到 NginxPod3 并收到一个 TCP ACK 响应。
- K8sWorker1 向 Kubernetes API 服务器发起请求,以更新 Pod2 的终结点状态(endpoint status)。
- K8sWorker2 向 Kubernetes API 服务器发起请求,以更新 Pod3 的终结点状态。
- Kubernetes API 服务器返回成功响应。
- NginxPod2 和 NginxPod3 现在都已准备好处理新的请求,因此它们现在可以接收新的客户端请求。 总之,这个流程图说明了客户端请求通过 Kubernetes 集群中的负载均衡器和工作节点,最终到达并响应 Nginx 服务的过程。
1.1 细化
体现node,Ingress ,service,nginx pod3副本之间的具体流程、关系。
解释:- 用户通过 HTTPS 协议向 Kubernetes 集群中的某个节点(Node)发送请求。
- Ingress Controller 接收到来自 Node 的请求,并根据 Ingress 配置文件将请求转发到相应的 Service。
- Service 将请求转发到部署了 Nginx Pod 的 Kubernetes 工作节点(K8sWorker)上。
- K8sWorker 从 Nginx Pod 中获取请求,并将请求转发给 Nginx。
- Nginx 处理请求,并将请求结果返回给 K8sWorker。
- K8sWorker 将请求结果返回给 Ingress Controller。
- Ingress Controller 将请求结果返回给 Node。
- Node 将请求结果返回给用户。 在这个过程中,Ingress 和 Service 的作用分别是负责路由和负载均衡,K8sWorker 和 Nginx 则是负责实际的请求处理。
1.2 高级
流程说明:
- 用户在浏览器中输入 HTTPS 地址访问网站,向 Ingress Controller 发出 HTTPS 请求;
- Ingress Controller 接收到请求,根据域名和路径信息转发请求;
- Ingress Controller 向 Kubernetes 集群中的 Service 发出请求,请求负载均衡器将请求转发给后端 pod;
- Kubernetes 集群中的负载均衡器将请求发送到其中一个 nginx Pod 上;
- nginx Pod 接收请求并返回响应,将响应返回给用户。
2 更细化
当通过 HTTPS 访问一个阿里云中的 Kubernetes 集群中的具体 Nginx 服务时的流程如下,包括了节点、API、Ingress、Service、Nginx Pod 3副本之间的具体流程和关系: (图可能会很大,需要放大网页)
上述流程涉及到以下步骤:
这个流程的大致过程是这样的:
- 客户端(Client)向IngressController发送HTTPS请求,请求访问www.fffmo.com
- IngressController接收请求后,通过向Kubernetes集群中的K8sWorker1节点发起请求获取服务信息
- K8sWorker1节点向APIServer请求服务信息,并将请求结果返回给K8sWorker2节点
- K8sWorker2节点向APIServer请求服务信息,并将请求结果返回给K8sWorker3节点
- K8sWorker3节点向APIServer请求服务信息,并将请求结果返回给IngressController
- IngressController通过向Kubernetes集群中的NginxService发起请求来查找Nginx Pod,并通过负载均衡算法选择其中一个Pod
- 选中的Nginx Pod向客户端发送响应,完成请求处理。如果有多个Nginx Pod,客户端将从它们中的一个收到响应。