K8S接口请求过程
K8S接口请求过程
- 1. 宿主机IP (Host IP)
- 2. Service IP
- 3. NodePort
- 4. Pod端口 (Pod Port)
- 5. 容器端口 (Container Port)
- 6. 应用端口 (Application Port)
- 例子:外部流量如何进入应用
- 配置
- 流量路径表
- 详细说明
- 补充说明--连通性测试:
在Kubernetes(k8s)中,网络模型和端口配置是确保应用能够正确接收和处理外部流量的关键。下面我将详细解释宿主机IP、Service IP、容器IP、NodePort、Pod端口、容器端口和应用端口的作用和关系,并通过一个例子来说明外部流量如何进入应用。
1. 宿主机IP (Host IP)
- 作用: 宿主机IP是运行Kubernetes节点的物理或虚拟机的IP地址。
- 关系: 宿主机IP是Kubernetes集群中每个节点的唯一标识,用于节点之间的通信。
2. Service IP
- 作用: Service IP是Kubernetes Service的虚拟IP地址,用于在集群内部访问Service。
- 关系: Service IP是集群内部的逻辑地址,通过它可以访问到后端的Pod。Service IP由Kubernetes的Service资源管理,通常是一个集群内部的虚拟IP。
3. NodePort
- 作用: NodePort是Kubernetes Service的一种类型,它在每个节点的IP地址上开放一个端口,通过这个端口可以访问Service。
- 关系: NodePort将Service暴露在每个节点的IP地址上,使得外部流量可以通过节点的IP地址和NodePort访问到Service。
4. Pod端口 (Pod Port)
- 作用: Pod端口是Pod中容器监听的端口。
- 关系: Pod端口是容器内部的应用程序监听的端口,通过这个端口可以访问到容器中的应用。
5. 容器端口 (Container Port)
- 作用: 容器端口是容器内部应用程序监听的端口。
- 关系: 容器端口是应用程序在容器内部监听的端口,通过这个端口可以访问到应用程序。
6. 应用端口 (Application Port)
- 作用: 应用端口是应用程序实际监听的端口。
- 关系: 应用端口是应用程序在容器内部监听的端口,通过这个端口可以访问到应用程序。
例子:外部流量如何进入应用
当然,可以通过图表来更直观地展示从域名请求到应用响应的整个过程。假设我们有一个Web应用,运行在Kubernetes集群中,使用NodePort类型的Service来暴露应用。以下是具体的配置和流量路径:
配置
- 域名:
example.com
- 外部负载均衡器:
192.168.1.1
- 节点1:
192.168.1.100
- 节点2:
192.168.1.101
- Service IP:
10.96.0.1
- NodePort:
30001
- Pod1 IP:
10.244.1.2
- Pod2 IP:
10.244.1.3
- 容器端口:
8080
- 应用端口:
8080
流量路径表
步骤 | 源地址 | 源端口 | 目标地址 | 目标端口 | 说明 |
---|---|---|---|---|---|
1 | 客户端 | 任意 | 192.168.1.1 | 80 | 客户端通过域名 example.com 发送请求到外部负载均衡器 |
2 | 192.168.1.1 | 80 | 192.168.1.100 | 30001 | 外部负载均衡器将请求转发到节点1的NodePort 30001 |
3 | 192.168.1.100 | 30001 | 10.96.0.1 | 8080 | 节点1上的iptables规则将请求转发到Service的虚拟IP 10.96.0.1的8080端口 |
4 | 10.96.0.1 | 8080 | 10.244.1.2 | 8080 | Service将请求负载均衡到后端的Pod1,Pod1的IP地址是10.244.1.2 |
5 | 10.244.1.2 | 8080 | 客户端 | 任意 | Pod1中的容器监听8080端口,处理请求并返回响应 |
详细说明
-
外部客户端:
- 客户端通过域名
example.com
发送HTTP请求。 - 域名解析到外部负载均衡器的IP地址
192.168.1.1
。
- 客户端通过域名
-
外部负载均衡器:
- 外部负载均衡器将请求转发到Kubernetes集群中的一个节点,假设是节点1
192.168.1.100
。 - 转发到节点1的NodePort
30001
。
- 外部负载均衡器将请求转发到Kubernetes集群中的一个节点,假设是节点1
-
节点1:
- 节点1上的iptables规则将请求转发到Service的虚拟IP
补充说明–连通性测试:
外部网络URL访问:集群节点IP + node port,可用 kubectl get nodes 命令查看j节点IP列表中;
节点网络URL访问:svc name + svc port / svc target ip + svc target port