Skip to main content

k8s流量走向 1

也就是web应用的使用者,通过外网访问云主机,云主机将请求送入k8s?这个完整的流量走向是

是的,用户通过外网访问你的云主机,云主机会将请求转发到 Kubernetes 集群中的相应服务。以下是一个典型的流量走向,从外部用户访问你的 Web 应用到 Kubernetes 集群内部服务的全过程:

1. 用户访问 Web 应用

用户在浏览器中输入你的 Web 应用的 URL,例如 http://203.0.113.1。这里的 203.0.113.1 是你的云主机的公共 IP 地址。

2. 请求到达云主机

用户的请求通过互联网到达云主机的公共 IP 地址。云主机接收到请求后,通常会通过负载均衡器或反向代理将请求转发到 Kubernetes 集群。

3. 负载均衡器或反向代理

在许多云环境中,负载均衡器(如 AWS ELB、GCP Load Balancer、Azure Load Balancer)或反向代理(如 Nginx、HAProxy)会处理外部请求,并将其转发到 Kubernetes 集群的入口点(Ingress Controller 或 NodePort)。

配置示例(使用 Nginx 作为反向代理)

server {
listen 80;
server_name 203.0.113.1;

location / {
proxy_pass http://k8s-cluster-ip:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

4. Kubernetes Ingress Controller 或 NodePort

负载均衡器或反向代理将请求转发到 Kubernetes 集群的 Ingress Controller 或 NodePort 服务。

  • Ingress Controller:处理 HTTP(S) 路由规则,并将请求转发到相应的服务。
  • NodePort:将请求转发到集群内的某个节点上的特定端口。

Ingress 配置示例

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
namespace: default
spec:
rules:
- host: 203.0.113.1
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80

5. Kubernetes Service

Ingress Controller 或 NodePort 将请求转发到 Kubernetes Service。Service 根据其配置,将请求负载均衡到后端的 Pod 上。

Service 配置示例

apiVersion: v1
kind: Service
metadata:
name: my-service
namespace: default
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: ClusterIP

6. Pod

Service 将请求转发到匹配的 Pod 上,Pod 运行你的应用容器,处理请求并生成响应。

7. 响应返回用户

响应通过相同的路径返回用户:

  • Pod 将响应发送回 Service。
  • Service 将响应发送回 Ingress Controller 或 NodePort。
  • Ingress Controller 或 NodePort 将响应发送回负载均衡器或反向代理。
  • 负载均衡器或反向代理将响应发送回用户的浏览器。

流量走向总结

  1. 用户 -> 云主机公共 IP 地址(通过互联网)。
  2. 云主机 -> 负载均衡器或反向代理(如 Nginx)。
  3. 负载均衡器或反向代理 -> Kubernetes Ingress Controller 或 NodePort
  4. Ingress Controller 或 NodePort -> Kubernetes Service
  5. Kubernetes Service -> Pod
  6. Pod -> Kubernetes Service -> Ingress Controller 或 NodePort -> 负载均衡器或反向代理 -> 用户

这个流量走向确保了外部用户能够通过公共 IP 地址访问 Kubernetes 集群内部的服务,同时利用负载均衡和反向代理提高系统的可靠性和性能。